Commit d5624179 authored by Ben Skeggs's avatar Ben Skeggs

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

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 41a63406
...@@ -245,9 +245,9 @@ gk104_fifo_chan_ctor(struct nvkm_object *parent, struct nvkm_object *engine, ...@@ -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 *fifo = (void *)engine;
struct gk104_fifo_base *base = (void *)parent; struct gk104_fifo_base *base = (void *)parent;
struct gk104_fifo_chan *chan; struct gk104_fifo_chan *chan;
struct nvkm_subdev *subdev = &fifo->base.engine.subdev;
struct nvkm_gpuobj *ramfc = &base->base.gpuobj; struct nvkm_gpuobj *ramfc = &base->base.gpuobj;
u64 usermem, ioffset, ilength; u64 usermem, ioffset, ilength;
u32 engines;
int ret, i; int ret, i;
nvif_ioctl(parent, "create channel gpfifo size %d\n", size); 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, ...@@ -259,20 +259,27 @@ gk104_fifo_chan_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
} else } else
return ret; return ret;
for (i = 0; i < FIFO_ENGINE_NR; i++) { for (i = 0, engines = 0; i < FIFO_ENGINE_NR; i++) {
if (args->v0.engine & (1 << i)) { if (!nvkm_engine(parent, fifo_engine[i].subdev))
if (nvkm_engine(parent, fifo_engine[i].subdev)) { continue;
args->v0.engine = (1 << i); engines |= (1 << i);
break; }
}
} 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) { engines &= args->v0.engine;
nvkm_error(subdev, "unsupported engines %08x\n", if (!engines) {
nvif_ioctl(parent, "unsupported engines %08x\n",
args->v0.engine); args->v0.engine);
return -ENODEV; return -ENODEV;
} }
i = __ffs(engines);
ret = nvkm_fifo_channel_create(parent, engine, oclass, 1, ret = nvkm_fifo_channel_create(parent, engine, oclass, 1,
fifo->user.bar.offset, 0x200, fifo->user.bar.offset, 0x200,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment