Commit 3e7d4a0c authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/fifo: index backend engctx by engine id



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
parent 2546db0e
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ g84_fifo_chan_engine_init(struct nvkm_fifo_chan *base,
			  struct nvkm_engine *engine)
{
	struct nv50_fifo_chan *chan = nv50_fifo_chan(base);
	struct nvkm_gpuobj *engn = chan->engn[engine->subdev.index];
	struct nvkm_gpuobj *engn = *nv50_fifo_chan_engine(chan, engine);
	u64 limit, start;
	int offset;

@@ -142,12 +142,11 @@ g84_fifo_chan_engine_ctor(struct nvkm_fifo_chan *base,
			  struct nvkm_object *object)
{
	struct nv50_fifo_chan *chan = nv50_fifo_chan(base);
	int engn = engine->subdev.index;

	if (g84_fifo_chan_engine_addr(engine) < 0)
		return 0;

	return nvkm_object_bind(object, NULL, 0, &chan->engn[engn]);
	return nvkm_object_bind(object, NULL, 0, nv50_fifo_chan_engine(chan, engine));
}

static int
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ struct gf100_fifo_chan {
	struct gf100_fifo_engn {
		struct nvkm_gpuobj *inst;
		struct nvkm_vma *vma;
	} engn[NVKM_SUBDEV_NR];
	} engn[NVKM_FIFO_ENGN_NR];
};

extern const struct nvkm_fifo_chan_oclass gf100_fifo_gpfifo_oclass;
+2 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ struct gk104_fifo_chan {
	struct gk104_fifo_engn {
		struct nvkm_gpuobj *inst;
		struct nvkm_vma *vma;
	} engn[NVKM_SUBDEV_NR];
	} engn[NVKM_FIFO_ENGN_NR];
};

extern const struct nvkm_fifo_chan_func gk104_fifo_gpfifo_func;
@@ -30,6 +30,7 @@ int gk104_fifo_gpfifo_new(struct gk104_fifo *, const struct nvkm_oclass *,
void *gk104_fifo_gpfifo_dtor(struct nvkm_fifo_chan *);
void gk104_fifo_gpfifo_init(struct nvkm_fifo_chan *);
void gk104_fifo_gpfifo_fini(struct nvkm_fifo_chan *);
struct gk104_fifo_engn *gk104_fifo_gpfifo_engine(struct gk104_fifo_chan *, struct nvkm_engine *);
int gk104_fifo_gpfifo_engine_ctor(struct nvkm_fifo_chan *, struct nvkm_engine *,
				  struct nvkm_object *);
void gk104_fifo_gpfifo_engine_dtor(struct nvkm_fifo_chan *,
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ struct nv04_fifo_chan {
#define NV04_FIFO_ENGN_GR   1
#define NV04_FIFO_ENGN_MPEG 2
#define NV04_FIFO_ENGN_DMA  3
	struct nvkm_gpuobj *engn[NVKM_SUBDEV_NR];
	struct nvkm_gpuobj *engn[NVKM_FIFO_ENGN_NR];
};

extern const struct nvkm_fifo_chan_func nv04_fifo_dma_func;
+12 −4
Original line number Diff line number Diff line
@@ -42,6 +42,15 @@ nv50_fifo_chan_engine_addr(struct nvkm_engine *engine)
	}
}

struct nvkm_gpuobj **
nv50_fifo_chan_engine(struct nv50_fifo_chan *chan, struct nvkm_engine *engine)
{
	int engi = chan->base.fifo->func->engine_id(chan->base.fifo, engine);
	if (engi >= 0)
		return &chan->engn[engi];
	return NULL;
}

static int
nv50_fifo_chan_engine_fini(struct nvkm_fifo_chan *base,
			   struct nvkm_engine *engine, bool suspend)
@@ -103,7 +112,7 @@ nv50_fifo_chan_engine_init(struct nvkm_fifo_chan *base,
			   struct nvkm_engine *engine)
{
	struct nv50_fifo_chan *chan = nv50_fifo_chan(base);
	struct nvkm_gpuobj *engn = chan->engn[engine->subdev.index];
	struct nvkm_gpuobj *engn = *nv50_fifo_chan_engine(chan, engine);
	u64 limit, start;
	int offset;

@@ -130,7 +139,7 @@ nv50_fifo_chan_engine_dtor(struct nvkm_fifo_chan *base,
			   struct nvkm_engine *engine)
{
	struct nv50_fifo_chan *chan = nv50_fifo_chan(base);
	nvkm_gpuobj_del(&chan->engn[engine->subdev.index]);
	nvkm_gpuobj_del(nv50_fifo_chan_engine(chan, engine));
}

static int
@@ -139,12 +148,11 @@ nv50_fifo_chan_engine_ctor(struct nvkm_fifo_chan *base,
			   struct nvkm_object *object)
{
	struct nv50_fifo_chan *chan = nv50_fifo_chan(base);
	int engn = engine->subdev.index;

	if (nv50_fifo_chan_engine_addr(engine) < 0)
		return 0;

	return nvkm_object_bind(object, NULL, 0, &chan->engn[engn]);
	return nvkm_object_bind(object, NULL, 0, nv50_fifo_chan_engine(chan, engine));
}

void
Loading