static void
 gf100_ce_init(struct nvkm_falcon *ce)
 {
-       struct nvkm_device *device = ce->engine.subdev.device;
-       const int index = ce->engine.subdev.index - NVKM_ENGINE_CE0;
-       nvkm_wr32(device, ce->addr + 0x084, index);
+       nvkm_wr32(ce->engine.subdev.device, ce->addr + 0x084, ce->engine.subdev.inst);
 }
 
 static const struct nvkm_falcon_func
 
 void
 gk104_ce_intr(struct nvkm_engine *ce)
 {
-       const u32 base = (ce->subdev.index - NVKM_ENGINE_CE0) * 0x1000;
        struct nvkm_subdev *subdev = &ce->subdev;
        struct nvkm_device *device = subdev->device;
+       const u32 base = subdev->inst * 0x1000;
        u32 mask = nvkm_rd32(device, 0x104904 + base);
        u32 intr = nvkm_rd32(device, 0x104908 + base) & mask;
        if (intr & 0x00000001) {
 
 void
 gp100_ce_intr(struct nvkm_engine *ce)
 {
-       const u32 base = (ce->subdev.index - NVKM_ENGINE_CE0) * 0x80;
        struct nvkm_subdev *subdev = &ce->subdev;
        struct nvkm_device *device = subdev->device;
+       const u32 base = subdev->inst * 0x80;
        u32 mask = nvkm_rd32(device, 0x10440c + base);
        u32 intr = nvkm_rd32(device, 0x104410 + base) & mask;
        if (intr & 0x00000001) { //XXX: guess
 
 {
        struct nvkm_subdev *subdev = &ce->engine.subdev;
        struct nvkm_device *device = subdev->device;
-       const u32 base = (subdev->index - NVKM_ENGINE_CE0) * 0x1000;
+       const u32 base = subdev->inst * 0x1000;
        u32 ssta = nvkm_rd32(device, 0x104040 + base) & 0x0000ffff;
        u32 addr = nvkm_rd32(device, 0x104040 + base) >> 16;
        u32 mthd = (addr & 0x07ff) << 2;