Commit 8c18138c authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/fifo: add chid_nr()



- reads channel count from GPU from gm200 onwards
- removes gm20b/gp10b (they become identical to gm200/gp100)

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
parent 973b3244
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34,4 +34,5 @@ nvkm_blob_dtor(struct nvkm_blob *blob)
	blob->data = NULL;
	blob->size = 0;
}

#endif
+0 −2
Original line number Diff line number Diff line
@@ -72,9 +72,7 @@ int gk208_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct
int gk20a_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
int gm107_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
int gm200_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
int gm20b_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
int gp10b_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
int gv100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
int tu102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
int ga102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **);
+2 −2
Original line number Diff line number Diff line
@@ -2130,7 +2130,7 @@ nv12b_chipset = {
	.volt     = { 0x00000001, gm20b_volt_new },
	.ce       = { 0x00000004, gm200_ce_new },
	.dma      = { 0x00000001, gf119_dma_new },
	.fifo     = { 0x00000001, gm20b_fifo_new },
	.fifo     = { 0x00000001, gm200_fifo_new },
	.gr       = { 0x00000001, gm20b_gr_new },
	.sw       = { 0x00000001, gf100_sw_new },
};
@@ -2356,7 +2356,7 @@ nv13b_chipset = {
	.top      = { 0x00000001, gk104_top_new },
	.ce       = { 0x00000001, gp100_ce_new },
	.dma      = { 0x00000001, gf119_dma_new },
	.fifo     = { 0x00000001, gp10b_fifo_new },
	.fifo     = { 0x00000001, gp100_fifo_new },
	.gr       = { 0x00000001, gp10b_gr_new },
	.sw       = { 0x00000001, gf100_sw_new },
};
+0 −2
Original line number Diff line number Diff line
@@ -13,9 +13,7 @@ nvkm-y += nvkm/engine/fifo/gk208.o
nvkm-y += nvkm/engine/fifo/gk20a.o
nvkm-y += nvkm/engine/fifo/gm107.o
nvkm-y += nvkm/engine/fifo/gm200.o
nvkm-y += nvkm/engine/fifo/gm20b.o
nvkm-y += nvkm/engine/fifo/gp100.o
nvkm-y += nvkm/engine/fifo/gp10b.o
nvkm-y += nvkm/engine/fifo/gv100.o
nvkm-y += nvkm/engine/fifo/tu102.o
nvkm-y += nvkm/engine/fifo/ga102.o
+11 −9
Original line number Diff line number Diff line
@@ -24,14 +24,14 @@
#include "priv.h"
#include "chan.h"

#include <core/client.h>
#include <core/gpuobj.h>
#include <subdev/mc.h>

#include <nvif/event.h>
#include <nvif/cl0080.h>
#include <nvif/unpack.h>

#include "gk104.h"

void
nvkm_fifo_recover_chan(struct nvkm_fifo *fifo, int chid)
{
@@ -290,25 +290,27 @@ nvkm_fifo = {

int
nvkm_fifo_ctor(const struct nvkm_fifo_func *func, struct nvkm_device *device,
	       enum nvkm_subdev_type type, int inst, int nr, struct nvkm_fifo *fifo)
	       enum nvkm_subdev_type type, int inst, struct nvkm_fifo *fifo)
{
	int ret;
	int ret, nr;

	fifo->func = func;
	INIT_LIST_HEAD(&fifo->chan);
	spin_lock_init(&fifo->lock);
	mutex_init(&fifo->mutex);

	ret = nvkm_engine_ctor(&nvkm_fifo, device, type, inst, true, &fifo->engine);
	if (ret)
		return ret;

	INIT_LIST_HEAD(&fifo->chan);

	nr = func->chid_nr ? func->chid_nr(fifo) : gk104_fifo(fifo)->func->chid_nr(fifo);
	if (WARN_ON(fifo->nr > NVKM_FIFO_CHID_NR))
		fifo->nr = NVKM_FIFO_CHID_NR;
	else
		fifo->nr = nr;
	bitmap_clear(fifo->mask, 0, fifo->nr);

	ret = nvkm_engine_ctor(&nvkm_fifo, device, type, inst, true, &fifo->engine);
	if (ret)
		return ret;

	if (func->uevent_init) {
		ret = nvkm_event_init(&nvkm_fifo_uevent_func, &fifo->engine.subdev, 1, 1,
				      &fifo->uevent);
Loading