.therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, nv40_volt_new },
-       .ce[0] = gt215_ce_new,
+       .ce       = { 0x00000001, gt215_ce_new },
        .disp = gt215_disp_new,
        .dma = nv50_dma_new,
        .fifo = g84_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, nv40_volt_new },
-       .ce[0] = gt215_ce_new,
+       .ce       = { 0x00000001, gt215_ce_new },
        .disp = gt215_disp_new,
        .dma = nv50_dma_new,
        .fifo = g84_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, nv40_volt_new },
-       .ce[0] = gt215_ce_new,
+       .ce       = { 0x00000001, gt215_ce_new },
        .disp = gt215_disp_new,
        .dma = nv50_dma_new,
        .fifo = g84_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, nv40_volt_new },
-       .ce[0] = gt215_ce_new,
+       .ce       = { 0x00000001, gt215_ce_new },
        .disp = mcp89_disp_new,
        .dma = nv50_dma_new,
        .fifo = g84_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf100_volt_new },
-       .ce[0] = gf100_ce_new,
-       .ce[1] = gf100_ce_new,
+       .ce       = { 0x00000003, gf100_ce_new },
        .disp = gt215_disp_new,
        .dma = gf100_dma_new,
        .fifo = gf100_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf100_volt_new },
-       .ce[0] = gf100_ce_new,
+       .ce       = { 0x00000001, gf100_ce_new },
        .disp = gt215_disp_new,
        .dma = gf100_dma_new,
        .fifo = gf100_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf100_volt_new },
-       .ce[0] = gf100_ce_new,
+       .ce       = { 0x00000001, gf100_ce_new },
        .disp = gt215_disp_new,
        .dma = gf100_dma_new,
        .fifo = gf100_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf100_volt_new },
-       .ce[0] = gf100_ce_new,
-       .ce[1] = gf100_ce_new,
+       .ce       = { 0x00000003, gf100_ce_new },
        .disp = gt215_disp_new,
        .dma = gf100_dma_new,
        .fifo = gf100_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf100_volt_new },
-       .ce[0] = gf100_ce_new,
-       .ce[1] = gf100_ce_new,
+       .ce       = { 0x00000003, gf100_ce_new },
        .disp = gt215_disp_new,
        .dma = gf100_dma_new,
        .fifo = gf100_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf100_volt_new },
-       .ce[0] = gf100_ce_new,
-       .ce[1] = gf100_ce_new,
+       .ce       = { 0x00000003, gf100_ce_new },
        .disp = gt215_disp_new,
        .dma = gf100_dma_new,
        .fifo = gf100_fifo_new,
        .therm    = { 0x00000001, gt215_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf100_volt_new },
-       .ce[0] = gf100_ce_new,
+       .ce       = { 0x00000001, gf100_ce_new },
        .disp = gt215_disp_new,
        .dma = gf100_dma_new,
        .fifo = gf100_fifo_new,
        .therm    = { 0x00000001, gf119_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf117_volt_new },
-       .ce[0] = gf100_ce_new,
+       .ce       = { 0x00000001, gf100_ce_new },
        .disp = gf119_disp_new,
        .dma = gf119_dma_new,
        .fifo = gf100_fifo_new,
        .therm    = { 0x00000001, gf119_therm_new },
        .timer    = { 0x00000001, nv41_timer_new },
        .volt     = { 0x00000001, gf100_volt_new },
