From be0ed63f9b2b835ffef67c5dd7034c57d8a0b0a7 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sun, 6 Dec 2020 21:07:14 +1000 Subject: drm/nouveau/nvkm: determine subdev id/order from layout Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h | 81 +++------------------- drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 32 ++------- 2 files changed, 14 insertions(+), 99 deletions(-) (limited to 'drivers/gpu') diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index 34146e5759e3..5e9a9cae66ed 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -4,78 +4,15 @@ #include enum nvkm_subdev_type { - NVKM_SUBDEV_PCI, - NVKM_SUBDEV_VBIOS, - NVKM_SUBDEV_DEVINIT, - NVKM_SUBDEV_TOP, - NVKM_SUBDEV_IBUS, - NVKM_SUBDEV_GPIO, - NVKM_SUBDEV_I2C, - NVKM_SUBDEV_FUSE, - NVKM_SUBDEV_MXM, - NVKM_SUBDEV_MC, - NVKM_SUBDEV_BUS, - NVKM_SUBDEV_TIMER, - NVKM_SUBDEV_INSTMEM, - NVKM_SUBDEV_FB, - NVKM_SUBDEV_LTC, - NVKM_SUBDEV_MMU, - NVKM_SUBDEV_BAR, - NVKM_SUBDEV_FAULT, - NVKM_SUBDEV_ACR, - NVKM_SUBDEV_PMU, - NVKM_SUBDEV_VOLT, - NVKM_SUBDEV_ICCSENSE, - NVKM_SUBDEV_THERM, - NVKM_SUBDEV_CLK, - NVKM_SUBDEV_GSP, - - NVKM_ENGINE_BSP, - - NVKM_ENGINE_CE0, - NVKM_ENGINE_CE = NVKM_ENGINE_CE0, - NVKM_ENGINE_CE1, - NVKM_ENGINE_CE2, - NVKM_ENGINE_CE3, - NVKM_ENGINE_CE4, - NVKM_ENGINE_CE5, - NVKM_ENGINE_CE6, - NVKM_ENGINE_CE7, - NVKM_ENGINE_CE8, - NVKM_ENGINE_CE_LAST = NVKM_ENGINE_CE8, - - NVKM_ENGINE_CIPHER, - NVKM_ENGINE_DISP, - NVKM_ENGINE_DMAOBJ, - NVKM_ENGINE_FIFO, - NVKM_ENGINE_GR, - NVKM_ENGINE_IFB, - NVKM_ENGINE_ME, - NVKM_ENGINE_MPEG, - NVKM_ENGINE_MSENC, - NVKM_ENGINE_MSPDEC, - NVKM_ENGINE_MSPPP, - NVKM_ENGINE_MSVLD, - - NVKM_ENGINE_NVENC0, - NVKM_ENGINE_NVENC = NVKM_ENGINE_NVENC0, - NVKM_ENGINE_NVENC1, - NVKM_ENGINE_NVENC2, - NVKM_ENGINE_NVENC_LAST = NVKM_ENGINE_NVENC2, - - NVKM_ENGINE_NVDEC0, - NVKM_ENGINE_NVDEC = NVKM_ENGINE_NVDEC0, - NVKM_ENGINE_NVDEC1, - NVKM_ENGINE_NVDEC2, - NVKM_ENGINE_NVDEC_LAST = NVKM_ENGINE_NVDEC2, - - NVKM_ENGINE_PM, - NVKM_ENGINE_SEC, - NVKM_ENGINE_SEC2, - NVKM_ENGINE_SW, - NVKM_ENGINE_VIC, - NVKM_ENGINE_VP, - +#define NVKM_LAYOUT_ONCE(t,s,p) t, +#define NVKM_LAYOUT_INST_3(t) t, t##0 = t, t##1, t##2, t##_LAST = t##2, +#define NVKM_LAYOUT_INST_9(t) t, t##0 = t, t##1, t##2, t##3, t##4, t##5, t##6, t##7, t##8, t##_LAST = t##8, +#define NVKM_LAYOUT_INST(t,s,p,c) NVKM_LAYOUT_INST_##c(t) +#include +#undef NVKM_LAYOUT_INST_9 +#undef NVKM_LAYOUT_INST_3 +#undef NVKM_LAYOUT_INST +#undef NVKM_LAYOUT_ONCE NVKM_SUBDEV_NR }; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 044894940c15..5ee675273fe3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2848,7 +2848,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func, struct nvkm_subdev *subdev; u64 mmio_base, mmio_size; u32 boot0, boot1, strap; - int ret = -EEXIST, i, j; + int ret = -EEXIST, j; unsigned chipset; mutex_lock(&nv_devices_mutex); @@ -3099,9 +3099,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func, mutex_init(&device->mutex); - for (i = 0; i < NVKM_SUBDEV_NR; i++) { - switch (i) { -#define NVKM_LAYOUT_ONCE(type,data,ptr) case type: \ +#define NVKM_LAYOUT_ONCE(type,data,ptr) \ if (device->chip->ptr.inst && (subdev_mask & (BIT_ULL(type)))) { \ WARN_ON(device->chip->ptr.inst != 0x00000001); \ ret = device->chip->ptr.ctor(device, (type), -1, &device->ptr); \ @@ -3117,9 +3115,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func, } else { \ subdev->pself = (void **)&device->ptr; \ } \ - } \ - break; -#define NVKM_LAYOUT_INST(type,data,ptr,cnt) case type: \ + } +#define NVKM_LAYOUT_INST(type,data,ptr,cnt) \ WARN_ON(device->chip->ptr.inst & ~((1 << ARRAY_SIZE(device->ptr)) - 1)); \ for (j = 0; device->chip->ptr.inst && j < ARRAY_SIZE(device->ptr); j++) { \ if ((device->chip->ptr.inst & BIT(j)) && (subdev_mask & BIT_ULL(type))) { \ @@ -3138,29 +3135,10 @@ nvkm_device_ctor(const struct nvkm_device_func *func, subdev->pself = (void **)&device->ptr[j]; \ } \ } \ - } \ - break; + } #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - 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: - case NVKM_ENGINE_NVDEC1: - case NVKM_ENGINE_NVDEC2: - case NVKM_ENGINE_NVENC1: - case NVKM_ENGINE_NVENC2: - break; - default: - WARN_ON(1); - continue; - } - } ret = 0; done: -- cgit v1.2.3