drm/nouveau/nvdec: add gp102 support
gp10x' secure boot requires a blob to be run on NVDEC. Expose the falcon through a dummy device. Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
9e4397579f
commit
16307b5d72
|
@ -155,7 +155,7 @@ struct nvkm_device {
|
|||
struct nvkm_engine *msppp;
|
||||
struct nvkm_engine *msvld;
|
||||
struct nvkm_engine *nvenc[3];
|
||||
struct nvkm_engine *nvdec;
|
||||
struct nvkm_nvdec *nvdec;
|
||||
struct nvkm_pm *pm;
|
||||
struct nvkm_engine *sec;
|
||||
struct nvkm_sw *sw;
|
||||
|
@ -225,7 +225,7 @@ struct nvkm_device_chip {
|
|||
int (*msppp )(struct nvkm_device *, int idx, struct nvkm_engine **);
|
||||
int (*msvld )(struct nvkm_device *, int idx, struct nvkm_engine **);
|
||||
int (*nvenc[3])(struct nvkm_device *, int idx, struct nvkm_engine **);
|
||||
int (*nvdec )(struct nvkm_device *, int idx, struct nvkm_engine **);
|
||||
int (*nvdec )(struct nvkm_device *, int idx, struct nvkm_nvdec **);
|
||||
int (*pm )(struct nvkm_device *, int idx, struct nvkm_pm **);
|
||||
int (*sec )(struct nvkm_device *, int idx, struct nvkm_engine **);
|
||||
int (*sw )(struct nvkm_device *, int idx, struct nvkm_sw **);
|
||||
|
|
|
@ -1,4 +1,12 @@
|
|||
#ifndef __NVKM_NVDEC_H__
|
||||
#define __NVKM_NVDEC_H__
|
||||
#define nvkm_nvdec(p) container_of((p), struct nvkm_nvdec, engine)
|
||||
#include <core/engine.h>
|
||||
|
||||
struct nvkm_nvdec {
|
||||
struct nvkm_engine engine;
|
||||
struct nvkm_falcon *falcon;
|
||||
};
|
||||
|
||||
int gp102_nvdec_new(struct nvkm_device *, int, struct nvkm_nvdec **);
|
||||
#endif
|
||||
|
|
|
@ -2362,7 +2362,7 @@ nvkm_device_engine(struct nvkm_device *device, int index)
|
|||
_(NVENC0 , device->nvenc[0], device->nvenc[0]);
|
||||
_(NVENC1 , device->nvenc[1], device->nvenc[1]);
|
||||
_(NVENC2 , device->nvenc[2], device->nvenc[2]);
|
||||
_(NVDEC , device->nvdec , device->nvdec);
|
||||
_(NVDEC , device->nvdec , &device->nvdec->engine);
|
||||
_(PM , device->pm , &device->pm->engine);
|
||||
_(SEC , device->sec , device->sec);
|
||||
_(SW , device->sw , &device->sw->engine);
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
#nvkm-y += nvkm/engine/nvdec/base.o
|
||||
nvkm-y += nvkm/engine/nvdec/base.o
|
||||
nvkm-y += nvkm/engine/nvdec/gp102.o
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#include "priv.h"
|
||||
|
||||
#include <engine/falcon.h>
|
||||
|
||||
static int
|
||||
nvkm_nvdec_oneinit(struct nvkm_engine *engine)
|
||||
{
|
||||
struct nvkm_nvdec *nvdec = nvkm_nvdec(engine);
|
||||
return nvkm_falcon_v1_new(&nvdec->engine.subdev, "NVDEC", 0x84000,
|
||||
&nvdec->falcon);
|
||||
}
|
||||
|
||||
static void *
|
||||
nvkm_nvdec_dtor(struct nvkm_engine *engine)
|
||||
{
|
||||
struct nvkm_nvdec *nvdec = nvkm_nvdec(engine);
|
||||
nvkm_falcon_del(&nvdec->falcon);
|
||||
return nvdec;
|
||||
}
|
||||
|
||||
static const struct nvkm_engine_func
|
||||
nvkm_nvdec = {
|
||||
.dtor = nvkm_nvdec_dtor,
|
||||
.oneinit = nvkm_nvdec_oneinit,
|
||||
};
|
||||
|
||||
int
|
||||
nvkm_nvdec_new_(struct nvkm_device *device, int index,
|
||||
struct nvkm_nvdec **pnvdec)
|
||||
{
|
||||
struct nvkm_nvdec *nvdec;
|
||||
|
||||
if (!(nvdec = *pnvdec = kzalloc(sizeof(*nvdec), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
|
||||
return nvkm_engine_ctor(&nvkm_nvdec, device, index, true,
|
||||
&nvdec->engine);
|
||||
};
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "priv.h"
|
||||
|
||||
int
|
||||
gp102_nvdec_new(struct nvkm_device *device, int index,
|
||||
struct nvkm_nvdec **pnvdec)
|
||||
{
|
||||
return nvkm_nvdec_new_(device, index, pnvdec);
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef __NVKM_NVDEC_PRIV_H__
|
||||
#define __NVKM_NVDEC_PRIV_H__
|
||||
#include <engine/nvdec.h>
|
||||
|
||||
int nvkm_nvdec_new_(struct nvkm_device *, int, struct nvkm_nvdec **);
|
||||
#endif
|
Loading…
Reference in New Issue