-       .ce[0] = gf100_ce_new,
+       .ce       = { 0x00000001, gf100_ce_new },
        .disp = gf119_disp_new,
        .dma = gf119_dma_new,
        .fifo = gf100_fifo_new,
        .timer    = { 0x00000001, nv41_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gk104_ce_new,
-       .ce[1] = gk104_ce_new,
-       .ce[2] = gk104_ce_new,
+       .ce       = { 0x00000007, gk104_ce_new },
        .disp = gk104_disp_new,
        .dma = gf119_dma_new,
        .fifo = gk104_fifo_new,
        .timer    = { 0x00000001, nv41_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gk104_ce_new,
-       .ce[1] = gk104_ce_new,
-       .ce[2] = gk104_ce_new,
+       .ce       = { 0x00000007, gk104_ce_new },
        .disp = gk104_disp_new,
        .dma = gf119_dma_new,
        .fifo = gk104_fifo_new,
        .timer    = { 0x00000001, nv41_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gk104_ce_new,
-       .ce[1] = gk104_ce_new,
-       .ce[2] = gk104_ce_new,
+       .ce       = { 0x00000007, gk104_ce_new },
        .disp = gk104_disp_new,
        .dma = gf119_dma_new,
        .fifo = gk104_fifo_new,
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk20a_volt_new },
-       .ce[2] = gk104_ce_new,
+       .ce       = { 0x00000004, gk104_ce_new },
        .dma = gf119_dma_new,
        .fifo = gk20a_fifo_new,
        .gr = gk20a_gr_new,
        .timer    = { 0x00000001, nv41_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gk104_ce_new,
-       .ce[1] = gk104_ce_new,
-       .ce[2] = gk104_ce_new,
+       .ce       = { 0x00000007, gk104_ce_new },
        .disp = gk110_disp_new,
        .dma = gf119_dma_new,
        .fifo = gk110_fifo_new,
        .timer    = { 0x00000001, nv41_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gk104_ce_new,
-       .ce[1] = gk104_ce_new,
-       .ce[2] = gk104_ce_new,
+       .ce       = { 0x00000007, gk104_ce_new },
        .disp = gk110_disp_new,
        .dma = gf119_dma_new,
        .fifo = gk110_fifo_new,
        .timer    = { 0x00000001, nv41_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gk104_ce_new,
-       .ce[1] = gk104_ce_new,
-       .ce[2] = gk104_ce_new,
+       .ce       = { 0x00000007, gk104_ce_new },
        .disp = gk110_disp_new,
        .dma = gf119_dma_new,
        .fifo = gk208_fifo_new,
        .timer    = { 0x00000001, nv41_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gk104_ce_new,
-       .ce[1] = gk104_ce_new,
-       .ce[2] = gk104_ce_new,
+       .ce       = { 0x00000007, gk104_ce_new },
        .disp = gk110_disp_new,
        .dma = gf119_dma_new,
        .fifo = gk208_fifo_new,
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gm107_ce_new,
-       .ce[2] = gm107_ce_new,
+       .ce       = { 0x00000005, gm107_ce_new },
        .disp = gm107_disp_new,
        .dma = gf119_dma_new,
        .fifo = gm107_fifo_new,
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gm107_ce_new,
-       .ce[2] = gm107_ce_new,
+       .ce       = { 0x00000005, gm107_ce_new },
        .disp = gm107_disp_new,
        .dma = gf119_dma_new,
        .fifo = gm107_fifo_new,
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gm200_ce_new,
-       .ce[1] = gm200_ce_new,
-       .ce[2] = gm200_ce_new,
+       .ce       = { 0x00000007, gm200_ce_new },
        .disp = gm200_disp_new,
        .dma = gf119_dma_new,
        .fifo = gm200_fifo_new,
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gm200_ce_new,
-       .ce[1] = gm200_ce_new,
-       .ce[2] = gm200_ce_new,
+       .ce       = { 0x00000007, gm200_ce_new },
        .disp = gm200_disp_new,
        .dma = gf119_dma_new,
        .fifo = gm200_fifo_new,
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gk104_volt_new },
-       .ce[0] = gm200_ce_new,
-       .ce[1] = gm200_ce_new,
-       .ce[2] = gm200_ce_new,
+       .ce       = { 0x00000007, gm200_ce_new },
        .disp = gm200_disp_new,
        .dma = gf119_dma_new,
        .fifo = gm200_fifo_new,
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
        .volt     = { 0x00000001, gm20b_volt_new },
-       .ce[2] = gm200_ce_new,
+       .ce       = { 0x00000004, gm200_ce_new },
        .dma = gf119_dma_new,
        .fifo = gm20b_fifo_new,
        .gr = gm20b_gr_new,
        .pmu      = { 0x00000001, gm200_pmu_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = gp100_ce_new,
-       .ce[1] = gp100_ce_new,
-       .ce[2] = gp100_ce_new,
-       .ce[3] = gp100_ce_new,
-       .ce[4] = gp100_ce_new,
-       .ce[5] = gp100_ce_new,
+       .ce       = { 0x0000003f, gp100_ce_new },
        .dma = gf119_dma_new,
        .disp = gp100_disp_new,
        .fifo = gp100_fifo_new,
        .pmu      = { 0x00000001, gp102_pmu_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = gp102_ce_new,
-       .ce[1] = gp102_ce_new,
-       .ce[2] = gp102_ce_new,
-       .ce[3] = gp102_ce_new,
+       .ce       = { 0x0000000f, gp102_ce_new },
        .disp = gp102_disp_new,
        .dma = gf119_dma_new,
        .fifo = gp100_fifo_new,
        .pmu      = { 0x00000001, gp102_pmu_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = gp102_ce_new,
-       .ce[1] = gp102_ce_new,
-       .ce[2] = gp102_ce_new,
-       .ce[3] = gp102_ce_new,
+       .ce       = { 0x0000000f, gp102_ce_new },
        .disp = gp102_disp_new,
        .dma = gf119_dma_new,
        .fifo = gp100_fifo_new,
        .pmu      = { 0x00000001, gp102_pmu_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = gp102_ce_new,
-       .ce[1] = gp102_ce_new,
-       .ce[2] = gp102_ce_new,
-       .ce[3] = gp102_ce_new,
+       .ce       = { 0x0000000f, gp102_ce_new },
        .disp = gp102_disp_new,
        .dma = gf119_dma_new,
        .fifo = gp100_fifo_new,
        .pmu      = { 0x00000001, gp102_pmu_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = gp102_ce_new,
-       .ce[1] = gp102_ce_new,
-       .ce[2] = gp102_ce_new,
-       .ce[3] = gp102_ce_new,
+       .ce       = { 0x0000000f, gp102_ce_new },
        .disp = gp102_disp_new,
        .dma = gf119_dma_new,
        .fifo = gp100_fifo_new,
        .pmu      = { 0x00000001, gp102_pmu_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = gp102_ce_new,
-       .ce[1] = gp102_ce_new,
-       .ce[2] = gp102_ce_new,
-       .ce[3] = gp102_ce_new,
+       .ce       = { 0x0000000f, gp102_ce_new },
        .disp = gp102_disp_new,
        .dma = gf119_dma_new,
        .fifo = gp100_fifo_new,
        .pmu      = { 0x00000001, gp10b_pmu_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = gp100_ce_new,
+       .ce       = { 0x00000001, gp100_ce_new },
        .dma = gf119_dma_new,
        .fifo = gp10b_fifo_new,
        .gr = gp10b_gr_new,
        .therm    = { 0x00000001, gp100_therm_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
+       .ce       = { 0x000001ff, gv100_ce_new },
        .disp = gv100_disp_new,
-       .ce[0] = gv100_ce_new,
-       .ce[1] = gv100_ce_new,
-       .ce[2] = gv100_ce_new,
-       .ce[3] = gv100_ce_new,
-       .ce[4] = gv100_ce_new,
-       .ce[5] = gv100_ce_new,
-       .ce[6] = gv100_ce_new,
-       .ce[7] = gv100_ce_new,
-       .ce[8] = gv100_ce_new,
        .dma = gv100_dma_new,
        .fifo = gv100_fifo_new,
        .gr = gv100_gr_new,
        .therm    = { 0x00000001, gp100_therm_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = tu102_ce_new,
-       .ce[1] = tu102_ce_new,
-       .ce[2] = tu102_ce_new,
-       .ce[3] = tu102_ce_new,
-       .ce[4] = tu102_ce_new,
+       .ce       = { 0x0000001f, tu102_ce_new },
        .disp = tu102_disp_new,
        .dma = gv100_dma_new,
        .fifo = tu102_fifo_new,
        .therm    = { 0x00000001, gp100_therm_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = tu102_ce_new,
-       .ce[1] = tu102_ce_new,
-       .ce[2] = tu102_ce_new,
-       .ce[3] = tu102_ce_new,
-       .ce[4] = tu102_ce_new,
+       .ce       = { 0x0000001f, tu102_ce_new },
        .disp = tu102_disp_new,
        .dma = gv100_dma_new,
        .fifo = tu102_fifo_new,
        .therm    = { 0x00000001, gp100_therm_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = tu102_ce_new,
-       .ce[1] = tu102_ce_new,
-       .ce[2] = tu102_ce_new,
-       .ce[3] = tu102_ce_new,
-       .ce[4] = tu102_ce_new,
+       .ce       = { 0x0000001f, tu102_ce_new },
        .disp = tu102_disp_new,
        .dma = gv100_dma_new,
        .fifo = tu102_fifo_new,
        .therm    = { 0x00000001, gp100_therm_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = tu102_ce_new,
-       .ce[1] = tu102_ce_new,
-       .ce[2] = tu102_ce_new,
-       .ce[3] = tu102_ce_new,
-       .ce[4] = tu102_ce_new,
+       .ce       = { 0x0000001f, tu102_ce_new },
        .disp = tu102_disp_new,
        .dma = gv100_dma_new,
        .fifo = tu102_fifo_new,
        .therm    = { 0x00000001, gp100_therm_new },
        .timer    = { 0x00000001, gk20a_timer_new },
        .top      = { 0x00000001, gk104_top_new },
-       .ce[0] = tu102_ce_new,
-       .ce[1] = tu102_ce_new,
-       .ce[2] = tu102_ce_new,
-       .ce[3] = tu102_ce_new,
-       .ce[4] = tu102_ce_new,
+       .ce       = { 0x0000001f, tu102_ce_new },
        .disp = tu102_disp_new,
        .dma = gv100_dma_new,
        .fifo = tu102_fifo_new,
        struct nvkm_subdev *subdev;
        u64 mmio_base, mmio_size;
        u32 boot0, boot1, strap;
-       int ret = -EEXIST, i;
+       int ret = -EEXIST, i, j;
        unsigned chipset;
 
        mutex_lock(&nv_devices_mutex);
 #include <core/layout.h>
 #undef NVKM_LAYOUT_INST
 #undef NVKM_LAYOUT_ONCE
-               _(NVKM_ENGINE_CE0     ,    ce[0]);
-               _(NVKM_ENGINE_CE1     ,    ce[1]);
-               _(NVKM_ENGINE_CE2     ,    ce[2]);
-               _(NVKM_ENGINE_CE3     ,    ce[3]);
-               _(NVKM_ENGINE_CE4     ,    ce[4]);
-               _(NVKM_ENGINE_CE5     ,    ce[5]);
-               _(NVKM_ENGINE_CE6     ,    ce[6]);
-               _(NVKM_ENGINE_CE7     ,    ce[7]);
-               _(NVKM_ENGINE_CE8     ,    ce[8]);
                _(NVKM_ENGINE_CIPHER  ,   cipher);
                _(NVKM_ENGINE_DISP    ,     disp);
                _(NVKM_ENGINE_DMAOBJ  ,      dma);
                _(NVKM_ENGINE_SEC2    ,     sec2);
                _(NVKM_ENGINE_SW      ,       sw);
                _(NVKM_ENGINE_VIC     ,      vic);
+               case NVKM_ENGINE_CE1:
+               case NVKM_ENGINE_CE2:
+               case NVKM_ENGINE_CE3:
+               case NVKM_ENGINE_CE4:
+               case NVKM_ENGINE_CE5:
+               case NVKM_ENGINE_CE6:
+               case NVKM_ENGINE_CE7:
+               case NVKM_ENGINE_CE8:
+                       break;
                default:
                        WARN_ON(1);
                        continue;