Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5624179 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/nvif: add supported engines query to kepler gpfifo class



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 41a63406
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -245,9 +245,9 @@ gk104_fifo_chan_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
	struct gk104_fifo *fifo = (void *)engine;
	struct gk104_fifo_base *base = (void *)parent;
	struct gk104_fifo_chan *chan;
	struct nvkm_subdev *subdev = &fifo->base.engine.subdev;
	struct nvkm_gpuobj *ramfc = &base->base.gpuobj;
	u64 usermem, ioffset, ilength;
	u32 engines;
	int ret, i;

	nvif_ioctl(parent, "create channel gpfifo size %d\n", size);
@@ -259,20 +259,27 @@ gk104_fifo_chan_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
	} else
		return ret;

	for (i = 0; i < FIFO_ENGINE_NR; i++) {
		if (args->v0.engine & (1 << i)) {
			if (nvkm_engine(parent, fifo_engine[i].subdev)) {
				args->v0.engine = (1 << i);
				break;
			}
	for (i = 0, engines = 0; i < FIFO_ENGINE_NR; i++) {
		if (!nvkm_engine(parent, fifo_engine[i].subdev))
			continue;
		engines |= (1 << i);
	}

	if (!args->v0.engine) {
		static struct nvkm_oclass oclass = {
			.ofuncs = &nvkm_object_ofuncs,
		};
		args->v0.engine = engines;
		return nvkm_object_ctor(parent, engine, &oclass, NULL, 0, pobject);
	}

	if (i == FIFO_ENGINE_NR) {
		nvkm_error(subdev, "unsupported engines %08x\n",
	engines &= args->v0.engine;
	if (!engines) {
		nvif_ioctl(parent, "unsupported engines %08x\n",
			   args->v0.engine);
		return -ENODEV;
	}
	i = __ffs(engines);

	ret = nvkm_fifo_channel_create(parent, engine, oclass, 1,
				       fifo->user.bar.offset, 0x200,