struct notifier_block nb;
        } acpi;
 
-       struct nvkm_acr *acr;
        struct nvkm_bar *bar;
        struct nvkm_bios *bios;
        struct nvkm_bus *bus;
 #include <core/layout.h>
 #undef NVKM_LAYOUT_INST
 #undef NVKM_LAYOUT_ONCE
-       int (*acr     )(struct nvkm_device *, int idx, struct nvkm_acr **);
        int (*bar     )(struct nvkm_device *, int idx, struct nvkm_bar **);
        int (*bios    )(struct nvkm_device *, int idx, struct nvkm_bios **);
        int (*bus     )(struct nvkm_device *, int idx, struct nvkm_bus **);
 
 /* SPDX-License-Identifier: MIT */
+NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR     , struct nvkm_acr     ,      acr)
 
 bool nvkm_acr_managed_falcon(struct nvkm_device *, enum nvkm_acr_lsf_id);
 int nvkm_acr_bootstrap_falcons(struct nvkm_device *, unsigned long mask);
 
-int gm200_acr_new(struct nvkm_device *, int, struct nvkm_acr **);
-int gm20b_acr_new(struct nvkm_device *, int, struct nvkm_acr **);
-int gp102_acr_new(struct nvkm_device *, int, struct nvkm_acr **);
-int gp108_acr_new(struct nvkm_device *, int, struct nvkm_acr **);
-int gp10b_acr_new(struct nvkm_device *, int, struct nvkm_acr **);
-int tu102_acr_new(struct nvkm_device *, int, struct nvkm_acr **);
+int gm200_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);
+int gm20b_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);
+int gp102_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);
+int gp108_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);
+int gp10b_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);
+int tu102_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);
 
 struct nvkm_acr_lsfw {
        const struct nvkm_acr_lsf_func *func;
 
 #include <core/layout.h>
 #undef NVKM_LAYOUT_ONCE
 #undef NVKM_LAYOUT_INST
-       [NVKM_SUBDEV_ACR     ] = "acr",
        [NVKM_SUBDEV_BAR     ] = "bar",
        [NVKM_SUBDEV_VBIOS   ] = "bios",
        [NVKM_SUBDEV_BUS     ] = "bus",
 
 static const struct nvkm_device_chip
 nv120_chipset = {
        .name = "GM200",
-       .acr = gm200_acr_new,
+       .acr      = { 0x00000001, gm200_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv124_chipset = {
        .name = "GM204",
-       .acr = gm200_acr_new,
+       .acr      = { 0x00000001, gm200_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv126_chipset = {
        .name = "GM206",
-       .acr = gm200_acr_new,
+       .acr      = { 0x00000001, gm200_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv12b_chipset = {
        .name = "GM20B",
-       .acr = gm20b_acr_new,
+       .acr      = { 0x00000001, gm20b_acr_new },
        .bar = gm20b_bar_new,
        .bus = gf100_bus_new,
        .clk = gm20b_clk_new,
 static const struct nvkm_device_chip
 nv130_chipset = {
        .name = "GP100",
-       .acr = gm200_acr_new,
+       .acr      = { 0x00000001, gm200_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv132_chipset = {
        .name = "GP102",
-       .acr = gp102_acr_new,
+       .acr      = { 0x00000001, gp102_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv134_chipset = {
        .name = "GP104",
-       .acr = gp102_acr_new,
+       .acr      = { 0x00000001, gp102_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv136_chipset = {
        .name = "GP106",
-       .acr = gp102_acr_new,
+       .acr      = { 0x00000001, gp102_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv137_chipset = {
        .name = "GP107",
-       .acr = gp102_acr_new,
+       .acr      = { 0x00000001, gp102_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv138_chipset = {
        .name = "GP108",
-       .acr = gp108_acr_new,
+       .acr      = { 0x00000001, gp108_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv13b_chipset = {
        .name = "GP10B",
-       .acr = gp10b_acr_new,
+       .acr      = { 0x00000001, gp10b_acr_new },
        .bar = gm20b_bar_new,
        .bus = gf100_bus_new,
        .fault = gp10b_fault_new,
 static const struct nvkm_device_chip
 nv140_chipset = {
        .name = "GV100",
-       .acr = gp108_acr_new,
+       .acr      = { 0x00000001, gp108_acr_new },
        .bar = gm107_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv162_chipset = {
        .name = "TU102",
-       .acr = tu102_acr_new,
+       .acr      = { 0x00000001, tu102_acr_new },
        .bar = tu102_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv164_chipset = {
        .name = "TU104",
-       .acr = tu102_acr_new,
+       .acr      = { 0x00000001, tu102_acr_new },
        .bar = tu102_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv166_chipset = {
        .name = "TU106",
-       .acr = tu102_acr_new,
+       .acr      = { 0x00000001, tu102_acr_new },
        .bar = tu102_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv167_chipset = {
        .name = "TU117",
-       .acr = tu102_acr_new,
+       .acr      = { 0x00000001, tu102_acr_new },
        .bar = tu102_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 static const struct nvkm_device_chip
 nv168_chipset = {
        .name = "TU116",
-       .acr = tu102_acr_new,
+       .acr      = { 0x00000001, tu102_acr_new },
        .bar = tu102_bar_new,
        .bios = nvkm_bios_new,
        .bus = gf100_bus_new,
 #include <core/layout.h>
 #undef NVKM_LAYOUT_INST
 #undef NVKM_LAYOUT_ONCE
-               _(NVKM_SUBDEV_ACR     ,      acr);
                _(NVKM_SUBDEV_BAR     ,      bar);
                _(NVKM_SUBDEV_VBIOS   ,     bios);
                _(NVKM_SUBDEV_BUS     ,      bus);
 
 
 int
 nvkm_acr_new_(const struct nvkm_acr_fwif *fwif, struct nvkm_device *device,
-             int index, struct nvkm_acr **pacr)
+             enum nvkm_subdev_type type, int inst, struct nvkm_acr **pacr)
 {
        struct nvkm_acr *acr;
        long wprfw;
 
        if (!(acr = *pacr = kzalloc(sizeof(*acr), GFP_KERNEL)))
                return -ENOMEM;
-       nvkm_subdev_ctor(&nvkm_acr, device, index, &acr->subdev);
+       nvkm_subdev_ctor(&nvkm_acr, device, type, inst, &acr->subdev);
        INIT_LIST_HEAD(&acr->hsfw);
        INIT_LIST_HEAD(&acr->lsfw);
        INIT_LIST_HEAD(&acr->hsf);
 
 };
 
 int
-gm200_acr_new(struct nvkm_device *device, int index, struct nvkm_acr **pacr)
+gm200_acr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
+             struct nvkm_acr **pacr)
 {
-       return nvkm_acr_new_(gm200_acr_fwif, device, index, pacr);
+       return nvkm_acr_new_(gm200_acr_fwif, device, type, inst, pacr);
 }
 
 };
 
 int
-gm20b_acr_new(struct nvkm_device *device, int index, struct nvkm_acr **pacr)
+gm20b_acr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
+             struct nvkm_acr **pacr)
 {
-       return nvkm_acr_new_(gm20b_acr_fwif, device, index, pacr);
+       return nvkm_acr_new_(gm20b_acr_fwif, device, type, inst, pacr);
 }
 
 };
 
 int
-gp102_acr_new(struct nvkm_device *device, int index, struct nvkm_acr **pacr)
+gp102_acr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
+             struct nvkm_acr **pacr)
 {
-       return nvkm_acr_new_(gp102_acr_fwif, device, index, pacr);
+       return nvkm_acr_new_(gp102_acr_fwif, device, type, inst, pacr);
 }
 
 };
 
 int
-gp108_acr_new(struct nvkm_device *device, int index, struct nvkm_acr **pacr)
+gp108_acr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
+             struct nvkm_acr **pacr)
 {
-       return nvkm_acr_new_(gp108_acr_fwif, device, index, pacr);
+       return nvkm_acr_new_(gp108_acr_fwif, device, type, inst, pacr);
 }
 
 };
 
 int
-gp10b_acr_new(struct nvkm_device *device, int index, struct nvkm_acr **pacr)
+gp10b_acr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
+             struct nvkm_acr **pacr)
 {
-       return nvkm_acr_new_(gp10b_acr_fwif, device, index, pacr);
+       return nvkm_acr_new_(gp10b_acr_fwif, device, type, inst, pacr);
 }
 
 extern const struct nvkm_acr_hsf_func gp108_acr_unload_0;
 void gp108_acr_hsfw_bld(struct nvkm_acr *, struct nvkm_acr_hsf *);
 
-int nvkm_acr_new_(const struct nvkm_acr_fwif *, struct nvkm_device *, int,
-                 struct nvkm_acr **);
+int nvkm_acr_new_(const struct nvkm_acr_fwif *, struct nvkm_device *, enum nvkm_subdev_type,
+                 int inst, struct nvkm_acr **);
 int nvkm_acr_hsf_boot(struct nvkm_acr *, const char *name);
 
 struct nvkm_acr_lsf {
 
 };
 
 int
-tu102_acr_new(struct nvkm_device *device, int index, struct nvkm_acr **pacr)
+tu102_acr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
+             struct nvkm_acr **pacr)
 {
-       return nvkm_acr_new_(tu102_acr_fwif, device, index, pacr);
+       return nvkm_acr_new_(tu102_acr_fwif, device, type, inst, pacr);
 }