Commit 936a1678 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/core: support multiple nvdec instances



Turing GPUs can have more than one.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 3c7fc252
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -61,7 +61,10 @@ enum nvkm_devidx {
	NVKM_ENGINE_NVENC2,
	NVKM_ENGINE_NVENC_LAST = NVKM_ENGINE_NVENC2,

	NVKM_ENGINE_NVDEC,
	NVKM_ENGINE_NVDEC0,
	NVKM_ENGINE_NVDEC1,
	NVKM_ENGINE_NVDEC_LAST = NVKM_ENGINE_NVDEC1,

	NVKM_ENGINE_PM,
	NVKM_ENGINE_SEC,
	NVKM_ENGINE_SEC2,
@@ -163,7 +166,7 @@ struct nvkm_device {
	struct nvkm_engine *msppp;
	struct nvkm_engine *msvld;
	struct nvkm_engine *nvenc[3];
	struct nvkm_nvdec *nvdec;
	struct nvkm_nvdec *nvdec[2];
	struct nvkm_pm *pm;
	struct nvkm_engine *sec;
	struct nvkm_sec2 *sec2;
@@ -235,7 +238,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_nvdec **);
	int (*nvdec[2])(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 (*sec2    )(struct nvkm_device *, int idx, struct nvkm_sec2 **);
+2 −1
Original line number Diff line number Diff line
@@ -79,7 +79,8 @@ nvkm_subdev_name[NVKM_SUBDEV_NR] = {
	[NVKM_ENGINE_NVENC0  ] = "nvenc0",
	[NVKM_ENGINE_NVENC1  ] = "nvenc1",
	[NVKM_ENGINE_NVENC2  ] = "nvenc2",
	[NVKM_ENGINE_NVDEC   ] = "nvdec",
	[NVKM_ENGINE_NVDEC0  ] = "nvdec0",
	[NVKM_ENGINE_NVDEC1  ] = "nvdec1",
	[NVKM_ENGINE_PM      ] = "pm",
	[NVKM_ENGINE_SEC     ] = "sec",
	[NVKM_ENGINE_SEC2    ] = "sec2",
+10 −8
Original line number Diff line number Diff line
@@ -2221,7 +2221,7 @@ nv132_chipset = {
	.dma = gf119_dma_new,
	.fifo = gp100_fifo_new,
	.gr = gp102_gr_new,
	.nvdec = gp102_nvdec_new,
	.nvdec[0] = gp102_nvdec_new,
	.sec2 = gp102_sec2_new,
	.sw = gf100_sw_new,
};
@@ -2257,7 +2257,7 @@ nv134_chipset = {
	.dma = gf119_dma_new,
	.fifo = gp100_fifo_new,
	.gr = gp104_gr_new,
	.nvdec = gp102_nvdec_new,
	.nvdec[0] = gp102_nvdec_new,
	.sec2 = gp102_sec2_new,
	.sw = gf100_sw_new,
};
@@ -2293,7 +2293,7 @@ nv136_chipset = {
	.dma = gf119_dma_new,
	.fifo = gp100_fifo_new,
	.gr = gp104_gr_new,
	.nvdec = gp102_nvdec_new,
	.nvdec[0] = gp102_nvdec_new,
	.sec2 = gp102_sec2_new,
	.sw = gf100_sw_new,
};
@@ -2329,7 +2329,7 @@ nv137_chipset = {
	.dma = gf119_dma_new,
	.fifo = gp100_fifo_new,
	.gr = gp107_gr_new,
	.nvdec = gp102_nvdec_new,
	.nvdec[0] = gp102_nvdec_new,
	.sec2 = gp102_sec2_new,
	.sw = gf100_sw_new,
};
@@ -2365,7 +2365,7 @@ nv138_chipset = {
	.dma = gf119_dma_new,
	.fifo = gp100_fifo_new,
	.gr = gp107_gr_new,
	.nvdec = gp102_nvdec_new,
	.nvdec[0] = gp102_nvdec_new,
	.sec2 = gp102_sec2_new,
	.sw = gf100_sw_new,
};
@@ -2430,7 +2430,7 @@ nv140_chipset = {
	.dma = gv100_dma_new,
	.fifo = gv100_fifo_new,
	.gr = gv100_gr_new,
	.nvdec = gp102_nvdec_new,
	.nvdec[0] = gp102_nvdec_new,
	.sec2 = gp102_sec2_new,
};

@@ -2529,7 +2529,8 @@ 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->engine);
	_(NVDEC0 , device->nvdec[0], &device->nvdec[0]->engine);
	_(NVDEC1 , device->nvdec[1], &device->nvdec[1]->engine);
	_(PM     , device->pm      , &device->pm->engine);
	_(SEC    , device->sec     ,  device->sec);
	_(SEC2   , device->sec2    , &device->sec2->engine);
@@ -2988,7 +2989,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
		_(NVKM_ENGINE_NVENC0  , nvenc[0]);
		_(NVKM_ENGINE_NVENC1  , nvenc[1]);
		_(NVKM_ENGINE_NVENC2  , nvenc[2]);
		_(NVKM_ENGINE_NVDEC   ,    nvdec);
		_(NVKM_ENGINE_NVDEC0  , nvdec[0]);
		_(NVKM_ENGINE_NVDEC1  , nvdec[1]);
		_(NVKM_ENGINE_PM      ,       pm);
		_(NVKM_ENGINE_SEC     ,      sec);
		_(NVKM_ENGINE_SEC2    ,     sec2);
+1 −1
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ nvkm_udevice_info_v1(struct nvkm_device *device,
	case ENGINE_A(MSENC ); break;
	case ENGINE_A(VIC   ); break;
	case ENGINE_A(SEC2  ); break;
	case ENGINE_A(NVDEC ); break;
	case ENGINE_B(NVDEC ); break;
	case ENGINE_B(NVENC ); break;
	default:
		args->mthd = NV_DEVICE_INFO_INVALID;
+1 −1
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ gk104_fifo_gpfifo_engine_addr(struct nvkm_engine *engine)
	case NVKM_ENGINE_MSVLD : return 0x0270;
	case NVKM_ENGINE_VIC   : return 0x0280;
	case NVKM_ENGINE_MSENC : return 0x0290;
	case NVKM_ENGINE_NVDEC : return 0x02100270;
	case NVKM_ENGINE_NVDEC0: return 0x02100270;
	case NVKM_ENGINE_NVENC0: return 0x02100290;
	case NVKM_ENGINE_NVENC1: return 0x0210;
	default:
Loading