From 71ccf2a04ecf98f3abeb0ed129b59bb4b54337cd Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 2 Dec 2020 16:09:25 +1000 Subject: [PATCH 01/87] drm/nouveau/engine: use refcount_t + private mutex nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/engine.h | 6 +++- drivers/gpu/drm/nouveau/nvkm/core/engine.c | 32 ++++++++++++------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h index c6b401a6ea23..c9d84bd17364 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h @@ -11,7 +11,11 @@ struct nvkm_engine { struct nvkm_subdev subdev; spinlock_t lock; - int usecount; + struct { + refcount_t refcount; + struct mutex mutex; + bool enabled; + } use; }; struct nvkm_engine_func { diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c index 1a47c40e171b..8220a0d21628 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c @@ -40,10 +40,11 @@ nvkm_engine_unref(struct nvkm_engine **pengine) { struct nvkm_engine *engine = *pengine; if (engine) { - mutex_lock(&engine->subdev.mutex); - if (--engine->usecount == 0) + if (refcount_dec_and_mutex_lock(&engine->use.refcount, &engine->use.mutex)) { nvkm_subdev_fini(&engine->subdev, false); - mutex_unlock(&engine->subdev.mutex); + engine->use.enabled = false; + mutex_unlock(&engine->use.mutex); + } *pengine = NULL; } } @@ -51,17 +52,21 @@ nvkm_engine_unref(struct nvkm_engine **pengine) struct nvkm_engine * nvkm_engine_ref(struct nvkm_engine *engine) { + int ret; if (engine) { - mutex_lock(&engine->subdev.mutex); - if (++engine->usecount == 1) { - int ret = nvkm_subdev_init(&engine->subdev); - if (ret) { - engine->usecount--; - mutex_unlock(&engine->subdev.mutex); - return ERR_PTR(ret); + if (!refcount_inc_not_zero(&engine->use.refcount)) { + mutex_lock(&engine->use.mutex); + if (!refcount_inc_not_zero(&engine->use.refcount)) { + engine->use.enabled = true; + if ((ret = nvkm_subdev_init(&engine->subdev))) { + engine->use.enabled = false; + mutex_unlock(&engine->use.mutex); + return ERR_PTR(ret); + } + refcount_set(&engine->use.refcount, 1); } + mutex_unlock(&engine->use.mutex); } - mutex_unlock(&engine->subdev.mutex); } return engine; } @@ -114,7 +119,7 @@ nvkm_engine_init(struct nvkm_subdev *subdev) int ret = 0, i; s64 time; - if (!engine->usecount) { + if (!engine->use.enabled) { nvkm_trace(subdev, "init skipped, engine has no users\n"); return ret; } @@ -156,6 +161,7 @@ nvkm_engine_dtor(struct nvkm_subdev *subdev) struct nvkm_engine *engine = nvkm_engine(subdev); if (engine->func->dtor) return engine->func->dtor(engine); + mutex_destroy(&engine->use.mutex); return engine; } @@ -176,6 +182,8 @@ nvkm_engine_ctor(const struct nvkm_engine_func *func, { nvkm_subdev_ctor(&nvkm_engine_func, device, index, &engine->subdev); engine->func = func; + refcount_set(&engine->use.refcount, 0); + mutex_init(&engine->use.mutex); if (!nvkm_boolopt(device->cfgopt, nvkm_subdev_name[index], enable)) { nvkm_debug(&engine->subdev, "disabled\n"); From f5cfbd99aa63d40222826aeed4728bea9a8e9986 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 2 Dec 2020 16:24:20 +1000 Subject: [PATCH 02/87] drm/nouveau/fb: protect comptags with private mutex nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/include/nvkm/subdev/fb.h | 6 +++++- drivers/gpu/drm/nouveau/nvkm/core/memory.c | 18 +++++++++--------- drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c | 10 ++++++---- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c | 2 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c | 4 ++-- 10 files changed, 29 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h index 2ecd52aec1d1..38c2a5fb418a 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h @@ -36,7 +36,11 @@ struct nvkm_fb { struct nvkm_blob vpr_scrubber; struct nvkm_ram *ram; - struct nvkm_mm tags; + + struct { + struct mutex mutex; /* protects mm and nvkm_memory::tags */ + struct nvkm_mm mm; + } tags; struct { struct nvkm_fb_tile region[16]; diff --git a/drivers/gpu/drm/nouveau/nvkm/core/memory.c b/drivers/gpu/drm/nouveau/nvkm/core/memory.c index 38130ef272d6..c69daac9bac7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/memory.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/memory.c @@ -33,13 +33,13 @@ nvkm_memory_tags_put(struct nvkm_memory *memory, struct nvkm_device *device, struct nvkm_fb *fb = device->fb; struct nvkm_tags *tags = *ptags; if (tags) { - mutex_lock(&fb->subdev.mutex); + mutex_lock(&fb->tags.mutex); if (refcount_dec_and_test(&tags->refcount)) { - nvkm_mm_free(&fb->tags, &tags->mn); + nvkm_mm_free(&fb->tags.mm, &tags->mn); kfree(memory->tags); memory->tags = NULL; } - mutex_unlock(&fb->subdev.mutex); + mutex_unlock(&fb->tags.mutex); *ptags = NULL; } } @@ -52,29 +52,29 @@ nvkm_memory_tags_get(struct nvkm_memory *memory, struct nvkm_device *device, struct nvkm_fb *fb = device->fb; struct nvkm_tags *tags; - mutex_lock(&fb->subdev.mutex); + mutex_lock(&fb->tags.mutex); if ((tags = memory->tags)) { /* If comptags exist for the memory, but a different amount * than requested, the buffer is being mapped with settings * that are incompatible with existing mappings. */ if (tags->mn && tags->mn->length != nr) { - mutex_unlock(&fb->subdev.mutex); + mutex_unlock(&fb->tags.mutex); return -EINVAL; } refcount_inc(&tags->refcount); - mutex_unlock(&fb->subdev.mutex); + mutex_unlock(&fb->tags.mutex); *ptags = tags; return 0; } if (!(tags = kmalloc(sizeof(*tags), GFP_KERNEL))) { - mutex_unlock(&fb->subdev.mutex); + mutex_unlock(&fb->tags.mutex); return -ENOMEM; } - if (!nvkm_mm_head(&fb->tags, 0, 1, nr, nr, 1, &tags->mn)) { + if (!nvkm_mm_head(&fb->tags.mm, 0, 1, nr, nr, 1, &tags->mn)) { if (clr) clr(device, tags->mn->offset, tags->mn->length); } else { @@ -92,7 +92,7 @@ nvkm_memory_tags_get(struct nvkm_memory *memory, struct nvkm_device *device, refcount_set(&tags->refcount, 1); *ptags = memory->tags = tags; - mutex_unlock(&fb->subdev.mutex); + mutex_unlock(&fb->tags.mutex); return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c index 5940e0dea2f8..7a13165915c9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c @@ -122,7 +122,7 @@ nvkm_fb_oneinit(struct nvkm_subdev *subdev) nvkm_debug(subdev, "%d comptags\n", tags); } - return nvkm_mm_init(&fb->tags, 0, 0, tags, 1); + return nvkm_mm_init(&fb->tags.mm, 0, 0, tags, 1); } static int @@ -205,7 +205,9 @@ nvkm_fb_dtor(struct nvkm_subdev *subdev) for (i = 0; i < fb->tile.regions; i++) fb->func->tile.fini(fb, i, &fb->tile.region[i]); - nvkm_mm_fini(&fb->tags); + nvkm_mm_fini(&fb->tags.mm); + mutex_destroy(&fb->tags.mutex); + nvkm_ram_del(&fb->ram); nvkm_blob_dtor(&fb->vpr_scrubber); @@ -230,8 +232,8 @@ nvkm_fb_ctor(const struct nvkm_fb_func *func, struct nvkm_device *device, nvkm_subdev_ctor(&nvkm_fb, device, index, &fb->subdev); fb->func = func; fb->tile.regions = fb->func->tile.regions; - fb->page = nvkm_longopt(device->cfgopt, "NvFbBigPage", - fb->func->default_bigpage); + fb->page = nvkm_longopt(device->cfgopt, "NvFbBigPage", fb->func->default_bigpage); + mutex_init(&fb->tags.mutex); } int diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c index a021d21ff153..e5ddbe6b698e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c @@ -45,7 +45,7 @@ nv20_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags, { u32 tiles = DIV_ROUND_UP(size, 0x40); u32 tags = round_up(tiles / fb->ram->parts, 0x40); - if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) { + if (!nvkm_mm_head(&fb->tags.mm, 0, 1, tags, tags, 1, &tile->tag)) { if (!(flags & 2)) tile->zcomp = 0x00000000; /* Z16 */ else tile->zcomp = 0x04000000; /* Z24S8 */ tile->zcomp |= tile->tag->offset; @@ -63,7 +63,7 @@ nv20_fb_tile_fini(struct nvkm_fb *fb, int i, struct nvkm_fb_tile *tile) tile->limit = 0; tile->pitch = 0; tile->zcomp = 0; - nvkm_mm_free(&fb->tags, &tile->tag); + nvkm_mm_free(&fb->tags.mm, &tile->tag); } void diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c index 7709f5fe9a45..fb87e699ff54 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c @@ -32,7 +32,7 @@ nv25_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags, { u32 tiles = DIV_ROUND_UP(size, 0x40); u32 tags = round_up(tiles / fb->ram->parts, 0x40); - if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) { + if (!nvkm_mm_head(&fb->tags.mm, 0, 1, tags, tags, 1, &tile->tag)) { if (!(flags & 2)) tile->zcomp = 0x00100000; /* Z16 */ else tile->zcomp = 0x00200000; /* Z24S8 */ tile->zcomp |= tile->tag->offset; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c index 8aa782666507..6e033495fc1a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c @@ -51,7 +51,7 @@ nv30_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags, { u32 tiles = DIV_ROUND_UP(size, 0x40); u32 tags = round_up(tiles / fb->ram->parts, 0x40); - if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) { + if (!nvkm_mm_head(&fb->tags.mm, 0, 1, tags, tags, 1, &tile->tag)) { if (flags & 2) tile->zcomp |= 0x01000000; /* Z16 */ else tile->zcomp |= 0x02000000; /* Z24S8 */ tile->zcomp |= ((tile->tag->offset ) >> 6); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c index 6e83dcff72e0..02a38d83c812 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c @@ -32,7 +32,7 @@ nv35_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags, { u32 tiles = DIV_ROUND_UP(size, 0x40); u32 tags = round_up(tiles / fb->ram->parts, 0x40); - if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) { + if (!nvkm_mm_head(&fb->tags.mm, 0, 1, tags, tags, 1, &tile->tag)) { if (flags & 2) tile->zcomp |= 0x04000000; /* Z16 */ else tile->zcomp |= 0x08000000; /* Z24S8 */ tile->zcomp |= ((tile->tag->offset ) >> 6); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c index 2a07617bb44c..f45143ebded3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c @@ -32,7 +32,7 @@ nv36_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags, { u32 tiles = DIV_ROUND_UP(size, 0x40); u32 tags = round_up(tiles / fb->ram->parts, 0x40); - if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) { + if (!nvkm_mm_head(&fb->tags.mm, 0, 1, tags, tags, 1, &tile->tag)) { if (flags & 2) tile->zcomp |= 0x10000000; /* Z16 */ else tile->zcomp |= 0x20000000; /* Z24S8 */ tile->zcomp |= ((tile->tag->offset ) >> 6); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c index 955160778b5b..f51ba70c673a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c @@ -33,7 +33,7 @@ nv40_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags, u32 tiles = DIV_ROUND_UP(size, 0x80); u32 tags = round_up(tiles / fb->ram->parts, 0x100); if ( (flags & 2) && - !nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) { + !nvkm_mm_head(&fb->tags.mm, 0, 1, tags, tags, 1, &tile->tag)) { tile->zcomp = 0x28000000; /* Z24S8_SPLIT_GRAD */ tile->zcomp |= ((tile->tag->offset ) >> 8); tile->zcomp |= ((tile->tag->offset + tags - 1) >> 8) << 13; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c index a21ef45b8572..1d453566fa3d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c @@ -200,8 +200,8 @@ gf100_ltc_oneinit_tag_ram(struct nvkm_ltc *ltc) } mm_init: - nvkm_mm_fini(&fb->tags); - return nvkm_mm_init(&fb->tags, 0, 0, ltc->num_tags, 1); + nvkm_mm_fini(&fb->tags.mm); + return nvkm_mm_init(&fb->tags.mm, 0, 0, ltc->num_tags, 1); } int From 0e65ec75278f1d1dafd33f5be8454207a033beb3 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 2 Dec 2020 16:31:23 +1000 Subject: [PATCH 03/87] drm/nouveau/fb: protect vram mm with private mutex nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h | 1 + drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h index 38c2a5fb418a..7fb5cd8e29af 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h @@ -132,6 +132,7 @@ struct nvkm_ram { #define NVKM_RAM_MM_MIXED (NVKM_MM_HEAP_ANY + 3) struct nvkm_mm vram; u64 stolen; + struct mutex mutex; int ranks; int parts; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c index b11867f682cb..03b1bdb27770 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.c @@ -81,12 +81,12 @@ nvkm_vram_dtor(struct nvkm_memory *memory) struct nvkm_vram *vram = nvkm_vram(memory); struct nvkm_mm_node *next = vram->mn; struct nvkm_mm_node *node; - mutex_lock(&vram->ram->fb->subdev.mutex); + mutex_lock(&vram->ram->mutex); while ((node = next)) { next = node->next; nvkm_mm_free(&vram->ram->vram, &node); } - mutex_unlock(&vram->ram->fb->subdev.mutex); + mutex_unlock(&vram->ram->mutex); return vram; } @@ -126,7 +126,7 @@ nvkm_ram_get(struct nvkm_device *device, u8 heap, u8 type, u8 rpage, u64 size, vram->page = page; *pmemory = &vram->memory; - mutex_lock(&ram->fb->subdev.mutex); + mutex_lock(&ram->mutex); node = &vram->mn; do { if (back) @@ -134,7 +134,7 @@ nvkm_ram_get(struct nvkm_device *device, u8 heap, u8 type, u8 rpage, u64 size, else ret = nvkm_mm_head(mm, heap, type, max, min, align, &r); if (ret) { - mutex_unlock(&ram->fb->subdev.mutex); + mutex_unlock(&ram->mutex); nvkm_memory_unref(pmemory); return ret; } @@ -143,7 +143,7 @@ nvkm_ram_get(struct nvkm_device *device, u8 heap, u8 type, u8 rpage, u64 size, node = &r->next; max -= r->length; } while (max); - mutex_unlock(&ram->fb->subdev.mutex); + mutex_unlock(&ram->mutex); return 0; } @@ -163,6 +163,7 @@ nvkm_ram_del(struct nvkm_ram **pram) if (ram->func->dtor) *pram = ram->func->dtor(ram); nvkm_mm_fini(&ram->vram); + mutex_destroy(&ram->mutex); kfree(*pram); *pram = NULL; } @@ -196,6 +197,7 @@ nvkm_ram_ctor(const struct nvkm_ram_func *func, struct nvkm_fb *fb, ram->fb = fb; ram->type = type; ram->size = size; + mutex_init(&ram->mutex); if (!nvkm_mm_initialised(&ram->vram)) { ret = nvkm_mm_init(&ram->vram, NVKM_RAM_MM_NORMAL, 0, From e5bf9a5ce5da32792a4dc1eafebe89d349cbbf27 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 2 Dec 2020 16:40:28 +1000 Subject: [PATCH 04/87] drm/nouveau/instmem: protect mm/lru with private mutex nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/subdev/instmem.h | 5 ++++ .../drm/nouveau/nvkm/subdev/instmem/base.c | 7 +++-- .../drm/nouveau/nvkm/subdev/instmem/nv04.c | 11 ++++--- .../drm/nouveau/nvkm/subdev/instmem/nv40.c | 11 ++++--- .../drm/nouveau/nvkm/subdev/instmem/nv50.c | 30 +++++++++---------- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h index c74ab7c31d05..4090d4795f74 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h @@ -13,6 +13,11 @@ struct nvkm_instmem { struct list_head boot; u32 reserved; + /* <=nv4x: protects NV_PRAMIN/BAR2 MM + * >=nv50: protects BAR2 MM & LRU + */ + struct mutex mutex; + struct nvkm_memory *vbios; struct nvkm_ramht *ramht; struct nvkm_memory *ramro; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c index 364ea4492acc..33566566435a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c @@ -218,9 +218,11 @@ static void * nvkm_instmem_dtor(struct nvkm_subdev *subdev) { struct nvkm_instmem *imem = nvkm_instmem(subdev); + void *data = imem; if (imem->func->dtor) - return imem->func->dtor(imem); - return imem; + data = imem->func->dtor(imem); + mutex_destroy(&imem->mutex); + return data; } static const struct nvkm_subdev_func @@ -241,4 +243,5 @@ nvkm_instmem_ctor(const struct nvkm_instmem_func *func, spin_lock_init(&imem->lock); INIT_LIST_HEAD(&imem->list); INIT_LIST_HEAD(&imem->boot); + mutex_init(&imem->mutex); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c index 6bf0dad46919..0133f98467bb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c @@ -99,9 +99,9 @@ static void * nv04_instobj_dtor(struct nvkm_memory *memory) { struct nv04_instobj *iobj = nv04_instobj(memory); - mutex_lock(&iobj->imem->base.subdev.mutex); + mutex_lock(&iobj->imem->base.mutex); nvkm_mm_free(&iobj->imem->heap, &iobj->node); - mutex_unlock(&iobj->imem->base.subdev.mutex); + mutex_unlock(&iobj->imem->base.mutex); nvkm_instobj_dtor(&iobj->imem->base, &iobj->base); return iobj; } @@ -132,10 +132,9 @@ nv04_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero, iobj->base.memory.ptrs = &nv04_instobj_ptrs; iobj->imem = imem; - mutex_lock(&imem->base.subdev.mutex); - ret = nvkm_mm_head(&imem->heap, 0, 1, size, size, - align ? align : 1, &iobj->node); - mutex_unlock(&imem->base.subdev.mutex); + mutex_lock(&imem->base.mutex); + ret = nvkm_mm_head(&imem->heap, 0, 1, size, size, align ? align : 1, &iobj->node); + mutex_unlock(&imem->base.mutex); return ret; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c index 086c118488ef..3df5bb169258 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c @@ -99,9 +99,9 @@ static void * nv40_instobj_dtor(struct nvkm_memory *memory) { struct nv40_instobj *iobj = nv40_instobj(memory); - mutex_lock(&iobj->imem->base.subdev.mutex); + mutex_lock(&iobj->imem->base.mutex); nvkm_mm_free(&iobj->imem->heap, &iobj->node); - mutex_unlock(&iobj->imem->base.subdev.mutex); + mutex_unlock(&iobj->imem->base.mutex); nvkm_instobj_dtor(&iobj->imem->base, &iobj->base); return iobj; } @@ -132,10 +132,9 @@ nv40_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero, iobj->base.memory.ptrs = &nv40_instobj_ptrs; iobj->imem = imem; - mutex_lock(&imem->base.subdev.mutex); - ret = nvkm_mm_head(&imem->heap, 0, 1, size, size, - align ? align : 1, &iobj->node); - mutex_unlock(&imem->base.subdev.mutex); + mutex_lock(&imem->base.mutex); + ret = nvkm_mm_head(&imem->heap, 0, 1, size, size, align ? align : 1, &iobj->node); + mutex_unlock(&imem->base.mutex); return ret; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c index 02c4eb28cef4..44c567036c2b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c @@ -133,12 +133,12 @@ nv50_instobj_kmap(struct nv50_instobj *iobj, struct nvkm_vmm *vmm) * into it. The lock has to be dropped while doing this due * to the possibility of recursion for page table allocation. */ - mutex_unlock(&subdev->mutex); + mutex_unlock(&imem->base.mutex); while ((ret = nvkm_vmm_get(vmm, 12, size, &bar))) { /* Evict unused mappings, and keep retrying until we either * succeed,or there's no more objects left on the LRU. */ - mutex_lock(&subdev->mutex); + mutex_lock(&imem->base.mutex); eobj = list_first_entry_or_null(&imem->lru, typeof(*eobj), lru); if (eobj) { nvkm_debug(subdev, "evict %016llx %016llx @ %016llx\n", @@ -151,7 +151,7 @@ nv50_instobj_kmap(struct nv50_instobj *iobj, struct nvkm_vmm *vmm) emap = eobj->map; eobj->map = NULL; } - mutex_unlock(&subdev->mutex); + mutex_unlock(&imem->base.mutex); if (!eobj) break; iounmap(emap); @@ -160,12 +160,12 @@ nv50_instobj_kmap(struct nv50_instobj *iobj, struct nvkm_vmm *vmm) if (ret == 0) ret = nvkm_memory_map(memory, 0, vmm, bar, NULL, 0); - mutex_lock(&subdev->mutex); + mutex_lock(&imem->base.mutex); if (ret || iobj->bar) { /* We either failed, or another thread beat us. */ - mutex_unlock(&subdev->mutex); + mutex_unlock(&imem->base.mutex); nvkm_vmm_put(vmm, &bar); - mutex_lock(&subdev->mutex); + mutex_lock(&imem->base.mutex); return; } @@ -197,7 +197,7 @@ nv50_instobj_release(struct nvkm_memory *memory) wmb(); nvkm_bar_flush(subdev->device->bar); - if (refcount_dec_and_mutex_lock(&iobj->maps, &subdev->mutex)) { + if (refcount_dec_and_mutex_lock(&iobj->maps, &imem->base.mutex)) { /* Add the now-unused mapping to the LRU instead of directly * unmapping it here, in case we need to map it again later. */ @@ -208,7 +208,7 @@ nv50_instobj_release(struct nvkm_memory *memory) /* Switch back to NULL accessors when last map is gone. */ iobj->base.memory.ptrs = NULL; - mutex_unlock(&subdev->mutex); + mutex_unlock(&imem->base.mutex); } } @@ -227,9 +227,9 @@ nv50_instobj_acquire(struct nvkm_memory *memory) /* Take the lock, and re-check that another thread hasn't * already mapped the object in the meantime. */ - mutex_lock(&imem->subdev.mutex); + mutex_lock(&imem->mutex); if (refcount_inc_not_zero(&iobj->maps)) { - mutex_unlock(&imem->subdev.mutex); + mutex_unlock(&imem->mutex); return iobj->map; } @@ -252,7 +252,7 @@ nv50_instobj_acquire(struct nvkm_memory *memory) refcount_set(&iobj->maps, 1); } - mutex_unlock(&imem->subdev.mutex); + mutex_unlock(&imem->mutex); return map; } @@ -265,7 +265,7 @@ nv50_instobj_boot(struct nvkm_memory *memory, struct nvkm_vmm *vmm) /* Exclude bootstrapped objects (ie. the page tables for the * instmem BAR itself) from eviction. */ - mutex_lock(&imem->subdev.mutex); + mutex_lock(&imem->mutex); if (likely(iobj->lru.next)) { list_del_init(&iobj->lru); iobj->lru.next = NULL; @@ -273,7 +273,7 @@ nv50_instobj_boot(struct nvkm_memory *memory, struct nvkm_vmm *vmm) nv50_instobj_kmap(iobj, vmm); nvkm_instmem_boot(imem); - mutex_unlock(&imem->subdev.mutex); + mutex_unlock(&imem->mutex); } static u64 @@ -315,12 +315,12 @@ nv50_instobj_dtor(struct nvkm_memory *memory) struct nvkm_vma *bar; void *map = map; - mutex_lock(&imem->subdev.mutex); + mutex_lock(&imem->mutex); if (likely(iobj->lru.next)) list_del(&iobj->lru); map = iobj->map; bar = iobj->bar; - mutex_unlock(&imem->subdev.mutex); + mutex_unlock(&imem->mutex); if (map) { struct nvkm_vmm *vmm = nvkm_bar_bar2_vmm(imem->subdev.device); From dbffdff742296e9e930b12472d80a20bf1c9722e Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 2 Dec 2020 16:43:49 +1000 Subject: [PATCH 05/87] drm/nouveau/ltc: serialise cbc operations with private mutex nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h | 1 + drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h index d76f60d7d29a..18fc5eac3a1a 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h @@ -13,6 +13,7 @@ struct nvkm_ltc { u32 ltc_nr; u32 lts_nr; + struct mutex mutex; /* serialises CBC operations */ u32 num_tags; u32 tag_base; struct nvkm_memory *tag_ram; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c index 23242179e600..d54957f817bd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c @@ -33,10 +33,10 @@ nvkm_ltc_tags_clear(struct nvkm_device *device, u32 first, u32 count) BUG_ON((first > limit) || (limit >= ltc->num_tags)); - mutex_lock(<c->subdev.mutex); + mutex_lock(<c->mutex); ltc->func->cbc_clear(ltc, first, limit); ltc->func->cbc_wait(ltc); - mutex_unlock(<c->subdev.mutex); + mutex_unlock(<c->mutex); } int @@ -113,6 +113,7 @@ nvkm_ltc_dtor(struct nvkm_subdev *subdev) { struct nvkm_ltc *ltc = nvkm_ltc(subdev); nvkm_memory_unref(<c->tag_ram); + mutex_destroy(<c->mutex); return ltc; } @@ -135,6 +136,7 @@ nvkm_ltc_new_(const struct nvkm_ltc_func *func, struct nvkm_device *device, nvkm_subdev_ctor(&nvkm_ltc, device, index, <c->subdev); ltc->func = func; + mutex_init(<c->mutex); ltc->zbc_min = 1; /* reserve 0 for disabled */ ltc->zbc_max = min(func->zbc, NVKM_LTC_MAX_ZBC_CNT) - 1; return 0; From 5ec69c91e7ba97c3e9318e44f03d7dbbd475d92a Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 3 Dec 2020 08:32:31 +1000 Subject: [PATCH 06/87] drm/nouveau/mmu: serialise mmu invalidations with private mutex nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h | 2 ++ drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c | 2 ++ drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.c | 7 +++---- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.c | 7 +++---- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.c | 7 +++---- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h index 54cdcb017518..f0a537319247 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h @@ -117,6 +117,8 @@ struct nvkm_mmu { struct list_head list; } ptc, ptp; + struct mutex mutex; /* serialises mmu invalidations */ + struct nvkm_device_oclass user; }; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c index 6d5212ae2fd5..a01191d6bef8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c @@ -402,6 +402,7 @@ nvkm_mmu_dtor(struct nvkm_subdev *subdev) nvkm_vmm_unref(&mmu->vmm); nvkm_mmu_ptc_fini(mmu); + mutex_destroy(&mmu->mutex); return mmu; } @@ -420,6 +421,7 @@ nvkm_mmu_ctor(const struct nvkm_mmu_func *func, struct nvkm_device *device, mmu->func = func; mmu->dma_bits = func->dma_bits; nvkm_mmu_ptc_init(mmu); + mutex_init(&mmu->mutex); mmu->user.ctor = nvkm_ummu_new; mmu->user.base = func->mmu.user; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.c index 6a2d9eb8e1ea..5438384d9a67 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.c @@ -187,12 +187,11 @@ gf100_vmm_invalidate_pdb(struct nvkm_vmm *vmm, u64 addr) void gf100_vmm_invalidate(struct nvkm_vmm *vmm, u32 type) { - struct nvkm_subdev *subdev = &vmm->mmu->subdev; - struct nvkm_device *device = subdev->device; + struct nvkm_device *device = vmm->mmu->subdev.device; struct nvkm_mmu_pt *pd = vmm->pd->pt[0]; u64 addr = 0; - mutex_lock(&subdev->mutex); + mutex_lock(&vmm->mmu->mutex); /* Looks like maybe a "free flush slots" counter, the * faster you write to 0x100cbc to more it decreases. */ @@ -222,7 +221,7 @@ gf100_vmm_invalidate(struct nvkm_vmm *vmm, u32 type) if (nvkm_rd32(device, 0x100c80) & 0x00008000) break; ); - mutex_unlock(&subdev->mutex); + mutex_unlock(&vmm->mmu->mutex); } void diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.c index 1d3369683a21..31984671daf8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.c @@ -80,17 +80,16 @@ nv41_vmm_desc_12[] = { static void nv41_vmm_flush(struct nvkm_vmm *vmm, int level) { - struct nvkm_subdev *subdev = &vmm->mmu->subdev; - struct nvkm_device *device = subdev->device; + struct nvkm_device *device = vmm->mmu->subdev.device; - mutex_lock(&subdev->mutex); + mutex_lock(&vmm->mmu->mutex); nvkm_wr32(device, 0x100810, 0x00000022); nvkm_msec(device, 2000, if (nvkm_rd32(device, 0x100810) & 0x00000020) break; ); nvkm_wr32(device, 0x100810, 0x00000000); - mutex_unlock(&subdev->mutex); + mutex_unlock(&vmm->mmu->mutex); } static const struct nvkm_vmm_func diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c index 2d89e27e8e9e..0f904486168f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c @@ -184,7 +184,7 @@ nv50_vmm_flush(struct nvkm_vmm *vmm, int level) struct nvkm_device *device = subdev->device; int i, id; - mutex_lock(&subdev->mutex); + mutex_lock(&vmm->mmu->mutex); for (i = 0; i < NVKM_SUBDEV_NR; i++) { if (!atomic_read(&vmm->engref[i])) continue; @@ -220,7 +220,7 @@ nv50_vmm_flush(struct nvkm_vmm *vmm, int level) nvkm_error(subdev, "%s mmu invalidate timeout\n", nvkm_subdev_name[i]); } - mutex_unlock(&subdev->mutex); + mutex_unlock(&vmm->mmu->mutex); } int diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.c index b1294d0076c0..6cb5eefa45e9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.c @@ -26,15 +26,14 @@ static void tu102_vmm_flush(struct nvkm_vmm *vmm, int depth) { - struct nvkm_subdev *subdev = &vmm->mmu->subdev; - struct nvkm_device *device = subdev->device; + struct nvkm_device *device = vmm->mmu->subdev.device; u32 type = (5 /* CACHE_LEVEL_UP_TO_PDE3 */ - depth) << 24; type |= 0x00000001; /* PAGE_ALL */ if (atomic_read(&vmm->engref[NVKM_SUBDEV_BAR])) type |= 0x00000004; /* HUB_ONLY */ - mutex_lock(&subdev->mutex); + mutex_lock(&vmm->mmu->mutex); nvkm_wr32(device, 0xb830a0, vmm->pd->pt[0]->addr >> 8); nvkm_wr32(device, 0xb830a4, 0x00000000); @@ -46,7 +45,7 @@ tu102_vmm_flush(struct nvkm_vmm *vmm, int depth) break; ); - mutex_unlock(&subdev->mutex); + mutex_unlock(&vmm->mmu->mutex); } static const struct nvkm_vmm_func From 5a479d45653f52a7834424eb64758e4e8df775ae Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 3 Dec 2020 08:34:07 +1000 Subject: [PATCH 07/87] drm/nouveau/pmu: serialise send() with private mutex nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h | 1 + drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c | 3 +++ drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c | 6 +++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h index 5ff6d1f8985a..bc3327395ec9 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h @@ -18,6 +18,7 @@ struct nvkm_pmu { struct completion wpr_ready; struct { + struct mutex mutex; u32 base; u32 size; } send; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c index a0fe607c9c07..94253304bb90 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c @@ -148,6 +148,7 @@ nvkm_pmu_dtor(struct nvkm_subdev *subdev) nvkm_falcon_cmdq_del(&pmu->hpq); nvkm_falcon_qmgr_del(&pmu->qmgr); nvkm_falcon_dtor(&pmu->falcon); + mutex_destroy(&pmu->send.mutex); return nvkm_pmu(subdev); } @@ -168,6 +169,8 @@ nvkm_pmu_ctor(const struct nvkm_pmu_fwif *fwif, struct nvkm_device *device, nvkm_subdev_ctor(&nvkm_pmu, device, index, &pmu->subdev); + mutex_init(&pmu->send.mutex); + INIT_WORK(&pmu->recv.work, nvkm_pmu_recv); init_waitqueue_head(&pmu->recv.wait); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c index 88b909913ff9..a5761415900b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c @@ -34,7 +34,7 @@ gt215_pmu_send(struct nvkm_pmu *pmu, u32 reply[2], struct nvkm_device *device = subdev->device; u32 addr; - mutex_lock(&subdev->mutex); + mutex_lock(&pmu->send.mutex); /* wait for a free slot in the fifo */ addr = nvkm_rd32(device, 0x10a4a0); if (nvkm_msec(device, 2000, @@ -42,7 +42,7 @@ gt215_pmu_send(struct nvkm_pmu *pmu, u32 reply[2], if (tmp != (addr ^ 8)) break; ) < 0) { - mutex_unlock(&subdev->mutex); + mutex_unlock(&pmu->send.mutex); return -EBUSY; } @@ -79,7 +79,7 @@ gt215_pmu_send(struct nvkm_pmu *pmu, u32 reply[2], reply[1] = pmu->recv.data[1]; } - mutex_unlock(&subdev->mutex); + mutex_unlock(&pmu->send.mutex); return 0; } From bfa7f6a6df533a20090b67901ab7ec6402e7fe53 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 3 Dec 2020 08:39:42 +1000 Subject: [PATCH 08/87] drm/nouveau/disp: use private spinlock to control exclusive access to disp nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/engine/disp.h | 5 ++++- .../gpu/drm/nouveau/nvkm/engine/disp/base.c | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h index 0f6fa6631a19..17288ea947c1 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h @@ -17,7 +17,10 @@ struct nvkm_disp { struct nvkm_event hpd; struct nvkm_event vblank; - struct nvkm_oproxy *client; + struct { + spinlock_t lock; + struct nvkm_oproxy *object; + } client; }; int nv04_disp_new(struct nvkm_device *, int, struct nvkm_disp **); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c index cbd33e87b799..8540e289728c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c @@ -149,10 +149,10 @@ static void nvkm_disp_class_del(struct nvkm_oproxy *oproxy) { struct nvkm_disp *disp = nvkm_disp(oproxy->base.engine); - mutex_lock(&disp->engine.subdev.mutex); - if (disp->client == oproxy) - disp->client = NULL; - mutex_unlock(&disp->engine.subdev.mutex); + spin_lock(&disp->client.lock); + if (disp->client.object == oproxy) + disp->client.object = NULL; + spin_unlock(&disp->client.lock); } static const struct nvkm_oproxy_func @@ -175,13 +175,13 @@ nvkm_disp_class_new(struct nvkm_device *device, return ret; *pobject = &oproxy->base; - mutex_lock(&disp->engine.subdev.mutex); - if (disp->client) { - mutex_unlock(&disp->engine.subdev.mutex); + spin_lock(&disp->client.lock); + if (disp->client.object) { + spin_unlock(&disp->client.lock); return -EBUSY; } - disp->client = oproxy; - mutex_unlock(&disp->engine.subdev.mutex); + disp->client.object = oproxy; + spin_unlock(&disp->client.lock); return sclass->ctor(disp, oclass, data, size, &oproxy->object); } @@ -480,6 +480,7 @@ nvkm_disp_ctor(const struct nvkm_disp_func *func, struct nvkm_device *device, INIT_LIST_HEAD(&disp->ior); INIT_LIST_HEAD(&disp->outp); INIT_LIST_HEAD(&disp->conn); + spin_lock_init(&disp->client.lock); return nvkm_engine_ctor(&nvkm_disp, device, index, true, &disp->engine); } From a641936065d738837c24180135f139ef12d0122d Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 3 Dec 2020 10:42:43 +1000 Subject: [PATCH 09/87] drm/nouveau/fifo: private mutex nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h | 1 + drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c | 2 ++ drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c | 8 ++++---- drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | 14 +++++++------- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 13 ++++++------- .../gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c | 4 ++-- .../gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c | 4 ++-- .../gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c | 4 ++-- 10 files changed, 30 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h index b335f3a1e66d..40af8bfb8afa 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h @@ -40,6 +40,7 @@ struct nvkm_fifo { int nr; struct list_head chan; spinlock_t lock; + struct mutex mutex; struct nvkm_event uevent; /* async user trigger */ struct nvkm_event cevent; /* channel creation event */ diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c index c773caf21f6b..d473c636e47e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c @@ -334,6 +334,7 @@ nvkm_fifo_dtor(struct nvkm_engine *engine) nvkm_event_fini(&fifo->kevent); nvkm_event_fini(&fifo->cevent); nvkm_event_fini(&fifo->uevent); + mutex_destroy(&fifo->mutex); return data; } @@ -358,6 +359,7 @@ nvkm_fifo_ctor(const struct nvkm_fifo_func *func, struct nvkm_device *device, fifo->func = func; INIT_LIST_HEAD(&fifo->chan); spin_lock_init(&fifo->lock); + mutex_init(&fifo->mutex); if (WARN_ON(fifo->nr > NVKM_FIFO_CHID_NR)) fifo->nr = NVKM_FIFO_CHID_NR; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c index c213122cf088..99c0d6a98e2b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c @@ -38,9 +38,9 @@ nv04_fifo_dma_object_dtor(struct nvkm_fifo_chan *base, int cookie) struct nv04_fifo_chan *chan = nv04_fifo_chan(base); struct nvkm_instmem *imem = chan->fifo->base.engine.subdev.device->imem; - mutex_lock(&chan->fifo->base.engine.subdev.mutex); + mutex_lock(&chan->fifo->base.mutex); nvkm_ramht_remove(imem->ramht, cookie); - mutex_unlock(&chan->fifo->base.engine.subdev.mutex); + mutex_unlock(&chan->fifo->base.mutex); } static int @@ -63,10 +63,10 @@ nv04_fifo_dma_object_ctor(struct nvkm_fifo_chan *base, return -EINVAL; } - mutex_lock(&chan->fifo->base.engine.subdev.mutex); + mutex_lock(&chan->fifo->base.mutex); hash = nvkm_ramht_insert(imem->ramht, object, chan->base.chid, 4, handle, context); - mutex_unlock(&chan->fifo->base.engine.subdev.mutex); + mutex_unlock(&chan->fifo->base.mutex); return hash; } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c index 5f722c6e8a2f..6721e444dbc0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c @@ -159,10 +159,10 @@ nv40_fifo_dma_object_ctor(struct nvkm_fifo_chan *base, return -EINVAL; } - mutex_lock(&chan->fifo->base.engine.subdev.mutex); + mutex_lock(&chan->fifo->base.mutex); hash = nvkm_ramht_insert(imem->ramht, object, chan->base.chid, 4, handle, context); - mutex_unlock(&chan->fifo->base.engine.subdev.mutex); + mutex_unlock(&chan->fifo->base.mutex); return hash; } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index 5a39e51d42d7..af21bc795431 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c @@ -57,7 +57,7 @@ gf100_fifo_runlist_commit(struct gf100_fifo *fifo) int nr = 0; int target; - mutex_lock(&subdev->mutex); + mutex_lock(&fifo->base.mutex); cur = fifo->runlist.mem[fifo->runlist.active]; fifo->runlist.active = !fifo->runlist.active; @@ -73,7 +73,7 @@ gf100_fifo_runlist_commit(struct gf100_fifo *fifo) case NVKM_MEM_TARGET_VRAM: target = 0; break; case NVKM_MEM_TARGET_NCOH: target = 3; break; default: - mutex_unlock(&subdev->mutex); + mutex_unlock(&fifo->base.mutex); WARN_ON(1); return; } @@ -86,23 +86,23 @@ gf100_fifo_runlist_commit(struct gf100_fifo *fifo) !(nvkm_rd32(device, 0x00227c) & 0x00100000), msecs_to_jiffies(2000)) == 0) nvkm_error(subdev, "runlist update timeout\n"); - mutex_unlock(&subdev->mutex); + mutex_unlock(&fifo->base.mutex); } void gf100_fifo_runlist_remove(struct gf100_fifo *fifo, struct gf100_fifo_chan *chan) { - mutex_lock(&fifo->base.engine.subdev.mutex); + mutex_lock(&fifo->base.mutex); list_del_init(&chan->head); - mutex_unlock(&fifo->base.engine.subdev.mutex); + mutex_unlock(&fifo->base.mutex); } void gf100_fifo_runlist_insert(struct gf100_fifo *fifo, struct gf100_fifo_chan *chan) { - mutex_lock(&fifo->base.engine.subdev.mutex); + mutex_lock(&fifo->base.mutex); list_add_tail(&chan->head, &fifo->chan); - mutex_unlock(&fifo->base.engine.subdev.mutex); + mutex_unlock(&fifo->base.mutex); } static inline int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index c73b7eab776e..5d40aabbe92e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -168,12 +168,11 @@ gk104_fifo_runlist_update(struct gk104_fifo *fifo, int runl) { const struct gk104_fifo_runlist_func *func = fifo->func->runlist; struct gk104_fifo_chan *chan; - struct nvkm_subdev *subdev = &fifo->base.engine.subdev; struct nvkm_memory *mem; struct nvkm_fifo_cgrp *cgrp; int nr = 0; - mutex_lock(&subdev->mutex); + mutex_lock(&fifo->base.mutex); mem = fifo->runlist[runl].mem[fifo->runlist[runl].next]; fifo->runlist[runl].next = !fifo->runlist[runl].next; @@ -191,27 +190,27 @@ gk104_fifo_runlist_update(struct gk104_fifo *fifo, int runl) nvkm_done(mem); func->commit(fifo, runl, mem, nr); - mutex_unlock(&subdev->mutex); + mutex_unlock(&fifo->base.mutex); } void gk104_fifo_runlist_remove(struct gk104_fifo *fifo, struct gk104_fifo_chan *chan) { struct nvkm_fifo_cgrp *cgrp = chan->cgrp; - mutex_lock(&fifo->base.engine.subdev.mutex); + mutex_lock(&fifo->base.mutex); if (!list_empty(&chan->head)) { list_del_init(&chan->head); if (cgrp && !--cgrp->chan_nr) list_del_init(&cgrp->head); } - mutex_unlock(&fifo->base.engine.subdev.mutex); + mutex_unlock(&fifo->base.mutex); } void gk104_fifo_runlist_insert(struct gk104_fifo *fifo, struct gk104_fifo_chan *chan) { struct nvkm_fifo_cgrp *cgrp = chan->cgrp; - mutex_lock(&fifo->base.engine.subdev.mutex); + mutex_lock(&fifo->base.mutex); if (cgrp) { if (!cgrp->chan_nr++) list_add_tail(&cgrp->head, &fifo->runlist[chan->runl].cgrp); @@ -219,7 +218,7 @@ gk104_fifo_runlist_insert(struct gk104_fifo *fifo, struct gk104_fifo_chan *chan) } else { list_add_tail(&chan->head, &fifo->runlist[chan->runl].chan); } - mutex_unlock(&fifo->base.engine.subdev.mutex); + mutex_unlock(&fifo->base.mutex); } void diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c index 75f9632789b3..e7b3b113fd95 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c @@ -77,7 +77,7 @@ gf100_fifo_gpfifo_engine_fini(struct nvkm_fifo_chan *base, struct nvkm_gpuobj *inst = chan->base.inst; int ret = 0; - mutex_lock(&subdev->mutex); + mutex_lock(&chan->fifo->base.mutex); nvkm_wr32(device, 0x002634, chan->base.chid); if (nvkm_msec(device, 2000, if (nvkm_rd32(device, 0x002634) == chan->base.chid) @@ -87,7 +87,7 @@ gf100_fifo_gpfifo_engine_fini(struct nvkm_fifo_chan *base, chan->base.chid, chan->base.object.client->name); ret = -ETIMEDOUT; } - mutex_unlock(&subdev->mutex); + mutex_unlock(&chan->fifo->base.mutex); if (ret && suspend) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c index 728a1edbf98c..0cd9a7d43013 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c @@ -65,9 +65,9 @@ int gk104_fifo_gpfifo_kick(struct gk104_fifo_chan *chan) { int ret; - mutex_lock(&chan->base.fifo->engine.subdev.mutex); + mutex_lock(&chan->base.fifo->mutex); ret = gk104_fifo_gpfifo_kick_locked(chan); - mutex_unlock(&chan->base.fifo->engine.subdev.mutex); + mutex_unlock(&chan->base.fifo->mutex); return ret; } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c index a7462cf59d65..bca4c103153c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c @@ -44,7 +44,7 @@ gv100_fifo_gpfifo_engine_valid(struct gk104_fifo_chan *chan, bool ce, bool valid int ret; /* Block runlist to prevent the channel from being rescheduled. */ - mutex_lock(&subdev->mutex); + mutex_lock(&chan->fifo->base.mutex); nvkm_mask(device, 0x002630, BIT(chan->runl), BIT(chan->runl)); /* Preempt the channel. */ @@ -58,7 +58,7 @@ gv100_fifo_gpfifo_engine_valid(struct gk104_fifo_chan *chan, bool ce, bool valid /* Resume runlist. */ nvkm_mask(device, 0x002630, BIT(chan->runl), 0); - mutex_unlock(&subdev->mutex); + mutex_unlock(&chan->fifo->base.mutex); return ret; } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c index fa6e094d8068..c42a181adc1c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c @@ -51,9 +51,9 @@ nv50_fifo_runlist_update_locked(struct nv50_fifo *fifo) void nv50_fifo_runlist_update(struct nv50_fifo *fifo) { - mutex_lock(&fifo->base.engine.subdev.mutex); + mutex_lock(&fifo->base.mutex); nv50_fifo_runlist_update_locked(fifo); - mutex_unlock(&fifo->base.engine.subdev.mutex); + mutex_unlock(&fifo->base.mutex); } int From f81069228d5d239854075dca1e4c0a7df54d3748 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 3 Dec 2020 10:46:18 +1000 Subject: [PATCH 10/87] drm/nouveau/perfmon: use private spinlock to control exclusive access to perfmon nvkm_subdev.mutex is going away. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/include/nvkm/engine/pm.h | 5 ++++- drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/pm.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/pm.h index 4d754e7650d9..005409052d38 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/pm.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/pm.h @@ -7,7 +7,10 @@ struct nvkm_pm { const struct nvkm_pm_func *func; struct nvkm_engine engine; - struct nvkm_object *perfmon; + struct { + spinlock_t lock; + struct nvkm_object *object; + } client; struct list_head domains; struct list_head sources; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c index b2785bee418e..f875fb74f131 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c @@ -628,10 +628,10 @@ nvkm_perfmon_dtor(struct nvkm_object *object) { struct nvkm_perfmon *perfmon = nvkm_perfmon(object); struct nvkm_pm *pm = perfmon->pm; - mutex_lock(&pm->engine.subdev.mutex); - if (pm->perfmon == &perfmon->object) - pm->perfmon = NULL; - mutex_unlock(&pm->engine.subdev.mutex); + spin_lock(&pm->client.lock); + if (pm->client.object == &perfmon->object) + pm->client.object = NULL; + spin_unlock(&pm->client.lock); return perfmon; } @@ -671,11 +671,11 @@ nvkm_pm_oclass_new(struct nvkm_device *device, const struct nvkm_oclass *oclass, if (ret) return ret; - mutex_lock(&pm->engine.subdev.mutex); - if (pm->perfmon == NULL) - pm->perfmon = *pobject; - ret = (pm->perfmon == *pobject) ? 0 : -EBUSY; - mutex_unlock(&pm->engine.subdev.mutex); + spin_lock(&pm->client.lock); + if (pm->client.object == NULL) + pm->client.object = *pobject; + ret = (pm->client.object == *pobject) ? 0 : -EBUSY; + spin_unlock(&pm->client.lock); return ret; } @@ -863,5 +863,6 @@ nvkm_pm_ctor(const struct nvkm_pm_func *func, struct nvkm_device *device, pm->func = func; INIT_LIST_HEAD(&pm->domains); INIT_LIST_HEAD(&pm->sources); + spin_lock_init(&pm->client.lock); return nvkm_engine_ctor(&nvkm_pm, device, index, true, &pm->engine); } From 149a23b026699e5284d9f613ae971e7cadace201 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 2 Dec 2020 15:52:46 +1000 Subject: [PATCH 11/87] drm/nouveau/subdev: remove nvkm_subdev.mutex There's not really any nice way to assign the lock classes when we split subdev indices into type+inst, and saves a few bytes in the structs when a subdev has no need for it. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h | 1 - drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 4 ---- 2 files changed, 5 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index 76288c682e9e..f927eaee094e 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -7,7 +7,6 @@ struct nvkm_subdev { const struct nvkm_subdev_func *func; struct nvkm_device *device; enum nvkm_devidx index; - struct mutex mutex; u32 debug; bool oneinit; diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 49d468b45d3f..5da6c920a996 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -26,8 +26,6 @@ #include #include -static struct lock_class_key nvkm_subdev_lock_class[NVKM_SUBDEV_NR]; - const char * nvkm_subdev_name[NVKM_SUBDEV_NR] = { [NVKM_SUBDEV_ACR ] = "acr", @@ -217,8 +215,6 @@ nvkm_subdev_ctor(const struct nvkm_subdev_func *func, subdev->func = func; subdev->device = device; subdev->index = index; - - __mutex_init(&subdev->mutex, name, &nvkm_subdev_lock_class[index]); subdev->debug = nvkm_dbgopt(device->dbgopt, name); } From 54d10db1f8ec608a95f36dbbd7ee2480fc780409 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Tue, 1 Dec 2020 20:22:40 +1000 Subject: [PATCH 12/87] drm/nouveau/subdev: store subdevs in list This is somewhat nicer to read. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 + .../drm/nouveau/include/nvkm/core/subdev.h | 1 + drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 2 + .../gpu/drm/nouveau/nvkm/engine/device/base.c | 64 ++++++++----------- 4 files changed, 31 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index c920939a1467..3ede84c15ea2 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -178,6 +178,8 @@ struct nvkm_device { struct nvkm_sw *sw; struct nvkm_engine *vic; struct nvkm_engine *vp; + + struct list_head subdev; }; struct nvkm_subdev *nvkm_device_subdev(struct nvkm_device *, int index); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index f927eaee094e..35b9d797f1f6 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -8,6 +8,7 @@ struct nvkm_subdev { struct nvkm_device *device; enum nvkm_devidx index; u32 debug; + struct list_head head; bool oneinit; }; diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 5da6c920a996..8fc7316cb582 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -197,6 +197,7 @@ nvkm_subdev_del(struct nvkm_subdev **psubdev) if (subdev && !WARN_ON(!subdev->func)) { nvkm_trace(subdev, "destroy running...\n"); time = ktime_to_us(ktime_get()); + list_del(&subdev->head); if (subdev->func->dtor) *psubdev = subdev->func->dtor(subdev); time = ktime_to_us(ktime_get()) - time; @@ -216,6 +217,7 @@ nvkm_subdev_ctor(const struct nvkm_subdev_func *func, subdev->device = device; subdev->index = index; subdev->debug = nvkm_dbgopt(device->dbgopt, name); + list_add_tail(&subdev->head, &device->subdev); } int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index cdcc851e06f9..77211c0d4e68 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2825,7 +2825,7 @@ nvkm_device_fini(struct nvkm_device *device, bool suspend) { const char *action = suspend ? "suspend" : "fini"; struct nvkm_subdev *subdev; - int ret, i; + int ret; s64 time; nvdev_trace(device, "%s running...\n", action); @@ -2833,12 +2833,10 @@ nvkm_device_fini(struct nvkm_device *device, bool suspend) nvkm_acpi_fini(device); - for (i = NVKM_SUBDEV_NR - 1; i >= 0; i--) { - if ((subdev = nvkm_device_subdev(device, i))) { - ret = nvkm_subdev_fini(subdev, suspend); - if (ret && suspend) - goto fail; - } + list_for_each_entry_reverse(subdev, &device->subdev, head) { + ret = nvkm_subdev_fini(subdev, suspend); + if (ret && suspend) + goto fail; } nvkm_therm_clkgate_fini(device->therm, suspend); @@ -2851,13 +2849,11 @@ nvkm_device_fini(struct nvkm_device *device, bool suspend) return 0; fail: - do { - if ((subdev = nvkm_device_subdev(device, i))) { - int rret = nvkm_subdev_init(subdev); - if (rret) - nvkm_fatal(subdev, "failed restart, %d\n", ret); - } - } while (++i < NVKM_SUBDEV_NR); + list_for_each_entry_from(subdev, &device->subdev, head) { + int rret = nvkm_subdev_init(subdev); + if (rret) + nvkm_fatal(subdev, "failed restart, %d\n", ret); + } nvdev_trace(device, "%s failed with %d\n", action, ret); return ret; @@ -2867,7 +2863,7 @@ static int nvkm_device_preinit(struct nvkm_device *device) { struct nvkm_subdev *subdev; - int ret, i; + int ret; s64 time; nvdev_trace(device, "preinit running...\n"); @@ -2879,12 +2875,10 @@ nvkm_device_preinit(struct nvkm_device *device) goto fail; } - for (i = 0; i < NVKM_SUBDEV_NR; i++) { - if ((subdev = nvkm_device_subdev(device, i))) { - ret = nvkm_subdev_preinit(subdev); - if (ret) - goto fail; - } + list_for_each_entry(subdev, &device->subdev, head) { + ret = nvkm_subdev_preinit(subdev); + if (ret) + goto fail; } ret = nvkm_devinit_post(device->devinit, &device->disable_mask); @@ -2904,7 +2898,7 @@ int nvkm_device_init(struct nvkm_device *device) { struct nvkm_subdev *subdev; - int ret, i; + int ret; s64 time; ret = nvkm_device_preinit(device); @@ -2922,12 +2916,10 @@ nvkm_device_init(struct nvkm_device *device) goto fail; } - for (i = 0; i < NVKM_SUBDEV_NR; i++) { - if ((subdev = nvkm_device_subdev(device, i))) { - ret = nvkm_subdev_init(subdev); - if (ret) - goto fail_subdev; - } + list_for_each_entry(subdev, &device->subdev, head) { + ret = nvkm_subdev_init(subdev); + if (ret) + goto fail_subdev; } nvkm_acpi_init(device); @@ -2938,11 +2930,8 @@ nvkm_device_init(struct nvkm_device *device) return 0; fail_subdev: - do { - if ((subdev = nvkm_device_subdev(device, i))) - nvkm_subdev_fini(subdev, false); - } while (--i >= 0); - + list_for_each_entry_from(subdev, &device->subdev, head) + nvkm_subdev_fini(subdev, false); fail: nvkm_device_fini(device, false); @@ -2954,15 +2943,13 @@ void nvkm_device_del(struct nvkm_device **pdevice) { struct nvkm_device *device = *pdevice; - int i; + struct nvkm_subdev *subdev, *subtmp; if (device) { mutex_lock(&nv_devices_mutex); device->disable_mask = 0; - for (i = NVKM_SUBDEV_NR - 1; i >= 0; i--) { - struct nvkm_subdev *subdev = - nvkm_device_subdev(device, i); + + list_for_each_entry_safe_reverse(subdev, subtmp, &device->subdev, head) nvkm_subdev_del(&subdev); - } nvkm_event_fini(&device->event); @@ -3038,6 +3025,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func, device->name = name; list_add_tail(&device->head, &nv_devices); device->debug = nvkm_dbgopt(device->dbgopt, "device"); + INIT_LIST_HEAD(&device->subdev); ret = nvkm_event_init(&nvkm_device_event_func, 1, 1, &device->event); if (ret) From 9c28abb7db540a9c1f4dedaaf547503adfc87394 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 25 Jul 2020 15:19:46 +1000 Subject: [PATCH 13/87] drm/nouveau/subdev: store full subdev name in struct Much easier to store this to avoid having to reconstruct a string for a specific subdev, taking into account whether it's instanced or not. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/falcon.h | 10 +++++----- drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h | 9 ++++----- drivers/gpu/drm/nouveau/nvkm/core/engine.c | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 6 +++--- drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c | 2 +- drivers/gpu/drm/nouveau/nvkm/falcon/base.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c | 4 +--- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c | 3 +-- drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c | 5 ++--- drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c | 3 +-- 17 files changed, 29 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/falcon.h b/drivers/gpu/drm/nouveau/include/nvkm/core/falcon.h index 3981cb106aae..fd9a3f9a518e 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/falcon.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/falcon.h @@ -21,11 +21,11 @@ void nvkm_falcon_v1_disable(struct nvkm_falcon *); void gp102_sec2_flcn_bind_context(struct nvkm_falcon *, struct nvkm_memory *); int gp102_sec2_flcn_enable(struct nvkm_falcon *); -#define FLCN_PRINTK(t,f,fmt,a...) do { \ - if (nvkm_subdev_name[(f)->owner->index] != (f)->name) \ - nvkm_##t((f)->owner, "%s: "fmt"\n", (f)->name, ##a); \ - else \ - nvkm_##t((f)->owner, fmt"\n", ##a); \ +#define FLCN_PRINTK(t,f,fmt,a...) do { \ + if ((f)->owner->name != (f)->name) \ + nvkm_##t((f)->owner, "%s: "fmt"\n", (f)->name, ##a); \ + else \ + nvkm_##t((f)->owner, fmt"\n", ##a); \ } while(0) #define FLCN_DBG(f,fmt,a...) FLCN_PRINTK(debug, (f), fmt, ##a) #define FLCN_ERR(f,fmt,a...) FLCN_PRINTK(error, (f), fmt, ##a) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index 35b9d797f1f6..beb447ca82e2 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -7,6 +7,7 @@ struct nvkm_subdev { const struct nvkm_subdev_func *func; struct nvkm_device *device; enum nvkm_devidx index; + char name[16]; u32 debug; struct list_head head; @@ -23,7 +24,7 @@ struct nvkm_subdev_func { void (*intr)(struct nvkm_subdev *); }; -extern const char *nvkm_subdev_name[NVKM_SUBDEV_NR]; +extern const char *nvkm_subdev_type[NVKM_SUBDEV_NR]; int nvkm_subdev_new_(const struct nvkm_subdev_func *, struct nvkm_device *, int index, struct nvkm_subdev **); void nvkm_subdev_ctor(const struct nvkm_subdev_func *, struct nvkm_device *, @@ -38,10 +39,8 @@ void nvkm_subdev_intr(struct nvkm_subdev *); /* subdev logging */ #define nvkm_printk_(s,l,p,f,a...) do { \ const struct nvkm_subdev *_subdev = (s); \ - if (CONFIG_NOUVEAU_DEBUG >= (l) && _subdev->debug >= (l)) { \ - dev_##p(_subdev->device->dev, "%s: "f, \ - nvkm_subdev_name[_subdev->index], ##a); \ - } \ + if (CONFIG_NOUVEAU_DEBUG >= (l) && _subdev->debug >= (l)) \ + dev_##p(_subdev->device->dev, "%s: "f, _subdev->name, ##a); \ } while(0) #define nvkm_printk(s,l,p,f,a...) nvkm_printk_((s), NV_DBG_##l, p, f, ##a) #define nvkm_fatal(s,f,a...) nvkm_printk((s), FATAL, crit, f, ##a) diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c index 8220a0d21628..6016af82b0cc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c @@ -185,7 +185,7 @@ nvkm_engine_ctor(const struct nvkm_engine_func *func, refcount_set(&engine->use.refcount, 0); mutex_init(&engine->use.mutex); - if (!nvkm_boolopt(device->cfgopt, nvkm_subdev_name[index], enable)) { + if (!nvkm_boolopt(device->cfgopt, engine->subdev.name, enable)) { nvkm_debug(&engine->subdev, "disabled\n"); return -ENODEV; } diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 8fc7316cb582..7759e6e56ab4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -27,7 +27,7 @@ #include const char * -nvkm_subdev_name[NVKM_SUBDEV_NR] = { +nvkm_subdev_type[NVKM_SUBDEV_NR] = { [NVKM_SUBDEV_ACR ] = "acr", [NVKM_SUBDEV_BAR ] = "bar", [NVKM_SUBDEV_VBIOS ] = "bios", @@ -212,11 +212,11 @@ nvkm_subdev_ctor(const struct nvkm_subdev_func *func, struct nvkm_device *device, int index, struct nvkm_subdev *subdev) { - const char *name = nvkm_subdev_name[index]; subdev->func = func; subdev->device = device; subdev->index = index; - subdev->debug = nvkm_dbgopt(device->dbgopt, name); + strscpy(subdev->name, nvkm_subdev_type[index], sizeof(subdev->name)); + subdev->debug = nvkm_dbgopt(device->dbgopt, subdev->name); list_add_tail(&subdev->head, &device->subdev); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 77211c0d4e68..fa1b6fa6bc74 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -3269,7 +3269,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func, device->m = NULL; \ if (ret != -ENODEV) { \ nvdev_error(device, "%s ctor failed, %d\n", \ - nvkm_subdev_name[s], ret); \ + nvkm_subdev_type[(s)], ret); \ goto done; \ } \ } \ diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c index d83485385934..407c45e6e305 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c @@ -43,7 +43,7 @@ nvkm_fifo_chan_child_fini(struct nvkm_oproxy *base, bool suspend) struct nvkm_engine *engine = object->oproxy.object->engine; struct nvkm_fifo_chan *chan = object->chan; struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; - const char *name = nvkm_subdev_name[engine->subdev.index]; + const char *name = engine->subdev.name; int ret = 0; if (--engn->usecount) @@ -76,7 +76,7 @@ nvkm_fifo_chan_child_init(struct nvkm_oproxy *base) struct nvkm_engine *engine = object->oproxy.object->engine; struct nvkm_fifo_chan *chan = object->chan; struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; - const char *name = nvkm_subdev_name[engine->subdev.index]; + const char *name = engine->subdev.name; int ret; if (engn->usecount++) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index af21bc795431..6e9001a25f7d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c @@ -181,7 +181,7 @@ gf100_fifo_recover(struct gf100_fifo *fifo, struct nvkm_engine *engine, u32 chid = chan->base.chid; nvkm_error(subdev, "%s engine fault on channel %d, recovering...\n", - nvkm_subdev_name[engine->subdev.index], chid); + engine->subdev.name, chid); assert_spin_locked(&fifo->base.lock); nvkm_mask(device, 0x003004 + (chid * 0x08), 0x00000001, 0x00000000); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 5d40aabbe92e..566361c669c4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -491,7 +491,7 @@ gk104_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) if (ee == NULL) { enum nvkm_devidx engidx = nvkm_top_fault(device, info->engine); if (engidx < NVKM_SUBDEV_NR) { - const char *src = nvkm_subdev_name[engidx]; + const char *src = nvkm_subdev_type[engidx]; char *dst = en; do { *dst++ = toupper(*src++); @@ -919,7 +919,7 @@ gk104_fifo_oneinit(struct nvkm_fifo *base) } nvkm_debug(subdev, "engine %2d: runlist %2d pbdma %2d (%s)\n", - engn, runl, pbid, nvkm_subdev_name[engidx]); + engn, runl, pbid, nvkm_subdev_type[engidx]); fifo->engine[engn].engine = nvkm_device_engine(device, engidx); fifo->engine[engn].runl = runl; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c index 14e5b70e0255..6fd16790514c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c @@ -312,7 +312,7 @@ tu102_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) enum nvkm_devidx engidx = nvkm_top_fault(device, info->engine); if (engidx < NVKM_SUBDEV_NR) { - const char *src = nvkm_subdev_name[engidx]; + const char *src = nvkm_subdev_type[engidx]; char *dst = en; do { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c index 9b23c1b70ebf..b6f3ca8a5f46 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c @@ -57,5 +57,5 @@ nvkm_nvdec_new_(const struct nvkm_nvdec_fwif *fwif, struct nvkm_device *device, nvdec->func = fwif->func; return nvkm_falcon_ctor(nvdec->func->flcn, &nvdec->engine.subdev, - nvkm_subdev_name[index], 0, &nvdec->falcon); + nvdec->engine.subdev.name, 0, &nvdec->falcon); }; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c index 484100e15668..e4dbf05078cc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c @@ -59,5 +59,5 @@ nvkm_nvenc_new_(const struct nvkm_nvenc_fwif *fwif, struct nvkm_device *device, nvenc->func = fwif->func; return nvkm_falcon_ctor(nvenc->func->flcn, &nvenc->engine.subdev, - nvkm_subdev_name[index], 0, &nvenc->falcon); + nvenc->engine.subdev.name, 0, &nvenc->falcon); }; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c index 41318aa0d481..27591b2caf74 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c @@ -104,7 +104,7 @@ nvkm_sec2_new_(const struct nvkm_sec2_fwif *fwif, struct nvkm_device *device, sec2->func = fwif->func; ret = nvkm_falcon_ctor(sec2->func->flcn, &sec2->engine.subdev, - nvkm_subdev_name[index], addr, &sec2->falcon); + sec2->engine.subdev.name, addr, &sec2->falcon); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/falcon/base.c b/drivers/gpu/drm/nouveau/nvkm/falcon/base.c index c6a3448180d6..adc7f4aa7e62 100644 --- a/drivers/gpu/drm/nouveau/nvkm/falcon/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/falcon/base.c @@ -188,7 +188,7 @@ nvkm_falcon_get(struct nvkm_falcon *falcon, const struct nvkm_subdev *user) mutex_lock(&falcon->mutex); if (falcon->user) { nvkm_error(user, "%s falcon already acquired by %s!\n", - falcon->name, nvkm_subdev_name[falcon->user->index]); + falcon->name, falcon->user->name); mutex_unlock(&falcon->mutex); return -EBUSY; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c index 5a32df0f9992..7bfcca9ec266 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c @@ -53,7 +53,5 @@ nvkm_gsp_new_(const struct nvkm_gsp_fwif *fwif, struct nvkm_device *device, if (IS_ERR(fwif)) return PTR_ERR(fwif); - return nvkm_falcon_ctor(fwif->flcn, &gsp->subdev, - nvkm_subdev_name[gsp->subdev.index], 0, - &gsp->falcon); + return nvkm_falcon_ctor(fwif->flcn, &gsp->subdev, gsp->subdev.name, 0, &gsp->falcon); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c index 0f904486168f..5800cda68e0c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c @@ -217,8 +217,7 @@ nv50_vmm_flush(struct nvkm_vmm *vmm, int level) if (!(nvkm_rd32(device, 0x100c80) & 0x00000001)) break; ) < 0) - nvkm_error(subdev, "%s mmu invalidate timeout\n", - nvkm_subdev_name[i]); + nvkm_error(subdev, "%s mmu invalidate timeout\n", nvkm_subdev_type[i]); } mutex_unlock(&vmm->mmu->mutex); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c index 94253304bb90..63cecef7a113 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c @@ -180,9 +180,8 @@ nvkm_pmu_ctor(const struct nvkm_pmu_fwif *fwif, struct nvkm_device *device, pmu->func = fwif->func; - ret = nvkm_falcon_ctor(pmu->func->flcn, &pmu->subdev, - nvkm_subdev_name[pmu->subdev.index], 0x10a000, - &pmu->falcon); + ret = nvkm_falcon_ctor(pmu->func->flcn, &pmu->subdev, pmu->subdev.name, + 0x10a000, &pmu->falcon); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c index 1156634533f9..150109ccea26 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c @@ -97,8 +97,7 @@ gk104_top_oneinit(struct nvkm_top *top) nvkm_debug(subdev, "%02x.%d (%8s): addr %06x fault %2d " "engine %2d runlist %2d intr %2d " "reset %2d\n", type, inst, - info->index == NVKM_SUBDEV_NR ? NULL : - nvkm_subdev_name[info->index], + info->index == NVKM_SUBDEV_NR ? NULL : nvkm_subdev_type[info->index], info->addr, info->fault, info->engine, info->runlist, info->intr, info->reset); info = NULL; From 65a279c1a9709edc00a5859737d0abd50c029ca0 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 25 Jul 2020 16:40:07 +1000 Subject: [PATCH 14/87] drm/nouveau/subdev: track type+instance separately We use subdev id bitmasks (as a u64) in a number of places, and GA100 adds enough new engine instances that we run out of bits. We could alias IDs of engines that no longer exist, but it's cleaner for a number of reasons to just split the subdev index into a subdev type, and instance ID instead. Just a lot more painful to do. This magics up the values for old-style subdev constructors, and provides a way to incrementally transition each subdev to the new style. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 73 +--------------- .../drm/nouveau/include/nvkm/core/subdev.h | 86 ++++++++++++++++++- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 34 +++++++- 3 files changed, 115 insertions(+), 78 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 3ede84c15ea2..a1c7219b04b3 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -4,78 +4,7 @@ #include #include -enum nvkm_devidx { - 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_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_NVENC1, - NVKM_ENGINE_NVENC2, - NVKM_ENGINE_NVENC_LAST = NVKM_ENGINE_NVENC2, - - 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, - - NVKM_SUBDEV_NR -}; +#define nvkm_devidx nvkm_subdev_type enum nvkm_device_type { NVKM_DEVICE_PCI, diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index beb447ca82e2..a37f7112de33 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -3,10 +3,88 @@ #define __NVKM_SUBDEV_H__ #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, + + NVKM_SUBDEV_NR +}; + struct nvkm_subdev { const struct nvkm_subdev_func *func; struct nvkm_device *device; enum nvkm_devidx index; + enum nvkm_subdev_type type; + int inst; char name[16]; u32 debug; struct list_head head; @@ -27,8 +105,12 @@ struct nvkm_subdev_func { extern const char *nvkm_subdev_type[NVKM_SUBDEV_NR]; int nvkm_subdev_new_(const struct nvkm_subdev_func *, struct nvkm_device *, int index, struct nvkm_subdev **); -void nvkm_subdev_ctor(const struct nvkm_subdev_func *, struct nvkm_device *, - int index, struct nvkm_subdev *); +void nvkm_subdev_ctor_(const struct nvkm_subdev_func *, bool old, struct nvkm_device *, + enum nvkm_subdev_type, int inst, struct nvkm_subdev *); +#define nvkm_subdev_ctor_o(f,d,i, s) nvkm_subdev_ctor_((f), true, (d), (i), -1 , (s)) +#define nvkm_subdev_ctor_n(f,d,t,i,s) nvkm_subdev_ctor_((f), false, (d), (t), (i), (s)) +#define nvkm_subdev_ctor__(_1,_2,_3,_4,_5,IMPL,...) IMPL +#define nvkm_subdev_ctor(A...) nvkm_subdev_ctor__(A, nvkm_subdev_ctor_n, nvkm_subdev_ctor_o)(A) void nvkm_subdev_del(struct nvkm_subdev **); int nvkm_subdev_preinit(struct nvkm_subdev *); int nvkm_subdev_init(struct nvkm_subdev *); diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 7759e6e56ab4..12a13d634a70 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -208,14 +208,40 @@ nvkm_subdev_del(struct nvkm_subdev **psubdev) } void -nvkm_subdev_ctor(const struct nvkm_subdev_func *func, - struct nvkm_device *device, int index, +nvkm_subdev_ctor_(const struct nvkm_subdev_func *func, bool old, + struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_subdev *subdev) { subdev->func = func; subdev->device = device; - subdev->index = index; - strscpy(subdev->name, nvkm_subdev_type[index], sizeof(subdev->name)); + subdev->type = type; + subdev->inst = inst < 0 ? 0 : inst; + subdev->index = type + subdev->inst; + + if (old) { + switch (subdev->type) { + case NVKM_ENGINE_CE0 ... NVKM_ENGINE_CE_LAST: + subdev->type = NVKM_ENGINE_CE; + subdev->inst = subdev->index - NVKM_ENGINE_CE0; + break; + case NVKM_ENGINE_NVENC0 ... NVKM_ENGINE_NVENC_LAST: + subdev->type = NVKM_ENGINE_NVENC; + subdev->inst = subdev->index - NVKM_ENGINE_NVENC0; + break; + case NVKM_ENGINE_NVDEC0 ... NVKM_ENGINE_NVDEC_LAST: + subdev->type = NVKM_ENGINE_NVDEC; + subdev->inst = subdev->index - NVKM_ENGINE_NVDEC0; + break; + default: + break; + } + inst = -1; + } + + if (inst >= 0) + snprintf(subdev->name, sizeof(subdev->name), "%s%d", nvkm_subdev_type[type], inst); + else + strscpy(subdev->name, nvkm_subdev_type[type], sizeof(subdev->name)); subdev->debug = nvkm_dbgopt(device->dbgopt, subdev->name); list_add_tail(&subdev->head, &device->subdev); } From efe2a9eccd720d93d3ea6271bc5e2245344daadb Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 14:28:06 +1000 Subject: [PATCH 15/87] drm/nouveau/device: pass instance id when looking up a subdev/engine This switches to using the subdev list for lookup, and otherwise should be a no-op aside from switching the function signatures. Callers will be transitioned to split type+inst individually. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 4 +- .../drm/nouveau/include/nvkm/core/engine.h | 2 + drivers/gpu/drm/nouveau/nvkm/core/engine.c | 6 +- .../gpu/drm/nouveau/nvkm/engine/device/base.c | 94 +++---------------- .../gpu/drm/nouveau/nvkm/engine/device/user.c | 6 +- .../drm/nouveau/nvkm/engine/disp/channv50.c | 2 +- .../gpu/drm/nouveau/nvkm/engine/fifo/chan.c | 2 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | 6 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 6 +- .../gpu/drm/nouveau/nvkm/engine/fifo/tu102.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c | 8 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/therm/gk104.c | 6 +- 13 files changed, 41 insertions(+), 109 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index a1c7219b04b3..b4c373bc3ca8 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -111,8 +111,8 @@ struct nvkm_device { struct list_head subdev; }; -struct nvkm_subdev *nvkm_device_subdev(struct nvkm_device *, int index); -struct nvkm_engine *nvkm_device_engine(struct nvkm_device *, int index); +struct nvkm_subdev *nvkm_device_subdev(struct nvkm_device *, int type, int inst); +struct nvkm_engine *nvkm_device_engine(struct nvkm_device *, int type, int inst); struct nvkm_device_func { struct nvkm_device_pci *(*pci)(struct nvkm_device *); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h index c9d84bd17364..580d3d72fc13 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h @@ -6,6 +6,8 @@ struct nvkm_fifo_chan; struct nvkm_fb_tile; +extern const struct nvkm_subdev_func nvkm_engine; + struct nvkm_engine { const struct nvkm_engine_func *func; struct nvkm_subdev subdev; diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c index 6016af82b0cc..774270ae9e24 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c @@ -165,8 +165,8 @@ nvkm_engine_dtor(struct nvkm_subdev *subdev) return engine; } -static const struct nvkm_subdev_func -nvkm_engine_func = { +const struct nvkm_subdev_func +nvkm_engine = { .dtor = nvkm_engine_dtor, .preinit = nvkm_engine_preinit, .init = nvkm_engine_init, @@ -180,7 +180,7 @@ nvkm_engine_ctor(const struct nvkm_engine_func *func, struct nvkm_device *device, int index, bool enable, struct nvkm_engine *engine) { - nvkm_subdev_ctor(&nvkm_engine_func, device, index, &engine->subdev); + nvkm_subdev_ctor(&nvkm_engine, device, index, &engine->subdev); engine->func = func; refcount_set(&engine->use.refcount, 0); mutex_init(&engine->use.mutex); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index fa1b6fa6bc74..a4d7d6cffaee 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2726,97 +2726,27 @@ nvkm_device_event_func = { }; struct nvkm_subdev * -nvkm_device_subdev(struct nvkm_device *device, int index) +nvkm_device_subdev(struct nvkm_device *device, int type, int inst) { - struct nvkm_engine *engine; + struct nvkm_subdev *subdev; - if (device->disable_mask & (1ULL << index)) + if (device->disable_mask & (1ULL << (type + inst))) return NULL; - switch (index) { -#define _(n,p,m) case NVKM_SUBDEV_##n: if (p) return (m); break - _(ACR , device->acr , &device->acr->subdev); - _(BAR , device->bar , &device->bar->subdev); - _(VBIOS , device->bios , &device->bios->subdev); - _(BUS , device->bus , &device->bus->subdev); - _(CLK , device->clk , &device->clk->subdev); - _(DEVINIT , device->devinit , &device->devinit->subdev); - _(FAULT , device->fault , &device->fault->subdev); - _(FB , device->fb , &device->fb->subdev); - _(FUSE , device->fuse , &device->fuse->subdev); - _(GPIO , device->gpio , &device->gpio->subdev); - _(GSP , device->gsp , &device->gsp->subdev); - _(I2C , device->i2c , &device->i2c->subdev); - _(IBUS , device->ibus , device->ibus); - _(ICCSENSE, device->iccsense, &device->iccsense->subdev); - _(INSTMEM , device->imem , &device->imem->subdev); - _(LTC , device->ltc , &device->ltc->subdev); - _(MC , device->mc , &device->mc->subdev); - _(MMU , device->mmu , &device->mmu->subdev); - _(MXM , device->mxm , device->mxm); - _(PCI , device->pci , &device->pci->subdev); - _(PMU , device->pmu , &device->pmu->subdev); - _(THERM , device->therm , &device->therm->subdev); - _(TIMER , device->timer , &device->timer->subdev); - _(TOP , device->top , &device->top->subdev); - _(VOLT , device->volt , &device->volt->subdev); -#undef _ - default: - engine = nvkm_device_engine(device, index); - if (engine) - return &engine->subdev; - break; + list_for_each_entry(subdev, &device->subdev, head) { + if (subdev->index == type + inst) + return subdev; } + return NULL; } struct nvkm_engine * -nvkm_device_engine(struct nvkm_device *device, int index) +nvkm_device_engine(struct nvkm_device *device, int type, int inst) { - if (device->disable_mask & (1ULL << index)) - return NULL; - - switch (index) { -#define _(n,p,m) case NVKM_ENGINE_##n: if (p) return (m); break - _(BSP , device->bsp , device->bsp); - _(CE0 , device->ce[0] , device->ce[0]); - _(CE1 , device->ce[1] , device->ce[1]); - _(CE2 , device->ce[2] , device->ce[2]); - _(CE3 , device->ce[3] , device->ce[3]); - _(CE4 , device->ce[4] , device->ce[4]); - _(CE5 , device->ce[5] , device->ce[5]); - _(CE6 , device->ce[6] , device->ce[6]); - _(CE7 , device->ce[7] , device->ce[7]); - _(CE8 , device->ce[8] , device->ce[8]); - _(CIPHER , device->cipher , device->cipher); - _(DISP , device->disp , &device->disp->engine); - _(DMAOBJ , device->dma , &device->dma->engine); - _(FIFO , device->fifo , &device->fifo->engine); - _(GR , device->gr , &device->gr->engine); - _(IFB , device->ifb , device->ifb); - _(ME , device->me , device->me); - _(MPEG , device->mpeg , device->mpeg); - _(MSENC , device->msenc , device->msenc); - _(MSPDEC , device->mspdec , device->mspdec); - _(MSPPP , device->msppp , device->msppp); - _(MSVLD , device->msvld , device->msvld); - _(NVENC0 , device->nvenc[0], &device->nvenc[0]->engine); - _(NVENC1 , device->nvenc[1], &device->nvenc[1]->engine); - _(NVENC2 , device->nvenc[2], &device->nvenc[2]->engine); - _(NVDEC0 , device->nvdec[0], &device->nvdec[0]->engine); - _(NVDEC1 , device->nvdec[1], &device->nvdec[1]->engine); - _(NVDEC2 , device->nvdec[2], &device->nvdec[2]->engine); - _(PM , device->pm , &device->pm->engine); - _(SEC , device->sec , device->sec); - _(SEC2 , device->sec2 , &device->sec2->engine); - _(SW , device->sw , &device->sw->engine); - _(VIC , device->vic , device->vic); - _(VP , device->vp , device->vp); -#undef _ - default: - WARN_ON(1); - break; - } + struct nvkm_subdev *subdev = nvkm_device_subdev(device, type, inst); + if (subdev && subdev->func == &nvkm_engine) + return container_of(subdev, struct nvkm_engine, subdev); return NULL; } @@ -3264,7 +3194,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func, if (device->chip->m && (subdev_mask & (1ULL << (s)))) { \ ret = device->chip->m(device, (s), &device->m); \ if (ret) { \ - subdev = nvkm_device_subdev(device, (s)); \ + subdev = nvkm_device_subdev(device, (s), 0); \ nvkm_subdev_del(&subdev); \ device->m = NULL; \ if (ret != -ENODEV) { \ diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c index 147894798786..e1958070b895 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c @@ -51,7 +51,7 @@ nvkm_udevice_info_subdev(struct nvkm_device *device, u64 mthd, u64 *data) return -EINVAL; } - subdev = nvkm_device_subdev(device, subidx); + subdev = nvkm_device_subdev(device, subidx, 0); if (subdev) return nvkm_subdev_info(subdev, mthd, data); return -ENODEV; @@ -70,7 +70,7 @@ nvkm_udevice_info_v1(struct nvkm_device *device, switch (args->mthd) { #define ENGINE__(A,B,C) NV_DEVICE_INFO_ENGINE_##A: { int _i; \ for (_i = (B), args->data = 0ULL; _i <= (C); _i++) { \ - if (nvkm_device_engine(device, _i)) \ + if (nvkm_device_engine(device, _i, 0)) \ args->data |= BIT_ULL(_i); \ } \ } @@ -357,7 +357,7 @@ nvkm_udevice_child_get(struct nvkm_object *object, int index, int i; for (; i = __ffs64(mask), mask && !sclass; mask &= ~(1ULL << i)) { - if (!(engine = nvkm_device_engine(device, i)) || + if (!(engine = nvkm_device_engine(device, i, 0)) || !(engine->func->base.sclass)) continue; oclass->engine = engine; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c index 50e3539f33d2..a7a7eb041515 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c @@ -278,7 +278,7 @@ nv50_disp_chan_child_get(struct nvkm_object *object, int index, const struct nvkm_device_oclass *oclass = NULL; if (chan->func->bind) - sclass->engine = nvkm_device_engine(device, NVKM_ENGINE_DMAOBJ); + sclass->engine = nvkm_device_engine(device, NVKM_ENGINE_DMAOBJ, 0); else sclass->engine = NULL; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c index 407c45e6e305..0409c69daacb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c @@ -209,7 +209,7 @@ nvkm_fifo_chan_child_get(struct nvkm_object *object, int index, int ret, i, c; for (; c = 0, i = __ffs64(mask), mask; mask &= ~(1ULL << i)) { - if (!(engine = nvkm_device_engine(device, i))) + if (!(engine = nvkm_device_engine(device, i, 0))) continue; oclass->engine = engine; oclass->base.oclass = 0; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index 6e9001a25f7d..4811cd30f0a3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c @@ -138,7 +138,7 @@ gf100_fifo_engine(struct gf100_fifo *fifo, u32 engn) return NULL; } - return nvkm_device_engine(device, engn); + return nvkm_device_engine(device, engn, 0); } static void @@ -161,7 +161,7 @@ gf100_fifo_recover_work(struct work_struct *w) nvkm_mask(device, 0x002630, engm, engm); for (todo = mask; engn = __ffs64(todo), todo; todo &= ~BIT_ULL(engn)) { - if ((engine = nvkm_device_engine(device, engn))) { + if ((engine = nvkm_device_engine(device, engn, 0))) { nvkm_subdev_fini(&engine->subdev, false); WARN_ON(nvkm_subdev_init(&engine->subdev)); } @@ -286,7 +286,7 @@ gf100_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) nvkm_mask(device, 0x001718, 0x00000000, 0x00000000); break; default: - engine = nvkm_device_engine(device, eu->data2); + engine = nvkm_device_engine(device, eu->data2, 0); break; } } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 566361c669c4..25425f731103 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -483,7 +483,7 @@ gk104_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) nvkm_mask(device, 0x001718, 0x00000000, 0x00000000); break; default: - engine = nvkm_device_engine(device, ee->data2); + engine = nvkm_device_engine(device, ee->data2, 0); break; } } @@ -496,7 +496,7 @@ gk104_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) do { *dst++ = toupper(*src++); } while(*src); - engine = nvkm_device_engine(device, engidx); + engine = nvkm_device_engine(device, engidx, 0); } } else { snprintf(en, sizeof(en), "%s", ee->name); @@ -921,7 +921,7 @@ gk104_fifo_oneinit(struct nvkm_fifo *base) nvkm_debug(subdev, "engine %2d: runlist %2d pbdma %2d (%s)\n", engn, runl, pbid, nvkm_subdev_type[engidx]); - fifo->engine[engn].engine = nvkm_device_engine(device, engidx); + fifo->engine[engn].engine = nvkm_device_engine(device, engidx, 0); fifo->engine[engn].runl = runl; fifo->engine[engn].pbid = pbid; fifo->engine_nr = max(fifo->engine_nr, engn + 1); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c index 6fd16790514c..f2e91f9c06e1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c @@ -303,7 +303,7 @@ tu102_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) nvkm_mask(device, 0x001718, 0x00000000, 0x00000000); break; default: - engine = nvkm_device_engine(device, ee->data2); + engine = nvkm_device_engine(device, ee->data2, 0); break; } } @@ -318,7 +318,7 @@ tu102_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) do { *dst++ = toupper(*src++); } while (*src); - engine = nvkm_device_engine(device, engidx); + engine = nvkm_device_engine(device, engidx, 0); } } else { snprintf(en, sizeof(en), "%s", ee->name); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c index d350d92852d2..34a354599ee2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c @@ -260,7 +260,7 @@ gk104_ram_calc_gddr5(struct gk104_ram *ram, u32 freq) ram_mask(fuc, 0x10f808, 0x40000000, 0x40000000); ram_block(fuc); - if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP)) + if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP, 0)) ram_wr32(fuc, 0x62c000, 0x0f0f0000); /* MR1: turn termination on early, for some reason.. */ @@ -661,7 +661,7 @@ gk104_ram_calc_gddr5(struct gk104_ram *ram, u32 freq) ram_unblock(fuc); - if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP)) + if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP, 0)) ram_wr32(fuc, 0x62c000, 0x0f0f0f00); if (next->bios.rammap_11_08_01) @@ -711,7 +711,7 @@ gk104_ram_calc_sddr3(struct gk104_ram *ram, u32 freq) ram_mask(fuc, 0x10f808, 0x40000000, 0x40000000); ram_block(fuc); - if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP)) + if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP, 0)) ram_wr32(fuc, 0x62c000, 0x0f0f0000); if (vc == 1 && ram_have(fuc, gpio2E)) { @@ -943,7 +943,7 @@ gk104_ram_calc_sddr3(struct gk104_ram *ram, u32 freq) ram_unblock(fuc); - if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP)) + if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP, 0)) ram_wr32(fuc, 0x62c000, 0x0f0f0f00); if (next->bios.rammap_11_08_01) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c index 09f669ac6630..43bf0324a82e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c @@ -90,7 +90,7 @@ nvkm_mc_intr(struct nvkm_device *device, bool *handled) stat = nvkm_top_intr(device, intr, &subdevs); while (subdevs) { enum nvkm_devidx subidx = __ffs64(subdevs); - subdev = nvkm_device_subdev(device, subidx); + subdev = nvkm_device_subdev(device, subidx, 0); if (subdev) nvkm_subdev_intr(subdev); subdevs &= ~BIT_ULL(subidx); @@ -98,7 +98,7 @@ nvkm_mc_intr(struct nvkm_device *device, bool *handled) for (map = mc->func->intr; map->stat; map++) { if (intr & map->stat) { - subdev = nvkm_device_subdev(device, map->unit); + subdev = nvkm_device_subdev(device, map->unit, 0); if (subdev) nvkm_subdev_intr(subdev); stat &= ~map->stat; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c index 4e03971d2e3d..f6f7db2a3db7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c @@ -36,7 +36,7 @@ gk104_clkgate_enable(struct nvkm_therm *base) /* Program ENG_MANT, ENG_FILTER */ for (i = 0; order[i].engine != NVKM_SUBDEV_NR; i++) { - if (!nvkm_device_subdev(dev, order[i].engine)) + if (!nvkm_device_subdev(dev, order[i].engine, 0)) continue; nvkm_mask(dev, 0x20200 + order[i].offset, 0xff00, 0x4500); @@ -48,7 +48,7 @@ gk104_clkgate_enable(struct nvkm_therm *base) /* Enable clockgating (ENG_CLK = RUN->AUTO) */ for (i = 0; order[i].engine != NVKM_SUBDEV_NR; i++) { - if (!nvkm_device_subdev(dev, order[i].engine)) + if (!nvkm_device_subdev(dev, order[i].engine, 0)) continue; nvkm_mask(dev, 0x20200 + order[i].offset, 0x00ff, 0x0045); @@ -65,7 +65,7 @@ gk104_clkgate_fini(struct nvkm_therm *base, bool suspend) /* ENG_CLK = AUTO->RUN, ENG_PWR = RUN->AUTO */ for (i = 0; order[i].engine != NVKM_SUBDEV_NR; i++) { - if (!nvkm_device_subdev(dev, order[i].engine)) + if (!nvkm_device_subdev(dev, order[i].engine, 0)) continue; nvkm_mask(dev, 0x20200 + order[i].offset, 0xff, 0x54); From f483253f3486f2e7c669e841aceb2ac95cbb9318 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sun, 6 Dec 2020 12:14:13 +1000 Subject: [PATCH 16/87] drm/nouveau/nvkm: add macros for subdev layout Rather than having to add new engines / engine instances to multiple places, define everything in include/nvkm/core/layout.h and use macros to generate the required plumbing. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 16 ++++++- .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/core/subdev.h | 2 + drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 18 ++++++++ .../gpu/drm/nouveau/nvkm/engine/device/base.c | 42 +++++++++++++++++++ 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/nouveau/include/nvkm/core/layout.h diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index b4c373bc3ca8..66743f2e329c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -3,6 +3,7 @@ #define __NVKM_DEVICE_H__ #include #include +enum nvkm_subdev_type; #define nvkm_devidx nvkm_subdev_type @@ -108,6 +109,11 @@ struct nvkm_device { struct nvkm_engine *vic; struct nvkm_engine *vp; +#define NVKM_LAYOUT_ONCE(type,data,ptr) data *ptr; +#define NVKM_LAYOUT_INST(type,data,ptr,cnt) data *ptr[cnt]; +#include +#undef NVKM_LAYOUT_INST +#undef NVKM_LAYOUT_ONCE struct list_head subdev; }; @@ -133,7 +139,15 @@ struct nvkm_device_quirk { struct nvkm_device_chip { const char *name; - +#define NVKM_LAYOUT_ONCE(type,data,ptr,...) \ + struct { \ + u32 inst; \ + int (*ctor)(struct nvkm_device *, enum nvkm_subdev_type, int inst, data **); \ + } ptr; +#define NVKM_LAYOUT_INST(A...) NVKM_LAYOUT_ONCE(A) +#include +#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 **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h new file mode 100644 index 000000000000..7812f3568059 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -0,0 +1 @@ +/* SPDX-License-Identifier: MIT */ diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index a37f7112de33..8f41393467ce 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -89,6 +89,7 @@ struct nvkm_subdev { u32 debug; struct list_head head; + void **pself; bool oneinit; }; @@ -111,6 +112,7 @@ void nvkm_subdev_ctor_(const struct nvkm_subdev_func *, bool old, struct nvkm_de #define nvkm_subdev_ctor_n(f,d,t,i,s) nvkm_subdev_ctor_((f), false, (d), (t), (i), (s)) #define nvkm_subdev_ctor__(_1,_2,_3,_4,_5,IMPL,...) IMPL #define nvkm_subdev_ctor(A...) nvkm_subdev_ctor__(A, nvkm_subdev_ctor_n, nvkm_subdev_ctor_o)(A) +void nvkm_subdev_disable(struct nvkm_device *, enum nvkm_subdev_type, int inst); void nvkm_subdev_del(struct nvkm_subdev **); int nvkm_subdev_preinit(struct nvkm_subdev *); int nvkm_subdev_init(struct nvkm_subdev *); diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 12a13d634a70..acfa3ba5880d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -28,6 +28,11 @@ const char * nvkm_subdev_type[NVKM_SUBDEV_NR] = { +#define NVKM_LAYOUT_ONCE(type,data,ptr,...) [type] = #ptr, +#define NVKM_LAYOUT_INST(A...) NVKM_LAYOUT_ONCE(A) +#include +#undef NVKM_LAYOUT_ONCE +#undef NVKM_LAYOUT_INST [NVKM_SUBDEV_ACR ] = "acr", [NVKM_SUBDEV_BAR ] = "bar", [NVKM_SUBDEV_VBIOS ] = "bios", @@ -207,6 +212,19 @@ nvkm_subdev_del(struct nvkm_subdev **psubdev) } } +void +nvkm_subdev_disable(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) +{ + struct nvkm_subdev *subdev; + list_for_each_entry(subdev, &device->subdev, head) { + if (subdev->type == type && subdev->inst == inst) { + *subdev->pself = NULL; + nvkm_subdev_del(&subdev); + break; + } + } +} + void nvkm_subdev_ctor_(const struct nvkm_subdev_func *func, bool old, struct nvkm_device *device, enum nvkm_subdev_type type, int inst, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index a4d7d6cffaee..de9f1d356012 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -3206,6 +3206,48 @@ nvkm_device_ctor(const struct nvkm_device_func *func, } \ break switch (i) { +#define NVKM_LAYOUT_ONCE(type,data,ptr) case type: \ + 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); \ + subdev = nvkm_device_subdev(device, (type), 0); \ + if (ret) { \ + nvkm_subdev_del(&subdev); \ + device->ptr = NULL; \ + if (ret != -ENODEV) { \ + nvdev_error(device, "%s ctor failed: %d\n", \ + nvkm_subdev_type[(type)], ret); \ + goto done; \ + } \ + } else { \ + subdev->pself = (void **)&device->ptr; \ + } \ + } \ + break; +#define NVKM_LAYOUT_INST(type,data,ptr,cnt) case type: \ + 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))) { \ + int inst = (device->chip->ptr.inst == 1) ? -1 : (j); \ + ret = device->chip->ptr.ctor(device, (type), inst, &device->ptr[j]); \ + subdev = nvkm_device_subdev(device, (type), (j)); \ + if (ret) { \ + nvkm_subdev_del(&subdev); \ + device->ptr[j] = NULL; \ + if (ret != -ENODEV) { \ + nvdev_error(device, "%s%d ctor failed: %d\n", \ + nvkm_subdev_type[(type)], (j), ret); \ + goto done; \ + } \ + } else { \ + subdev->pself = (void **)&device->ptr[j]; \ + } \ + } \ + } \ + break; +#include +#undef NVKM_LAYOUT_INST +#undef NVKM_LAYOUT_ONCE _(NVKM_SUBDEV_ACR , acr); _(NVKM_SUBDEV_BAR , bar); _(NVKM_SUBDEV_VBIOS , bios); From c288b4de94a874ef2c4f94fcdf9ad3e2163bc4ae Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 2 Dec 2020 08:35:30 +1000 Subject: [PATCH 17/87] drm/nouveau/acr: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 -- .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/acr.h | 12 +++---- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 35 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/acr/base.c | 4 +-- .../gpu/drm/nouveau/nvkm/subdev/acr/gm200.c | 5 +-- .../gpu/drm/nouveau/nvkm/subdev/acr/gm20b.c | 5 +-- .../gpu/drm/nouveau/nvkm/subdev/acr/gp102.c | 5 +-- .../gpu/drm/nouveau/nvkm/subdev/acr/gp108.c | 5 +-- .../gpu/drm/nouveau/nvkm/subdev/acr/gp10b.c | 5 +-- .../gpu/drm/nouveau/nvkm/subdev/acr/priv.h | 4 +-- .../gpu/drm/nouveau/nvkm/subdev/acr/tu102.c | 5 +-- 13 files changed, 46 insertions(+), 43 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 66743f2e329c..862cbde2054b 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_acr *acr; struct nvkm_bar *bar; struct nvkm_bios *bios; struct nvkm_bus *bus; @@ -148,7 +147,6 @@ struct nvkm_device_chip { #include #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 **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 7812f3568059..9afc17d760a2 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1 +1,2 @@ /* SPDX-License-Identifier: MIT */ +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/acr.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/acr.h index 836d8b932822..c0b254f7f0b5 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/acr.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/acr.h @@ -59,12 +59,12 @@ struct nvkm_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; diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index acfa3ba5880d..a6fd9683e677 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_ACR ] = "acr", [NVKM_SUBDEV_BAR ] = "bar", [NVKM_SUBDEV_VBIOS ] = "bios", [NVKM_SUBDEV_BUS ] = "bus", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index de9f1d356012..745778556473 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2029,7 +2029,7 @@ nv118_chipset = { 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, @@ -2067,7 +2067,7 @@ nv120_chipset = { 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, @@ -2105,7 +2105,7 @@ nv124_chipset = { 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, @@ -2142,7 +2142,7 @@ nv126_chipset = { 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, @@ -2167,7 +2167,7 @@ nv12b_chipset = { 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, @@ -2207,7 +2207,7 @@ nv130_chipset = { 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, @@ -2245,7 +2245,7 @@ nv132_chipset = { 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, @@ -2283,7 +2283,7 @@ nv134_chipset = { 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, @@ -2320,7 +2320,7 @@ nv136_chipset = { 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, @@ -2358,7 +2358,7 @@ nv137_chipset = { 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, @@ -2394,7 +2394,7 @@ nv138_chipset = { 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, @@ -2418,7 +2418,7 @@ nv13b_chipset = { 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, @@ -2462,7 +2462,7 @@ nv140_chipset = { 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, @@ -2500,7 +2500,7 @@ nv162_chipset = { 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, @@ -2539,7 +2539,7 @@ nv164_chipset = { 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, @@ -2579,7 +2579,7 @@ nv166_chipset = { 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, @@ -2617,7 +2617,7 @@ nv167_chipset = { 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, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_ACR , acr); _(NVKM_SUBDEV_BAR , bar); _(NVKM_SUBDEV_VBIOS , bios); _(NVKM_SUBDEV_BUS , bus); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c index c962df9910dd..af6cac696d43 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c @@ -410,14 +410,14 @@ nvkm_acr_ctor_wpr(struct nvkm_acr *acr, int ver) 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); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c index cd41b2e6cc87..8bff384a0bb7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c @@ -478,7 +478,8 @@ gm200_acr_fwif[] = { }; 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); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.c index b1ecc58152cc..54e996f2f630 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.c @@ -129,7 +129,8 @@ gm20b_acr_fwif[] = { }; 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); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c index 80eb9d8dbc80..fb9132a39bb1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c @@ -276,7 +276,8 @@ gp102_acr_fwif[] = { }; 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); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.c index 67a7c141004b..373d638a2177 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.c @@ -106,7 +106,8 @@ gp108_acr_fwif[] = { }; 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); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.c index 8249f0d2d81d..f03ba028867b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.c @@ -52,7 +52,8 @@ gp10b_acr_fwif[] = { }; 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); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/priv.h index d71af17a169a..c30b841c9d35 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/priv.h @@ -135,8 +135,8 @@ int gp102_acr_load_load(struct nvkm_acr *, struct nvkm_acr_hsfw *); 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 { diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.c index c4981bce9a2b..05a87e77525f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.c @@ -224,7 +224,8 @@ tu102_acr_fwif[] = { }; 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); } From 917b24a3c79bde07c763736e3c9ffa01f96f7050 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 10:46:32 +1000 Subject: [PATCH 18/87] drm/nouveau/bar: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/bar.h | 14 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 107 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/bar/base.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bar/gf100.c | 9 +- .../gpu/drm/nouveau/nvkm/subdev/bar/gf100.h | 2 +- .../gpu/drm/nouveau/nvkm/subdev/bar/gk20a.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bar/gm107.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bar/gm20b.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bar/nv50.c | 9 +- .../gpu/drm/nouveau/nvkm/subdev/bar/nv50.h | 2 +- .../gpu/drm/nouveau/nvkm/subdev/bar/priv.h | 2 +- .../gpu/drm/nouveau/nvkm/subdev/bar/tu102.c | 5 +- 16 files changed, 91 insertions(+), 87 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 862cbde2054b..7ef3d99f3939 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_bar *bar; struct nvkm_bios *bios; struct nvkm_bus *bus; struct nvkm_clk *clk; @@ -147,7 +146,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - 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 **); int (*clk )(struct nvkm_device *, int idx, struct nvkm_clk **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 9afc17d760a2..dea9dd519881 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1,2 +1,3 @@ /* SPDX-License-Identifier: MIT */ +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bar.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bar.h index 14b09f7e46a5..4f07836ab984 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bar.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bar.h @@ -23,11 +23,11 @@ void nvkm_bar_bar2_reset(struct nvkm_device *); struct nvkm_vmm *nvkm_bar_bar2_vmm(struct nvkm_device *); void nvkm_bar_flush(struct nvkm_bar *); -int nv50_bar_new(struct nvkm_device *, int, struct nvkm_bar **); -int g84_bar_new(struct nvkm_device *, int, struct nvkm_bar **); -int gf100_bar_new(struct nvkm_device *, int, struct nvkm_bar **); -int gk20a_bar_new(struct nvkm_device *, int, struct nvkm_bar **); -int gm107_bar_new(struct nvkm_device *, int, struct nvkm_bar **); -int gm20b_bar_new(struct nvkm_device *, int, struct nvkm_bar **); -int tu102_bar_new(struct nvkm_device *, int, struct nvkm_bar **); +int nv50_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **); +int g84_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **); +int gf100_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **); +int gk20a_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **); +int gm107_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **); +int gm20b_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **); +int tu102_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index a6fd9683e677..f5e76986de4b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_BAR ] = "bar", [NVKM_SUBDEV_VBIOS ] = "bios", [NVKM_SUBDEV_BUS ] = "bus", [NVKM_SUBDEV_CLK ] = "clk", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 745778556473..b4f5e6c837f4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -810,7 +810,7 @@ nv4e_chipset = { static const struct nvkm_device_chip nv50_chipset = { .name = "G80", - .bar = nv50_bar_new, + .bar = { 0x00000001, nv50_bar_new }, .bios = nvkm_bios_new, .bus = nv50_bus_new, .clk = nv50_clk_new, @@ -917,7 +917,7 @@ nv68_chipset = { static const struct nvkm_device_chip nv84_chipset = { .name = "G84", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = nv50_bus_new, .clk = g84_clk_new, @@ -949,7 +949,7 @@ nv84_chipset = { static const struct nvkm_device_chip nv86_chipset = { .name = "G86", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = nv50_bus_new, .clk = g84_clk_new, @@ -981,7 +981,7 @@ nv86_chipset = { static const struct nvkm_device_chip nv92_chipset = { .name = "G92", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = nv50_bus_new, .clk = g84_clk_new, @@ -1013,7 +1013,7 @@ nv92_chipset = { static const struct nvkm_device_chip nv94_chipset = { .name = "G94", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = g84_clk_new, @@ -1045,7 +1045,7 @@ nv94_chipset = { static const struct nvkm_device_chip nv96_chipset = { .name = "G96", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = g84_clk_new, @@ -1077,7 +1077,7 @@ nv96_chipset = { static const struct nvkm_device_chip nv98_chipset = { .name = "G98", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = g84_clk_new, @@ -1109,7 +1109,7 @@ nv98_chipset = { static const struct nvkm_device_chip nva0_chipset = { .name = "GT200", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = g84_clk_new, @@ -1141,7 +1141,7 @@ nva0_chipset = { static const struct nvkm_device_chip nva3_chipset = { .name = "GT215", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = gt215_clk_new, @@ -1175,7 +1175,7 @@ nva3_chipset = { static const struct nvkm_device_chip nva5_chipset = { .name = "GT216", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = gt215_clk_new, @@ -1208,7 +1208,7 @@ nva5_chipset = { static const struct nvkm_device_chip nva8_chipset = { .name = "GT218", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = gt215_clk_new, @@ -1241,7 +1241,7 @@ nva8_chipset = { static const struct nvkm_device_chip nvaa_chipset = { .name = "MCP77/MCP78", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = mcp77_clk_new, @@ -1273,7 +1273,7 @@ nvaa_chipset = { static const struct nvkm_device_chip nvac_chipset = { .name = "MCP79/MCP7A", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = mcp77_clk_new, @@ -1305,7 +1305,7 @@ nvac_chipset = { static const struct nvkm_device_chip nvaf_chipset = { .name = "MCP89", - .bar = g84_bar_new, + .bar = { 0x00000001, g84_bar_new }, .bios = nvkm_bios_new, .bus = g94_bus_new, .clk = gt215_clk_new, @@ -1338,7 +1338,7 @@ nvaf_chipset = { static const struct nvkm_device_chip nvc0_chipset = { .name = "GF100", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1375,7 +1375,7 @@ nvc0_chipset = { static const struct nvkm_device_chip nvc1_chipset = { .name = "GF108", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1411,7 +1411,7 @@ nvc1_chipset = { static const struct nvkm_device_chip nvc3_chipset = { .name = "GF106", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1447,7 +1447,7 @@ nvc3_chipset = { static const struct nvkm_device_chip nvc4_chipset = { .name = "GF104", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1484,7 +1484,7 @@ nvc4_chipset = { static const struct nvkm_device_chip nvc8_chipset = { .name = "GF110", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1521,7 +1521,7 @@ nvc8_chipset = { static const struct nvkm_device_chip nvce_chipset = { .name = "GF114", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1558,7 +1558,7 @@ nvce_chipset = { static const struct nvkm_device_chip nvcf_chipset = { .name = "GF116", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1594,7 +1594,7 @@ nvcf_chipset = { static const struct nvkm_device_chip nvd7_chipset = { .name = "GF117", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1629,7 +1629,7 @@ nvd7_chipset = { static const struct nvkm_device_chip nvd9_chipset = { .name = "GF119", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gf100_clk_new, @@ -1665,7 +1665,7 @@ nvd9_chipset = { static const struct nvkm_device_chip nve4_chipset = { .name = "GK104", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -1704,7 +1704,7 @@ nve4_chipset = { static const struct nvkm_device_chip nve6_chipset = { .name = "GK106", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -1743,7 +1743,7 @@ nve6_chipset = { static const struct nvkm_device_chip nve7_chipset = { .name = "GK107", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -1782,7 +1782,7 @@ nve7_chipset = { static const struct nvkm_device_chip nvea_chipset = { .name = "GK20A", - .bar = gk20a_bar_new, + .bar = { 0x00000001, gk20a_bar_new }, .bus = gf100_bus_new, .clk = gk20a_clk_new, .fb = gk20a_fb_new, @@ -1807,7 +1807,7 @@ nvea_chipset = { static const struct nvkm_device_chip nvf0_chipset = { .name = "GK110", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -1845,7 +1845,7 @@ nvf0_chipset = { static const struct nvkm_device_chip nvf1_chipset = { .name = "GK110B", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -1883,7 +1883,7 @@ nvf1_chipset = { static const struct nvkm_device_chip nv106_chipset = { .name = "GK208B", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -1921,7 +1921,7 @@ nv106_chipset = { static const struct nvkm_device_chip nv108_chipset = { .name = "GK208", - .bar = gf100_bar_new, + .bar = { 0x00000001, gf100_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -1959,7 +1959,7 @@ nv108_chipset = { static const struct nvkm_device_chip nv117_chipset = { .name = "GM107", - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -1995,7 +1995,7 @@ nv117_chipset = { static const struct nvkm_device_chip nv118_chipset = { .name = "GM108", - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .clk = gk104_clk_new, @@ -2030,7 +2030,7 @@ static const struct nvkm_device_chip nv120_chipset = { .name = "GM200", .acr = { 0x00000001, gm200_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2068,7 +2068,7 @@ static const struct nvkm_device_chip nv124_chipset = { .name = "GM204", .acr = { 0x00000001, gm200_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2106,7 +2106,7 @@ static const struct nvkm_device_chip nv126_chipset = { .name = "GM206", .acr = { 0x00000001, gm200_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2143,7 +2143,7 @@ static const struct nvkm_device_chip nv12b_chipset = { .name = "GM20B", .acr = { 0x00000001, gm20b_acr_new }, - .bar = gm20b_bar_new, + .bar = { 0x00000001, gm20b_bar_new }, .bus = gf100_bus_new, .clk = gm20b_clk_new, .fb = gm20b_fb_new, @@ -2168,7 +2168,7 @@ static const struct nvkm_device_chip nv130_chipset = { .name = "GP100", .acr = { 0x00000001, gm200_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2208,7 +2208,7 @@ static const struct nvkm_device_chip nv132_chipset = { .name = "GP102", .acr = { 0x00000001, gp102_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2246,7 +2246,7 @@ static const struct nvkm_device_chip nv134_chipset = { .name = "GP104", .acr = { 0x00000001, gp102_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2284,7 +2284,7 @@ static const struct nvkm_device_chip nv136_chipset = { .name = "GP106", .acr = { 0x00000001, gp102_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2321,7 +2321,7 @@ static const struct nvkm_device_chip nv137_chipset = { .name = "GP107", .acr = { 0x00000001, gp102_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2359,7 +2359,7 @@ static const struct nvkm_device_chip nv138_chipset = { .name = "GP108", .acr = { 0x00000001, gp108_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gm200_devinit_new, @@ -2395,7 +2395,7 @@ static const struct nvkm_device_chip nv13b_chipset = { .name = "GP10B", .acr = { 0x00000001, gp10b_acr_new }, - .bar = gm20b_bar_new, + .bar = { 0x00000001, gm20b_bar_new }, .bus = gf100_bus_new, .fault = gp10b_fault_new, .fb = gp10b_fb_new, @@ -2419,7 +2419,7 @@ static const struct nvkm_device_chip nv140_chipset = { .name = "GV100", .acr = { 0x00000001, gp108_acr_new }, - .bar = gm107_bar_new, + .bar = { 0x00000001, gm107_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = gv100_devinit_new, @@ -2463,7 +2463,7 @@ static const struct nvkm_device_chip nv162_chipset = { .name = "TU102", .acr = { 0x00000001, tu102_acr_new }, - .bar = tu102_bar_new, + .bar = { 0x00000001, tu102_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = tu102_devinit_new, @@ -2501,7 +2501,7 @@ static const struct nvkm_device_chip nv164_chipset = { .name = "TU104", .acr = { 0x00000001, tu102_acr_new }, - .bar = tu102_bar_new, + .bar = { 0x00000001, tu102_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = tu102_devinit_new, @@ -2540,7 +2540,7 @@ static const struct nvkm_device_chip nv166_chipset = { .name = "TU106", .acr = { 0x00000001, tu102_acr_new }, - .bar = tu102_bar_new, + .bar = { 0x00000001, tu102_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = tu102_devinit_new, @@ -2580,7 +2580,7 @@ static const struct nvkm_device_chip nv167_chipset = { .name = "TU117", .acr = { 0x00000001, tu102_acr_new }, - .bar = tu102_bar_new, + .bar = { 0x00000001, tu102_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = tu102_devinit_new, @@ -2618,7 +2618,7 @@ static const struct nvkm_device_chip nv168_chipset = { .name = "TU116", .acr = { 0x00000001, tu102_acr_new }, - .bar = tu102_bar_new, + .bar = { 0x00000001, tu102_bar_new }, .bios = nvkm_bios_new, .bus = gf100_bus_new, .devinit = tu102_devinit_new, @@ -2655,7 +2655,7 @@ nv168_chipset = { static const struct nvkm_device_chip nv170_chipset = { .name = "GA100", - .bar = tu102_bar_new, + .bar = { 0x00000001, tu102_bar_new }, .bios = nvkm_bios_new, .devinit = ga100_devinit_new, .fb = ga100_fb_new, @@ -2672,7 +2672,7 @@ nv170_chipset = { static const struct nvkm_device_chip nv172_chipset = { .name = "GA102", - .bar = tu102_bar_new, + .bar = { 0x00000001, tu102_bar_new }, .bios = nvkm_bios_new, .devinit = ga100_devinit_new, .fb = ga102_fb_new, @@ -2691,7 +2691,7 @@ nv172_chipset = { static const struct nvkm_device_chip nv174_chipset = { .name = "GA104", - .bar = tu102_bar_new, + .bar = { 0x00000001, tu102_bar_new }, .bios = nvkm_bios_new, .devinit = ga100_devinit_new, .fb = ga102_fb_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_BAR , bar); _(NVKM_SUBDEV_VBIOS , bios); _(NVKM_SUBDEV_BUS , bus); _(NVKM_SUBDEV_CLK , clk); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.c index 209a6a40834a..d017a1b5e5dd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.c @@ -134,9 +134,9 @@ nvkm_bar = { void nvkm_bar_ctor(const struct nvkm_bar_func *func, struct nvkm_device *device, - int index, struct nvkm_bar *bar) + enum nvkm_subdev_type type, int inst, struct nvkm_bar *bar) { - nvkm_subdev_ctor(&nvkm_bar, device, index, &bar->subdev); + nvkm_subdev_ctor(&nvkm_bar, device, type, inst, &bar->subdev); bar->func = func; spin_lock_init(&bar->lock); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.c index 87f26f54b481..77a41bcf860e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.c @@ -56,7 +56,8 @@ g84_bar_func = { }; int -g84_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) +g84_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bar **pbar) { - return nv50_bar_new_(&g84_bar_func, device, index, 0x200, pbar); + return nv50_bar_new_(&g84_bar_func, device, type, inst, 0x200, pbar); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c index a3dcb09a40ee..51070b7dda85 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c @@ -162,12 +162,12 @@ gf100_bar_dtor(struct nvkm_bar *base) int gf100_bar_new_(const struct nvkm_bar_func *func, struct nvkm_device *device, - int index, struct nvkm_bar **pbar) + enum nvkm_subdev_type type, int inst, struct nvkm_bar **pbar) { struct gf100_bar *bar; if (!(bar = kzalloc(sizeof(*bar), GFP_KERNEL))) return -ENOMEM; - nvkm_bar_ctor(func, device, index, &bar->base); + nvkm_bar_ctor(func, device, type, inst, &bar->base); bar->bar2_halve = nvkm_boolopt(device->cfgopt, "NvBar2Halve", false); *pbar = &bar->base; return 0; @@ -189,7 +189,8 @@ gf100_bar_func = { }; int -gf100_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) +gf100_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bar **pbar) { - return gf100_bar_new_(&gf100_bar_func, device, index, pbar); + return gf100_bar_new_(&gf100_bar_func, device, type, inst, pbar); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.h b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.h index 4ae4c7145712..328a68b418d9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.h @@ -15,7 +15,7 @@ struct gf100_bar { struct gf100_barN bar[2]; }; -int gf100_bar_new_(const struct nvkm_bar_func *, struct nvkm_device *, +int gf100_bar_new_(const struct nvkm_bar_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_bar **); void *gf100_bar_dtor(struct nvkm_bar *); int gf100_bar_oneinit(struct nvkm_bar *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.c index 35878fb538f2..eead8ab88393 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.c @@ -32,9 +32,10 @@ gk20a_bar_func = { }; int -gk20a_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) +gk20a_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bar **pbar) { - int ret = gf100_bar_new_(&gk20a_bar_func, device, index, pbar); + int ret = gf100_bar_new_(&gk20a_bar_func, device, type, inst, pbar); if (ret == 0) (*pbar)->iomap_uncached = true; return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.c index 3ddf9222d935..da95307a7912 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.c @@ -59,7 +59,8 @@ gm107_bar_func = { }; int -gm107_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) +gm107_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bar **pbar) { - return gf100_bar_new_(&gm107_bar_func, device, index, pbar); + return gf100_bar_new_(&gm107_bar_func, device, type, inst, pbar); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.c index 1ed6170891c4..4acdb4fb0107 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.c @@ -32,9 +32,10 @@ gm20b_bar_func = { }; int -gm20b_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) +gm20b_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bar **pbar) { - int ret = gf100_bar_new_(&gm20b_bar_func, device, index, pbar); + int ret = gf100_bar_new_(&gm20b_bar_func, device, type, inst, pbar); if (ret == 0) (*pbar)->iomap_uncached = true; return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c index f23a0ccc2bec..27d8a1be43e4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c @@ -220,12 +220,12 @@ nv50_bar_dtor(struct nvkm_bar *base) int nv50_bar_new_(const struct nvkm_bar_func *func, struct nvkm_device *device, - int index, u32 pgd_addr, struct nvkm_bar **pbar) + enum nvkm_subdev_type type, int inst, u32 pgd_addr, struct nvkm_bar **pbar) { struct nv50_bar *bar; if (!(bar = kzalloc(sizeof(*bar), GFP_KERNEL))) return -ENOMEM; - nvkm_bar_ctor(func, device, index, &bar->base); + nvkm_bar_ctor(func, device, type, inst, &bar->base); bar->pgd_addr = pgd_addr; *pbar = &bar->base; return 0; @@ -248,7 +248,8 @@ nv50_bar_func = { }; int -nv50_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) +nv50_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bar **pbar) { - return nv50_bar_new_(&nv50_bar_func, device, index, 0x1400, pbar); + return nv50_bar_new_(&nv50_bar_func, device, type, inst, 0x1400, pbar); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.h b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.h index e4193deb2e51..dedee9394079 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.h @@ -16,7 +16,7 @@ struct nv50_bar { struct nvkm_gpuobj *bar2; }; -int nv50_bar_new_(const struct nvkm_bar_func *, struct nvkm_device *, +int nv50_bar_new_(const struct nvkm_bar_func *, struct nvkm_device *, enum nvkm_subdev_type, int, u32 pgd_addr, struct nvkm_bar **); void *nv50_bar_dtor(struct nvkm_bar *); int nv50_bar_oneinit(struct nvkm_bar *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/priv.h index 869ad184f923..daebfc991c76 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/priv.h @@ -5,7 +5,7 @@ #include void nvkm_bar_ctor(const struct nvkm_bar_func *, struct nvkm_device *, - int, struct nvkm_bar *); + enum nvkm_subdev_type, int, struct nvkm_bar *); struct nvkm_bar_func { void *(*dtor)(struct nvkm_bar *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.c index 798f65ec3a86..c25ab407b85d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.c @@ -92,7 +92,8 @@ tu102_bar = { }; int -tu102_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) +tu102_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bar **pbar) { - return gf100_bar_new_(&tu102_bar, device, index, pbar); + return gf100_bar_new_(&tu102_bar, device, type, inst, pbar); } From e07f50d3558a83b5c92a7b768447a092a282472c Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 10:49:00 +1000 Subject: [PATCH 19/87] drm/nouveau/bios: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/bios.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 171 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/bios/base.c | 5 +- 6 files changed, 90 insertions(+), 92 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 7ef3d99f3939..b1872fa3b883 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_bios *bios; struct nvkm_bus *bus; struct nvkm_clk *clk; struct nvkm_devinit *devinit; @@ -146,7 +145,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*bios )(struct nvkm_device *, int idx, struct nvkm_bios **); int (*bus )(struct nvkm_device *, int idx, struct nvkm_bus **); int (*clk )(struct nvkm_device *, int idx, struct nvkm_clk **); int (*devinit )(struct nvkm_device *, int idx, struct nvkm_devinit **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index dea9dd519881..73252f0ef604 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1,3 +1,4 @@ /* SPDX-License-Identifier: MIT */ +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios.h index f2860f8e0c2e..b61cfb077533 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios.h @@ -30,5 +30,5 @@ u8 nvbios_rd08(struct nvkm_bios *, u32 addr); u16 nvbios_rd16(struct nvkm_bios *, u32 addr); u32 nvbios_rd32(struct nvkm_bios *, u32 addr); -int nvkm_bios_new(struct nvkm_device *, int, struct nvkm_bios **); +int nvkm_bios_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_bios **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index f5e76986de4b..5e13e09baf29 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_VBIOS ] = "bios", [NVKM_SUBDEV_BUS ] = "bus", [NVKM_SUBDEV_CLK ] = "clk", [NVKM_SUBDEV_DEVINIT ] = "devinit", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index b4f5e6c837f4..ff3539799750 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -71,13 +71,13 @@ nvkm_device_list(u64 *name, int size) static const struct nvkm_device_chip null_chipset = { .name = "NULL", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, }; static const struct nvkm_device_chip nv4_chipset = { .name = "NV04", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv04_devinit_new, @@ -98,7 +98,7 @@ nv4_chipset = { static const struct nvkm_device_chip nv5_chipset = { .name = "NV05", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv05_devinit_new, @@ -119,7 +119,7 @@ nv5_chipset = { static const struct nvkm_device_chip nv10_chipset = { .name = "NV10", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv10_devinit_new, @@ -139,7 +139,7 @@ nv10_chipset = { static const struct nvkm_device_chip nv11_chipset = { .name = "NV11", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv10_devinit_new, @@ -161,7 +161,7 @@ nv11_chipset = { static const struct nvkm_device_chip nv15_chipset = { .name = "NV15", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv10_devinit_new, @@ -183,7 +183,7 @@ nv15_chipset = { static const struct nvkm_device_chip nv17_chipset = { .name = "NV17", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv10_devinit_new, @@ -205,7 +205,7 @@ nv17_chipset = { static const struct nvkm_device_chip nv18_chipset = { .name = "NV18", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv10_devinit_new, @@ -227,7 +227,7 @@ nv18_chipset = { static const struct nvkm_device_chip nv1a_chipset = { .name = "nForce", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv1a_devinit_new, @@ -249,7 +249,7 @@ nv1a_chipset = { static const struct nvkm_device_chip nv1f_chipset = { .name = "nForce2", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv1a_devinit_new, @@ -271,7 +271,7 @@ nv1f_chipset = { static const struct nvkm_device_chip nv20_chipset = { .name = "NV20", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv20_devinit_new, @@ -293,7 +293,7 @@ nv20_chipset = { static const struct nvkm_device_chip nv25_chipset = { .name = "NV25", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv20_devinit_new, @@ -315,7 +315,7 @@ nv25_chipset = { static const struct nvkm_device_chip nv28_chipset = { .name = "NV28", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv20_devinit_new, @@ -337,7 +337,7 @@ nv28_chipset = { static const struct nvkm_device_chip nv2a_chipset = { .name = "NV2A", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv20_devinit_new, @@ -359,7 +359,7 @@ nv2a_chipset = { static const struct nvkm_device_chip nv30_chipset = { .name = "NV30", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv20_devinit_new, @@ -381,7 +381,7 @@ nv30_chipset = { static const struct nvkm_device_chip nv31_chipset = { .name = "NV31", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv04_clk_new, .devinit = nv20_devinit_new, @@ -404,7 +404,7 @@ nv31_chipset = { static const struct nvkm_device_chip nv34_chipset = { .name = "NV34", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv04_clk_new, .devinit = nv10_devinit_new, @@ -427,7 +427,7 @@ nv34_chipset = { static const struct nvkm_device_chip nv35_chipset = { .name = "NV35", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv04_bus_new, .clk = nv04_clk_new, .devinit = nv20_devinit_new, @@ -449,7 +449,7 @@ nv35_chipset = { static const struct nvkm_device_chip nv36_chipset = { .name = "NV36", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv04_clk_new, .devinit = nv20_devinit_new, @@ -472,7 +472,7 @@ nv36_chipset = { static const struct nvkm_device_chip nv40_chipset = { .name = "NV40", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -498,7 +498,7 @@ nv40_chipset = { static const struct nvkm_device_chip nv41_chipset = { .name = "NV41", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -524,7 +524,7 @@ nv41_chipset = { static const struct nvkm_device_chip nv42_chipset = { .name = "NV42", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -550,7 +550,7 @@ nv42_chipset = { static const struct nvkm_device_chip nv43_chipset = { .name = "NV43", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -576,7 +576,7 @@ nv43_chipset = { static const struct nvkm_device_chip nv44_chipset = { .name = "NV44", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -602,7 +602,7 @@ nv44_chipset = { static const struct nvkm_device_chip nv45_chipset = { .name = "NV45", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -628,7 +628,7 @@ nv45_chipset = { static const struct nvkm_device_chip nv46_chipset = { .name = "G72", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -654,7 +654,7 @@ nv46_chipset = { static const struct nvkm_device_chip nv47_chipset = { .name = "G70", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -680,7 +680,7 @@ nv47_chipset = { static const struct nvkm_device_chip nv49_chipset = { .name = "G71", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -706,7 +706,7 @@ nv49_chipset = { static const struct nvkm_device_chip nv4a_chipset = { .name = "NV44A", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -732,7 +732,7 @@ nv4a_chipset = { static const struct nvkm_device_chip nv4b_chipset = { .name = "G73", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -758,7 +758,7 @@ nv4b_chipset = { static const struct nvkm_device_chip nv4c_chipset = { .name = "C61", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -784,7 +784,7 @@ nv4c_chipset = { static const struct nvkm_device_chip nv4e_chipset = { .name = "C51", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -811,7 +811,7 @@ static const struct nvkm_device_chip nv50_chipset = { .name = "G80", .bar = { 0x00000001, nv50_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv50_bus_new, .clk = nv50_clk_new, .devinit = nv50_devinit_new, @@ -839,7 +839,7 @@ nv50_chipset = { static const struct nvkm_device_chip nv63_chipset = { .name = "C73", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -865,7 +865,7 @@ nv63_chipset = { static const struct nvkm_device_chip nv67_chipset = { .name = "C67", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -891,7 +891,7 @@ nv67_chipset = { static const struct nvkm_device_chip nv68_chipset = { .name = "C68", - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv31_bus_new, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, @@ -918,7 +918,7 @@ static const struct nvkm_device_chip nv84_chipset = { .name = "G84", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv50_bus_new, .clk = g84_clk_new, .devinit = g84_devinit_new, @@ -950,7 +950,7 @@ static const struct nvkm_device_chip nv86_chipset = { .name = "G86", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv50_bus_new, .clk = g84_clk_new, .devinit = g84_devinit_new, @@ -982,7 +982,7 @@ static const struct nvkm_device_chip nv92_chipset = { .name = "G92", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = nv50_bus_new, .clk = g84_clk_new, .devinit = g84_devinit_new, @@ -1014,7 +1014,7 @@ static const struct nvkm_device_chip nv94_chipset = { .name = "G94", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = g84_clk_new, .devinit = g84_devinit_new, @@ -1046,7 +1046,7 @@ static const struct nvkm_device_chip nv96_chipset = { .name = "G96", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = g84_clk_new, .devinit = g84_devinit_new, @@ -1078,7 +1078,7 @@ static const struct nvkm_device_chip nv98_chipset = { .name = "G98", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = g84_clk_new, .devinit = g98_devinit_new, @@ -1110,7 +1110,7 @@ static const struct nvkm_device_chip nva0_chipset = { .name = "GT200", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = g84_clk_new, .devinit = g84_devinit_new, @@ -1142,7 +1142,7 @@ static const struct nvkm_device_chip nva3_chipset = { .name = "GT215", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = gt215_clk_new, .devinit = gt215_devinit_new, @@ -1176,7 +1176,7 @@ static const struct nvkm_device_chip nva5_chipset = { .name = "GT216", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = gt215_clk_new, .devinit = gt215_devinit_new, @@ -1209,7 +1209,7 @@ static const struct nvkm_device_chip nva8_chipset = { .name = "GT218", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = gt215_clk_new, .devinit = gt215_devinit_new, @@ -1242,7 +1242,7 @@ static const struct nvkm_device_chip nvaa_chipset = { .name = "MCP77/MCP78", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = mcp77_clk_new, .devinit = g98_devinit_new, @@ -1274,7 +1274,7 @@ static const struct nvkm_device_chip nvac_chipset = { .name = "MCP79/MCP7A", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = mcp77_clk_new, .devinit = g98_devinit_new, @@ -1306,7 +1306,7 @@ static const struct nvkm_device_chip nvaf_chipset = { .name = "MCP89", .bar = { 0x00000001, g84_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = g94_bus_new, .clk = gt215_clk_new, .devinit = mcp89_devinit_new, @@ -1339,7 +1339,7 @@ static const struct nvkm_device_chip nvc0_chipset = { .name = "GF100", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1376,7 +1376,7 @@ static const struct nvkm_device_chip nvc1_chipset = { .name = "GF108", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1412,7 +1412,7 @@ static const struct nvkm_device_chip nvc3_chipset = { .name = "GF106", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1448,7 +1448,7 @@ static const struct nvkm_device_chip nvc4_chipset = { .name = "GF104", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1485,7 +1485,7 @@ static const struct nvkm_device_chip nvc8_chipset = { .name = "GF110", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1522,7 +1522,7 @@ static const struct nvkm_device_chip nvce_chipset = { .name = "GF114", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1559,7 +1559,7 @@ static const struct nvkm_device_chip nvcf_chipset = { .name = "GF116", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1595,7 +1595,7 @@ static const struct nvkm_device_chip nvd7_chipset = { .name = "GF117", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1630,7 +1630,7 @@ static const struct nvkm_device_chip nvd9_chipset = { .name = "GF119", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gf100_clk_new, .devinit = gf100_devinit_new, @@ -1666,7 +1666,7 @@ static const struct nvkm_device_chip nve4_chipset = { .name = "GK104", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gf100_devinit_new, @@ -1705,7 +1705,7 @@ static const struct nvkm_device_chip nve6_chipset = { .name = "GK106", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gf100_devinit_new, @@ -1744,7 +1744,7 @@ static const struct nvkm_device_chip nve7_chipset = { .name = "GK107", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gf100_devinit_new, @@ -1808,7 +1808,7 @@ static const struct nvkm_device_chip nvf0_chipset = { .name = "GK110", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gf100_devinit_new, @@ -1846,7 +1846,7 @@ static const struct nvkm_device_chip nvf1_chipset = { .name = "GK110B", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gf100_devinit_new, @@ -1884,7 +1884,7 @@ static const struct nvkm_device_chip nv106_chipset = { .name = "GK208B", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gf100_devinit_new, @@ -1922,7 +1922,7 @@ static const struct nvkm_device_chip nv108_chipset = { .name = "GK208", .bar = { 0x00000001, gf100_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gf100_devinit_new, @@ -1960,7 +1960,7 @@ static const struct nvkm_device_chip nv117_chipset = { .name = "GM107", .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gm107_devinit_new, @@ -1996,7 +1996,7 @@ static const struct nvkm_device_chip nv118_chipset = { .name = "GM108", .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .clk = gk104_clk_new, .devinit = gm107_devinit_new, @@ -2031,7 +2031,7 @@ nv120_chipset = { .name = "GM200", .acr = { 0x00000001, gm200_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fb = gm200_fb_new, @@ -2069,7 +2069,7 @@ nv124_chipset = { .name = "GM204", .acr = { 0x00000001, gm200_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fb = gm200_fb_new, @@ -2107,7 +2107,7 @@ nv126_chipset = { .name = "GM206", .acr = { 0x00000001, gm200_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fb = gm200_fb_new, @@ -2169,7 +2169,7 @@ nv130_chipset = { .name = "GP100", .acr = { 0x00000001, gm200_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fault = gp100_fault_new, @@ -2209,7 +2209,7 @@ nv132_chipset = { .name = "GP102", .acr = { 0x00000001, gp102_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fault = gp100_fault_new, @@ -2247,7 +2247,7 @@ nv134_chipset = { .name = "GP104", .acr = { 0x00000001, gp102_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fault = gp100_fault_new, @@ -2285,7 +2285,7 @@ nv136_chipset = { .name = "GP106", .acr = { 0x00000001, gp102_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fault = gp100_fault_new, @@ -2322,7 +2322,7 @@ nv137_chipset = { .name = "GP107", .acr = { 0x00000001, gp102_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fault = gp100_fault_new, @@ -2360,7 +2360,7 @@ nv138_chipset = { .name = "GP108", .acr = { 0x00000001, gp108_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gm200_devinit_new, .fault = gp100_fault_new, @@ -2420,7 +2420,7 @@ nv140_chipset = { .name = "GV100", .acr = { 0x00000001, gp108_acr_new }, .bar = { 0x00000001, gm107_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = gv100_devinit_new, .fault = gv100_fault_new, @@ -2464,7 +2464,7 @@ nv162_chipset = { .name = "TU102", .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = tu102_devinit_new, .fault = tu102_fault_new, @@ -2502,7 +2502,7 @@ nv164_chipset = { .name = "TU104", .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = tu102_devinit_new, .fault = tu102_fault_new, @@ -2541,7 +2541,7 @@ nv166_chipset = { .name = "TU106", .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = tu102_devinit_new, .fault = tu102_fault_new, @@ -2581,7 +2581,7 @@ nv167_chipset = { .name = "TU117", .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = tu102_devinit_new, .fault = tu102_fault_new, @@ -2619,7 +2619,7 @@ nv168_chipset = { .name = "TU116", .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .bus = gf100_bus_new, .devinit = tu102_devinit_new, .fault = tu102_fault_new, @@ -2656,7 +2656,7 @@ static const struct nvkm_device_chip nv170_chipset = { .name = "GA100", .bar = { 0x00000001, tu102_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .devinit = ga100_devinit_new, .fb = ga100_fb_new, .gpio = gk104_gpio_new, @@ -2673,7 +2673,7 @@ static const struct nvkm_device_chip nv172_chipset = { .name = "GA102", .bar = { 0x00000001, tu102_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .devinit = ga100_devinit_new, .fb = ga102_fb_new, .gpio = ga102_gpio_new, @@ -2692,7 +2692,7 @@ static const struct nvkm_device_chip nv174_chipset = { .name = "GA104", .bar = { 0x00000001, tu102_bar_new }, - .bios = nvkm_bios_new, + .bios = { 0x00000001, nvkm_bios_new }, .devinit = ga100_devinit_new, .fb = ga102_fb_new, .gpio = ga102_gpio_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_VBIOS , bios); _(NVKM_SUBDEV_BUS , bus); _(NVKM_SUBDEV_CLK , clk); _(NVKM_SUBDEV_DEVINIT , devinit); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c index f3c30b2a788e..d0f52d59fc2f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c @@ -140,7 +140,8 @@ nvkm_bios = { }; int -nvkm_bios_new(struct nvkm_device *device, int index, struct nvkm_bios **pbios) +nvkm_bios_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bios **pbios) { struct nvkm_bios *bios; struct nvbios_image image; @@ -149,7 +150,7 @@ nvkm_bios_new(struct nvkm_device *device, int index, struct nvkm_bios **pbios) if (!(bios = *pbios = kzalloc(sizeof(*bios), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_bios, device, index, &bios->subdev); + nvkm_subdev_ctor(&nvkm_bios, device, type, inst, &bios->subdev); ret = nvbios_shadow(bios); if (ret) From d37766e560c9a8cf4fd428da8d2a0cbe9ad2c2d4 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 10:52:28 +1000 Subject: [PATCH 20/87] drm/nouveau/bus: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/bus.h | 10 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 169 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/bus/base.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bus/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bus/nv04.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bus/nv31.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bus/nv50.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/bus/priv.h | 2 +- 12 files changed, 108 insertions(+), 106 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index b1872fa3b883..17ea654a8a01 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_bus *bus; struct nvkm_clk *clk; struct nvkm_devinit *devinit; struct nvkm_fault *fault; @@ -145,7 +144,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*bus )(struct nvkm_device *, int idx, struct nvkm_bus **); int (*clk )(struct nvkm_device *, int idx, struct nvkm_clk **); int (*devinit )(struct nvkm_device *, int idx, struct nvkm_devinit **); int (*fault )(struct nvkm_device *, int idx, struct nvkm_fault **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 73252f0ef604..5bdc836642c6 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1,4 +1,5 @@ /* SPDX-License-Identifier: MIT */ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bus.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bus.h index ae9ad6c034fb..2ac03bbc6133 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bus.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bus.h @@ -18,9 +18,9 @@ void nvkm_hwsq_wait(struct nvkm_hwsq *, u8 flag, u8 data); void nvkm_hwsq_wait_vblank(struct nvkm_hwsq *); void nvkm_hwsq_nsec(struct nvkm_hwsq *, u32 nsec); -int nv04_bus_new(struct nvkm_device *, int, struct nvkm_bus **); -int nv31_bus_new(struct nvkm_device *, int, struct nvkm_bus **); -int nv50_bus_new(struct nvkm_device *, int, struct nvkm_bus **); -int g94_bus_new(struct nvkm_device *, int, struct nvkm_bus **); -int gf100_bus_new(struct nvkm_device *, int, struct nvkm_bus **); +int nv04_bus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bus **); +int nv31_bus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bus **); +int nv50_bus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bus **); +int g94_bus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bus **); +int gf100_bus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bus **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 5e13e09baf29..bb2d88bf0edf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_BUS ] = "bus", [NVKM_SUBDEV_CLK ] = "clk", [NVKM_SUBDEV_DEVINIT ] = "devinit", [NVKM_SUBDEV_FAULT ] = "fault", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index ff3539799750..5368df219739 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -78,7 +78,7 @@ static const struct nvkm_device_chip nv4_chipset = { .name = "NV04", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv04_devinit_new, .fb = nv04_fb_new, @@ -99,7 +99,7 @@ static const struct nvkm_device_chip nv5_chipset = { .name = "NV05", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv05_devinit_new, .fb = nv04_fb_new, @@ -120,7 +120,7 @@ static const struct nvkm_device_chip nv10_chipset = { .name = "NV10", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv10_devinit_new, .fb = nv10_fb_new, @@ -140,7 +140,7 @@ static const struct nvkm_device_chip nv11_chipset = { .name = "NV11", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv10_devinit_new, .fb = nv10_fb_new, @@ -162,7 +162,7 @@ static const struct nvkm_device_chip nv15_chipset = { .name = "NV15", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv10_devinit_new, .fb = nv10_fb_new, @@ -184,7 +184,7 @@ static const struct nvkm_device_chip nv17_chipset = { .name = "NV17", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv10_devinit_new, .fb = nv10_fb_new, @@ -206,7 +206,7 @@ static const struct nvkm_device_chip nv18_chipset = { .name = "NV18", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv10_devinit_new, .fb = nv10_fb_new, @@ -228,7 +228,7 @@ static const struct nvkm_device_chip nv1a_chipset = { .name = "nForce", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv1a_devinit_new, .fb = nv1a_fb_new, @@ -250,7 +250,7 @@ static const struct nvkm_device_chip nv1f_chipset = { .name = "nForce2", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv1a_devinit_new, .fb = nv1a_fb_new, @@ -272,7 +272,7 @@ static const struct nvkm_device_chip nv20_chipset = { .name = "NV20", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv20_devinit_new, .fb = nv20_fb_new, @@ -294,7 +294,7 @@ static const struct nvkm_device_chip nv25_chipset = { .name = "NV25", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv20_devinit_new, .fb = nv25_fb_new, @@ -316,7 +316,7 @@ static const struct nvkm_device_chip nv28_chipset = { .name = "NV28", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv20_devinit_new, .fb = nv25_fb_new, @@ -338,7 +338,7 @@ static const struct nvkm_device_chip nv2a_chipset = { .name = "NV2A", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv20_devinit_new, .fb = nv25_fb_new, @@ -360,7 +360,7 @@ static const struct nvkm_device_chip nv30_chipset = { .name = "NV30", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv20_devinit_new, .fb = nv30_fb_new, @@ -382,7 +382,7 @@ static const struct nvkm_device_chip nv31_chipset = { .name = "NV31", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv04_clk_new, .devinit = nv20_devinit_new, .fb = nv30_fb_new, @@ -405,7 +405,7 @@ static const struct nvkm_device_chip nv34_chipset = { .name = "NV34", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv04_clk_new, .devinit = nv10_devinit_new, .fb = nv10_fb_new, @@ -428,7 +428,7 @@ static const struct nvkm_device_chip nv35_chipset = { .name = "NV35", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv04_bus_new, + .bus = { 0x00000001, nv04_bus_new }, .clk = nv04_clk_new, .devinit = nv20_devinit_new, .fb = nv35_fb_new, @@ -450,7 +450,7 @@ static const struct nvkm_device_chip nv36_chipset = { .name = "NV36", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv04_clk_new, .devinit = nv20_devinit_new, .fb = nv36_fb_new, @@ -473,7 +473,7 @@ static const struct nvkm_device_chip nv40_chipset = { .name = "NV40", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv40_fb_new, @@ -499,7 +499,7 @@ static const struct nvkm_device_chip nv41_chipset = { .name = "NV41", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv41_fb_new, @@ -525,7 +525,7 @@ static const struct nvkm_device_chip nv42_chipset = { .name = "NV42", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv41_fb_new, @@ -551,7 +551,7 @@ static const struct nvkm_device_chip nv43_chipset = { .name = "NV43", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv41_fb_new, @@ -577,7 +577,7 @@ static const struct nvkm_device_chip nv44_chipset = { .name = "NV44", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv44_fb_new, @@ -603,7 +603,7 @@ static const struct nvkm_device_chip nv45_chipset = { .name = "NV45", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv40_fb_new, @@ -629,7 +629,7 @@ static const struct nvkm_device_chip nv46_chipset = { .name = "G72", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, @@ -655,7 +655,7 @@ static const struct nvkm_device_chip nv47_chipset = { .name = "G70", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv47_fb_new, @@ -681,7 +681,7 @@ static const struct nvkm_device_chip nv49_chipset = { .name = "G71", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv49_fb_new, @@ -707,7 +707,7 @@ static const struct nvkm_device_chip nv4a_chipset = { .name = "NV44A", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv44_fb_new, @@ -733,7 +733,7 @@ static const struct nvkm_device_chip nv4b_chipset = { .name = "G73", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv49_fb_new, @@ -759,7 +759,7 @@ static const struct nvkm_device_chip nv4c_chipset = { .name = "C61", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, @@ -785,7 +785,7 @@ static const struct nvkm_device_chip nv4e_chipset = { .name = "C51", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv4e_fb_new, @@ -812,7 +812,7 @@ nv50_chipset = { .name = "G80", .bar = { 0x00000001, nv50_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv50_bus_new, + .bus = { 0x00000001, nv50_bus_new }, .clk = nv50_clk_new, .devinit = nv50_devinit_new, .fb = nv50_fb_new, @@ -840,7 +840,7 @@ static const struct nvkm_device_chip nv63_chipset = { .name = "C73", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, @@ -866,7 +866,7 @@ static const struct nvkm_device_chip nv67_chipset = { .name = "C67", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, @@ -892,7 +892,7 @@ static const struct nvkm_device_chip nv68_chipset = { .name = "C68", .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv31_bus_new, + .bus = { 0x00000001, nv31_bus_new }, .clk = nv40_clk_new, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, @@ -919,7 +919,7 @@ nv84_chipset = { .name = "G84", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv50_bus_new, + .bus = { 0x00000001, nv50_bus_new }, .clk = g84_clk_new, .devinit = g84_devinit_new, .fb = g84_fb_new, @@ -951,7 +951,7 @@ nv86_chipset = { .name = "G86", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv50_bus_new, + .bus = { 0x00000001, nv50_bus_new }, .clk = g84_clk_new, .devinit = g84_devinit_new, .fb = g84_fb_new, @@ -983,7 +983,7 @@ nv92_chipset = { .name = "G92", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = nv50_bus_new, + .bus = { 0x00000001, nv50_bus_new }, .clk = g84_clk_new, .devinit = g84_devinit_new, .fb = g84_fb_new, @@ -1015,7 +1015,7 @@ nv94_chipset = { .name = "G94", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = g84_clk_new, .devinit = g84_devinit_new, .fb = g84_fb_new, @@ -1047,7 +1047,7 @@ nv96_chipset = { .name = "G96", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = g84_clk_new, .devinit = g84_devinit_new, .fb = g84_fb_new, @@ -1079,7 +1079,7 @@ nv98_chipset = { .name = "G98", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = g84_clk_new, .devinit = g98_devinit_new, .fb = g84_fb_new, @@ -1111,7 +1111,7 @@ nva0_chipset = { .name = "GT200", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = g84_clk_new, .devinit = g84_devinit_new, .fb = g84_fb_new, @@ -1143,7 +1143,7 @@ nva3_chipset = { .name = "GT215", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = gt215_clk_new, .devinit = gt215_devinit_new, .fb = gt215_fb_new, @@ -1177,7 +1177,7 @@ nva5_chipset = { .name = "GT216", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = gt215_clk_new, .devinit = gt215_devinit_new, .fb = gt215_fb_new, @@ -1210,7 +1210,7 @@ nva8_chipset = { .name = "GT218", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = gt215_clk_new, .devinit = gt215_devinit_new, .fb = gt215_fb_new, @@ -1243,7 +1243,7 @@ nvaa_chipset = { .name = "MCP77/MCP78", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = mcp77_clk_new, .devinit = g98_devinit_new, .fb = mcp77_fb_new, @@ -1275,7 +1275,7 @@ nvac_chipset = { .name = "MCP79/MCP7A", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = mcp77_clk_new, .devinit = g98_devinit_new, .fb = mcp77_fb_new, @@ -1307,7 +1307,7 @@ nvaf_chipset = { .name = "MCP89", .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = g94_bus_new, + .bus = { 0x00000001, g94_bus_new }, .clk = gt215_clk_new, .devinit = mcp89_devinit_new, .fb = mcp89_fb_new, @@ -1340,7 +1340,7 @@ nvc0_chipset = { .name = "GF100", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf100_fb_new, @@ -1377,7 +1377,7 @@ nvc1_chipset = { .name = "GF108", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf108_fb_new, @@ -1413,7 +1413,7 @@ nvc3_chipset = { .name = "GF106", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf100_fb_new, @@ -1449,7 +1449,7 @@ nvc4_chipset = { .name = "GF104", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf100_fb_new, @@ -1486,7 +1486,7 @@ nvc8_chipset = { .name = "GF110", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf100_fb_new, @@ -1523,7 +1523,7 @@ nvce_chipset = { .name = "GF114", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf100_fb_new, @@ -1560,7 +1560,7 @@ nvcf_chipset = { .name = "GF116", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf100_fb_new, @@ -1596,7 +1596,7 @@ nvd7_chipset = { .name = "GF117", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf100_fb_new, @@ -1631,7 +1631,7 @@ nvd9_chipset = { .name = "GF119", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gf100_clk_new, .devinit = gf100_devinit_new, .fb = gf100_fb_new, @@ -1667,7 +1667,7 @@ nve4_chipset = { .name = "GK104", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gf100_devinit_new, .fb = gk104_fb_new, @@ -1706,7 +1706,7 @@ nve6_chipset = { .name = "GK106", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gf100_devinit_new, .fb = gk104_fb_new, @@ -1745,7 +1745,7 @@ nve7_chipset = { .name = "GK107", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gf100_devinit_new, .fb = gk104_fb_new, @@ -1783,7 +1783,7 @@ static const struct nvkm_device_chip nvea_chipset = { .name = "GK20A", .bar = { 0x00000001, gk20a_bar_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk20a_clk_new, .fb = gk20a_fb_new, .fuse = gf100_fuse_new, @@ -1809,7 +1809,7 @@ nvf0_chipset = { .name = "GK110", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gf100_devinit_new, .fb = gk110_fb_new, @@ -1847,7 +1847,7 @@ nvf1_chipset = { .name = "GK110B", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gf100_devinit_new, .fb = gk110_fb_new, @@ -1885,7 +1885,7 @@ nv106_chipset = { .name = "GK208B", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gf100_devinit_new, .fb = gk110_fb_new, @@ -1923,7 +1923,7 @@ nv108_chipset = { .name = "GK208", .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gf100_devinit_new, .fb = gk110_fb_new, @@ -1961,7 +1961,7 @@ nv117_chipset = { .name = "GM107", .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gm107_devinit_new, .fb = gm107_fb_new, @@ -1997,7 +1997,7 @@ nv118_chipset = { .name = "GM108", .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gk104_clk_new, .devinit = gm107_devinit_new, .fb = gm107_fb_new, @@ -2032,7 +2032,7 @@ nv120_chipset = { .acr = { 0x00000001, gm200_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fb = gm200_fb_new, .fuse = gm107_fuse_new, @@ -2070,7 +2070,7 @@ nv124_chipset = { .acr = { 0x00000001, gm200_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fb = gm200_fb_new, .fuse = gm107_fuse_new, @@ -2108,7 +2108,7 @@ nv126_chipset = { .acr = { 0x00000001, gm200_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fb = gm200_fb_new, .fuse = gm107_fuse_new, @@ -2144,7 +2144,7 @@ nv12b_chipset = { .name = "GM20B", .acr = { 0x00000001, gm20b_acr_new }, .bar = { 0x00000001, gm20b_bar_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .clk = gm20b_clk_new, .fb = gm20b_fb_new, .fuse = gm107_fuse_new, @@ -2170,7 +2170,7 @@ nv130_chipset = { .acr = { 0x00000001, gm200_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fault = gp100_fault_new, .fb = gp100_fb_new, @@ -2210,7 +2210,7 @@ nv132_chipset = { .acr = { 0x00000001, gp102_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fault = gp100_fault_new, .fb = gp102_fb_new, @@ -2248,7 +2248,7 @@ nv134_chipset = { .acr = { 0x00000001, gp102_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fault = gp100_fault_new, .fb = gp102_fb_new, @@ -2286,7 +2286,7 @@ nv136_chipset = { .acr = { 0x00000001, gp102_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fault = gp100_fault_new, .fb = gp102_fb_new, @@ -2323,7 +2323,7 @@ nv137_chipset = { .acr = { 0x00000001, gp102_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fault = gp100_fault_new, .fb = gp102_fb_new, @@ -2361,7 +2361,7 @@ nv138_chipset = { .acr = { 0x00000001, gp108_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gm200_devinit_new, .fault = gp100_fault_new, .fb = gp102_fb_new, @@ -2396,7 +2396,7 @@ nv13b_chipset = { .name = "GP10B", .acr = { 0x00000001, gp10b_acr_new }, .bar = { 0x00000001, gm20b_bar_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .fault = gp10b_fault_new, .fb = gp10b_fb_new, .fuse = gm107_fuse_new, @@ -2421,7 +2421,7 @@ nv140_chipset = { .acr = { 0x00000001, gp108_acr_new }, .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = gv100_devinit_new, .fault = gv100_fault_new, .fb = gv100_fb_new, @@ -2465,7 +2465,7 @@ nv162_chipset = { .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = tu102_devinit_new, .fault = tu102_fault_new, .fb = gv100_fb_new, @@ -2503,7 +2503,7 @@ nv164_chipset = { .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = tu102_devinit_new, .fault = tu102_fault_new, .fb = gv100_fb_new, @@ -2542,7 +2542,7 @@ nv166_chipset = { .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = tu102_devinit_new, .fault = tu102_fault_new, .fb = gv100_fb_new, @@ -2582,7 +2582,7 @@ nv167_chipset = { .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = tu102_devinit_new, .fault = tu102_fault_new, .fb = gv100_fb_new, @@ -2620,7 +2620,7 @@ nv168_chipset = { .acr = { 0x00000001, tu102_acr_new }, .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .bus = gf100_bus_new, + .bus = { 0x00000001, gf100_bus_new }, .devinit = tu102_devinit_new, .fault = tu102_fault_new, .fb = gv100_fb_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_BUS , bus); _(NVKM_SUBDEV_CLK , clk); _(NVKM_SUBDEV_DEVINIT , devinit); _(NVKM_SUBDEV_FAULT , fault); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.c index 52ad73bce5fe..0e5a46db52ea 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.c @@ -53,12 +53,12 @@ nvkm_bus = { int nvkm_bus_new_(const struct nvkm_bus_func *func, struct nvkm_device *device, - int index, struct nvkm_bus **pbus) + enum nvkm_subdev_type type, int inst, struct nvkm_bus **pbus) { struct nvkm_bus *bus; if (!(bus = *pbus = kzalloc(sizeof(*bus), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_bus, device, index, &bus->subdev); + nvkm_subdev_ctor(&nvkm_bus, device, type, inst, &bus->subdev); bus->func = func; return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.c index 9700b5c01cc6..a0d6e2d3f804 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.c @@ -58,7 +58,8 @@ g94_bus = { }; int -g94_bus_new(struct nvkm_device *device, int index, struct nvkm_bus **pbus) +g94_bus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bus **pbus) { - return nvkm_bus_new_(&g94_bus, device, index, pbus); + return nvkm_bus_new_(&g94_bus, device, type, inst, pbus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.c index e0930d5fdfb1..7f35bb87445d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.c @@ -69,7 +69,8 @@ gf100_bus = { }; int -gf100_bus_new(struct nvkm_device *device, int index, struct nvkm_bus **pbus) +gf100_bus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bus **pbus) { - return nvkm_bus_new_(&gf100_bus, device, index, pbus); + return nvkm_bus_new_(&gf100_bus, device, type, inst, pbus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.c index 2b44ba5cf4b0..cfed17c062ea 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.c @@ -68,7 +68,8 @@ nv04_bus = { }; int -nv04_bus_new(struct nvkm_device *device, int index, struct nvkm_bus **pbus) +nv04_bus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bus **pbus) { - return nvkm_bus_new_(&nv04_bus, device, index, pbus); + return nvkm_bus_new_(&nv04_bus, device, type, inst, pbus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.c index 5153d89e1f0b..ad8da523bb22 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.c @@ -82,7 +82,8 @@ nv31_bus = { }; int -nv31_bus_new(struct nvkm_device *device, int index, struct nvkm_bus **pbus) +nv31_bus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bus **pbus) { - return nvkm_bus_new_(&nv31_bus, device, index, pbus); + return nvkm_bus_new_(&nv31_bus, device, type, inst, pbus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.c index 19e10fdc9291..3a1e45adeedc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.c @@ -99,7 +99,8 @@ nv50_bus = { }; int -nv50_bus_new(struct nvkm_device *device, int index, struct nvkm_bus **pbus) +nv50_bus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_bus **pbus) { - return nvkm_bus_new_(&nv50_bus, device, index, pbus); + return nvkm_bus_new_(&nv50_bus, device, type, inst, pbus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/priv.h index 76f7ba1c6494..2e9345b17cf8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/priv.h @@ -11,7 +11,7 @@ struct nvkm_bus_func { u32 hwsq_size; }; -int nvkm_bus_new_(const struct nvkm_bus_func *, struct nvkm_device *, int, +int nvkm_bus_new_(const struct nvkm_bus_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_bus **); void nv50_bus_init(struct nvkm_bus *); From 98fd7f83665a9294665b700c4eb0e670c296f1be Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 10:58:58 +1000 Subject: [PATCH 21/87] drm/nouveau/clk: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/clk.h | 20 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 137 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/clk/base.c | 8 +- drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.c | 6 +- .../gpu/drm/nouveau/nvkm/subdev/clk/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/clk/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c | 16 +- .../gpu/drm/nouveau/nvkm/subdev/clk/gk20a.h | 4 +- .../gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c | 17 +-- .../gpu/drm/nouveau/nvkm/subdev/clk/gt215.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/clk/nv04.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/clk/nv40.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/clk/nv50.c | 9 +- .../gpu/drm/nouveau/nvkm/subdev/clk/nv50.h | 2 +- .../gpu/drm/nouveau/nvkm/subdev/clk/priv.h | 4 +- 19 files changed, 128 insertions(+), 129 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 17ea654a8a01..42ae6c5cf0e1 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_clk *clk; struct nvkm_devinit *devinit; struct nvkm_fault *fault; struct nvkm_fb *fb; @@ -144,7 +143,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*clk )(struct nvkm_device *, int idx, struct nvkm_clk **); int (*devinit )(struct nvkm_device *, int idx, struct nvkm_devinit **); int (*fault )(struct nvkm_device *, int idx, struct nvkm_fault **); int (*fb )(struct nvkm_device *, int idx, struct nvkm_fb **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 5bdc836642c6..1b79b4e812ae 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -3,3 +3,4 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h index bf937e7dfd77..05b99c9e9a26 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h @@ -125,14 +125,14 @@ int nvkm_clk_astate(struct nvkm_clk *, int req, int rel, bool wait); int nvkm_clk_dstate(struct nvkm_clk *, int req, int rel); int nvkm_clk_tstate(struct nvkm_clk *, u8 temperature); -int nv04_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int nv40_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int nv50_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int g84_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int mcp77_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int gt215_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int gf100_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int gk104_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int gk20a_clk_new(struct nvkm_device *, int, struct nvkm_clk **); -int gm20b_clk_new(struct nvkm_device *, int, struct nvkm_clk **); +int nv04_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int nv40_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int nv50_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int g84_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int mcp77_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int gt215_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int gf100_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int gk104_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int gk20a_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); +int gm20b_clk_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_clk **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index bb2d88bf0edf..8f8853a5bac6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_CLK ] = "clk", [NVKM_SUBDEV_DEVINIT ] = "devinit", [NVKM_SUBDEV_FAULT ] = "fault", [NVKM_SUBDEV_FB ] = "fb", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 5368df219739..bb0aefc65f7e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -79,7 +79,7 @@ nv4_chipset = { .name = "NV04", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv04_devinit_new, .fb = nv04_fb_new, .i2c = nv04_i2c_new, @@ -100,7 +100,7 @@ nv5_chipset = { .name = "NV05", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv05_devinit_new, .fb = nv04_fb_new, .i2c = nv04_i2c_new, @@ -121,7 +121,7 @@ nv10_chipset = { .name = "NV10", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv10_devinit_new, .fb = nv10_fb_new, .gpio = nv10_gpio_new, @@ -141,7 +141,7 @@ nv11_chipset = { .name = "NV11", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv10_devinit_new, .fb = nv10_fb_new, .gpio = nv10_gpio_new, @@ -163,7 +163,7 @@ nv15_chipset = { .name = "NV15", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv10_devinit_new, .fb = nv10_fb_new, .gpio = nv10_gpio_new, @@ -185,7 +185,7 @@ nv17_chipset = { .name = "NV17", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv10_devinit_new, .fb = nv10_fb_new, .gpio = nv10_gpio_new, @@ -207,7 +207,7 @@ nv18_chipset = { .name = "NV18", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv10_devinit_new, .fb = nv10_fb_new, .gpio = nv10_gpio_new, @@ -229,7 +229,7 @@ nv1a_chipset = { .name = "nForce", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv1a_devinit_new, .fb = nv1a_fb_new, .gpio = nv10_gpio_new, @@ -251,7 +251,7 @@ nv1f_chipset = { .name = "nForce2", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv1a_devinit_new, .fb = nv1a_fb_new, .gpio = nv10_gpio_new, @@ -273,7 +273,7 @@ nv20_chipset = { .name = "NV20", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv20_devinit_new, .fb = nv20_fb_new, .gpio = nv10_gpio_new, @@ -295,7 +295,7 @@ nv25_chipset = { .name = "NV25", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv20_devinit_new, .fb = nv25_fb_new, .gpio = nv10_gpio_new, @@ -317,7 +317,7 @@ nv28_chipset = { .name = "NV28", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv20_devinit_new, .fb = nv25_fb_new, .gpio = nv10_gpio_new, @@ -339,7 +339,7 @@ nv2a_chipset = { .name = "NV2A", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv20_devinit_new, .fb = nv25_fb_new, .gpio = nv10_gpio_new, @@ -361,7 +361,7 @@ nv30_chipset = { .name = "NV30", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv20_devinit_new, .fb = nv30_fb_new, .gpio = nv10_gpio_new, @@ -383,7 +383,7 @@ nv31_chipset = { .name = "NV31", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv20_devinit_new, .fb = nv30_fb_new, .gpio = nv10_gpio_new, @@ -406,7 +406,7 @@ nv34_chipset = { .name = "NV34", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv10_devinit_new, .fb = nv10_fb_new, .gpio = nv10_gpio_new, @@ -429,7 +429,7 @@ nv35_chipset = { .name = "NV35", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv20_devinit_new, .fb = nv35_fb_new, .gpio = nv10_gpio_new, @@ -451,7 +451,7 @@ nv36_chipset = { .name = "NV36", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv04_clk_new, + .clk = { 0x00000001, nv04_clk_new }, .devinit = nv20_devinit_new, .fb = nv36_fb_new, .gpio = nv10_gpio_new, @@ -474,7 +474,7 @@ nv40_chipset = { .name = "NV40", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv40_fb_new, .gpio = nv10_gpio_new, @@ -500,7 +500,7 @@ nv41_chipset = { .name = "NV41", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv41_fb_new, .gpio = nv10_gpio_new, @@ -526,7 +526,7 @@ nv42_chipset = { .name = "NV42", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv41_fb_new, .gpio = nv10_gpio_new, @@ -552,7 +552,7 @@ nv43_chipset = { .name = "NV43", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv41_fb_new, .gpio = nv10_gpio_new, @@ -578,7 +578,7 @@ nv44_chipset = { .name = "NV44", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv44_fb_new, .gpio = nv10_gpio_new, @@ -604,7 +604,7 @@ nv45_chipset = { .name = "NV45", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv40_fb_new, .gpio = nv10_gpio_new, @@ -630,7 +630,7 @@ nv46_chipset = { .name = "G72", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, .gpio = nv10_gpio_new, @@ -656,7 +656,7 @@ nv47_chipset = { .name = "G70", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv47_fb_new, .gpio = nv10_gpio_new, @@ -682,7 +682,7 @@ nv49_chipset = { .name = "G71", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv49_fb_new, .gpio = nv10_gpio_new, @@ -708,7 +708,7 @@ nv4a_chipset = { .name = "NV44A", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv44_fb_new, .gpio = nv10_gpio_new, @@ -734,7 +734,7 @@ nv4b_chipset = { .name = "G73", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv49_fb_new, .gpio = nv10_gpio_new, @@ -760,7 +760,7 @@ nv4c_chipset = { .name = "C61", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, .gpio = nv10_gpio_new, @@ -786,7 +786,7 @@ nv4e_chipset = { .name = "C51", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv4e_fb_new, .gpio = nv10_gpio_new, @@ -813,7 +813,7 @@ nv50_chipset = { .bar = { 0x00000001, nv50_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv50_bus_new }, - .clk = nv50_clk_new, + .clk = { 0x00000001, nv50_clk_new }, .devinit = nv50_devinit_new, .fb = nv50_fb_new, .fuse = nv50_fuse_new, @@ -841,7 +841,7 @@ nv63_chipset = { .name = "C73", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, .gpio = nv10_gpio_new, @@ -867,7 +867,7 @@ nv67_chipset = { .name = "C67", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, .gpio = nv10_gpio_new, @@ -893,7 +893,7 @@ nv68_chipset = { .name = "C68", .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, - .clk = nv40_clk_new, + .clk = { 0x00000001, nv40_clk_new }, .devinit = nv1a_devinit_new, .fb = nv46_fb_new, .gpio = nv10_gpio_new, @@ -920,7 +920,7 @@ nv84_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv50_bus_new }, - .clk = g84_clk_new, + .clk = { 0x00000001, g84_clk_new }, .devinit = g84_devinit_new, .fb = g84_fb_new, .fuse = nv50_fuse_new, @@ -952,7 +952,7 @@ nv86_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv50_bus_new }, - .clk = g84_clk_new, + .clk = { 0x00000001, g84_clk_new }, .devinit = g84_devinit_new, .fb = g84_fb_new, .fuse = nv50_fuse_new, @@ -984,7 +984,7 @@ nv92_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv50_bus_new }, - .clk = g84_clk_new, + .clk = { 0x00000001, g84_clk_new }, .devinit = g84_devinit_new, .fb = g84_fb_new, .fuse = nv50_fuse_new, @@ -1016,7 +1016,7 @@ nv94_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = g84_clk_new, + .clk = { 0x00000001, g84_clk_new }, .devinit = g84_devinit_new, .fb = g84_fb_new, .fuse = nv50_fuse_new, @@ -1048,7 +1048,7 @@ nv96_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = g84_clk_new, + .clk = { 0x00000001, g84_clk_new }, .devinit = g84_devinit_new, .fb = g84_fb_new, .fuse = nv50_fuse_new, @@ -1080,7 +1080,7 @@ nv98_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = g84_clk_new, + .clk = { 0x00000001, g84_clk_new }, .devinit = g98_devinit_new, .fb = g84_fb_new, .fuse = nv50_fuse_new, @@ -1112,7 +1112,7 @@ nva0_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = g84_clk_new, + .clk = { 0x00000001, g84_clk_new }, .devinit = g84_devinit_new, .fb = g84_fb_new, .fuse = nv50_fuse_new, @@ -1144,7 +1144,7 @@ nva3_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = gt215_clk_new, + .clk = { 0x00000001, gt215_clk_new }, .devinit = gt215_devinit_new, .fb = gt215_fb_new, .fuse = nv50_fuse_new, @@ -1178,7 +1178,7 @@ nva5_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = gt215_clk_new, + .clk = { 0x00000001, gt215_clk_new }, .devinit = gt215_devinit_new, .fb = gt215_fb_new, .fuse = nv50_fuse_new, @@ -1211,7 +1211,7 @@ nva8_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = gt215_clk_new, + .clk = { 0x00000001, gt215_clk_new }, .devinit = gt215_devinit_new, .fb = gt215_fb_new, .fuse = nv50_fuse_new, @@ -1244,7 +1244,7 @@ nvaa_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = mcp77_clk_new, + .clk = { 0x00000001, mcp77_clk_new }, .devinit = g98_devinit_new, .fb = mcp77_fb_new, .fuse = nv50_fuse_new, @@ -1276,7 +1276,7 @@ nvac_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = mcp77_clk_new, + .clk = { 0x00000001, mcp77_clk_new }, .devinit = g98_devinit_new, .fb = mcp77_fb_new, .fuse = nv50_fuse_new, @@ -1308,7 +1308,7 @@ nvaf_chipset = { .bar = { 0x00000001, g84_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, - .clk = gt215_clk_new, + .clk = { 0x00000001, gt215_clk_new }, .devinit = mcp89_devinit_new, .fb = mcp89_fb_new, .fuse = nv50_fuse_new, @@ -1341,7 +1341,7 @@ nvc0_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf100_fb_new, .fuse = gf100_fuse_new, @@ -1378,7 +1378,7 @@ nvc1_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf108_fb_new, .fuse = gf100_fuse_new, @@ -1414,7 +1414,7 @@ nvc3_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf100_fb_new, .fuse = gf100_fuse_new, @@ -1450,7 +1450,7 @@ nvc4_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf100_fb_new, .fuse = gf100_fuse_new, @@ -1487,7 +1487,7 @@ nvc8_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf100_fb_new, .fuse = gf100_fuse_new, @@ -1524,7 +1524,7 @@ nvce_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf100_fb_new, .fuse = gf100_fuse_new, @@ -1561,7 +1561,7 @@ nvcf_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf100_fb_new, .fuse = gf100_fuse_new, @@ -1597,7 +1597,7 @@ nvd7_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf100_fb_new, .fuse = gf100_fuse_new, @@ -1632,7 +1632,7 @@ nvd9_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gf100_clk_new, + .clk = { 0x00000001, gf100_clk_new }, .devinit = gf100_devinit_new, .fb = gf100_fb_new, .fuse = gf100_fuse_new, @@ -1668,7 +1668,7 @@ nve4_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gf100_devinit_new, .fb = gk104_fb_new, .fuse = gf100_fuse_new, @@ -1707,7 +1707,7 @@ nve6_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gf100_devinit_new, .fb = gk104_fb_new, .fuse = gf100_fuse_new, @@ -1746,7 +1746,7 @@ nve7_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gf100_devinit_new, .fb = gk104_fb_new, .fuse = gf100_fuse_new, @@ -1784,7 +1784,7 @@ nvea_chipset = { .name = "GK20A", .bar = { 0x00000001, gk20a_bar_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk20a_clk_new, + .clk = { 0x00000001, gk20a_clk_new }, .fb = gk20a_fb_new, .fuse = gf100_fuse_new, .ibus = gk20a_ibus_new, @@ -1810,7 +1810,7 @@ nvf0_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gf100_devinit_new, .fb = gk110_fb_new, .fuse = gf100_fuse_new, @@ -1848,7 +1848,7 @@ nvf1_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gf100_devinit_new, .fb = gk110_fb_new, .fuse = gf100_fuse_new, @@ -1886,7 +1886,7 @@ nv106_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gf100_devinit_new, .fb = gk110_fb_new, .fuse = gf100_fuse_new, @@ -1924,7 +1924,7 @@ nv108_chipset = { .bar = { 0x00000001, gf100_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gf100_devinit_new, .fb = gk110_fb_new, .fuse = gf100_fuse_new, @@ -1962,7 +1962,7 @@ nv117_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gm107_devinit_new, .fb = gm107_fb_new, .fuse = gm107_fuse_new, @@ -1998,7 +1998,7 @@ nv118_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gk104_clk_new, + .clk = { 0x00000001, gk104_clk_new }, .devinit = gm107_devinit_new, .fb = gm107_fb_new, .fuse = gm107_fuse_new, @@ -2145,7 +2145,7 @@ nv12b_chipset = { .acr = { 0x00000001, gm20b_acr_new }, .bar = { 0x00000001, gm20b_bar_new }, .bus = { 0x00000001, gf100_bus_new }, - .clk = gm20b_clk_new, + .clk = { 0x00000001, gm20b_clk_new }, .fb = gm20b_fb_new, .fuse = gm107_fuse_new, .ibus = gk20a_ibus_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_CLK , clk); _(NVKM_SUBDEV_DEVINIT , devinit); _(NVKM_SUBDEV_FAULT , fault); _(NVKM_SUBDEV_FB , fb); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c index dc184e857f85..57199be082fd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c @@ -649,7 +649,7 @@ nvkm_clk = { int nvkm_clk_ctor(const struct nvkm_clk_func *func, struct nvkm_device *device, - int index, bool allow_reclock, struct nvkm_clk *clk) + enum nvkm_subdev_type type, int inst, bool allow_reclock, struct nvkm_clk *clk) { struct nvkm_subdev *subdev = &clk->subdev; struct nvkm_bios *bios = device->bios; @@ -657,7 +657,7 @@ nvkm_clk_ctor(const struct nvkm_clk_func *func, struct nvkm_device *device, const char *mode; struct nvbios_vpstate_header h; - nvkm_subdev_ctor(&nvkm_clk, device, index, subdev); + nvkm_subdev_ctor(&nvkm_clk, device, type, inst, subdev); if (bios && !nvbios_vpstate_parse(bios, &h)) { struct nvbios_vpstate_entry base, boost; @@ -716,9 +716,9 @@ nvkm_clk_ctor(const struct nvkm_clk_func *func, struct nvkm_device *device, int nvkm_clk_new_(const struct nvkm_clk_func *func, struct nvkm_device *device, - int index, bool allow_reclock, struct nvkm_clk **pclk) + enum nvkm_subdev_type type, int inst, bool allow_reclock, struct nvkm_clk **pclk) { if (!(*pclk = kzalloc(sizeof(**pclk), GFP_KERNEL))) return -ENOMEM; - return nvkm_clk_ctor(func, device, index, allow_reclock, *pclk); + return nvkm_clk_ctor(func, device, type, inst, allow_reclock, *pclk); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.c index f97e3ec196bb..07157cf53c9e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.c @@ -41,8 +41,8 @@ g84_clk = { }; int -g84_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +g84_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { - return nv50_clk_new_(&g84_clk, device, index, - (device->chipset >= 0x94), pclk); + return nv50_clk_new_(&g84_clk, device, type, inst, (device->chipset >= 0x94), pclk); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c index 7f67f9f5a550..6eea11aefb70 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c @@ -468,7 +468,8 @@ gf100_clk = { }; int -gf100_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +gf100_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { struct gf100_clk *clk; @@ -476,5 +477,5 @@ gf100_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) return -ENOMEM; *pclk = &clk->base; - return nvkm_clk_ctor(&gf100_clk, device, index, false, &clk->base); + return nvkm_clk_ctor(&gf100_clk, device, type, inst, false, &clk->base); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c index 0b37e3da7feb..0d8e2ddcc5ee 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c @@ -504,7 +504,8 @@ gk104_clk = { }; int -gk104_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +gk104_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { struct gk104_clk *clk; @@ -512,5 +513,5 @@ gk104_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) return -ENOMEM; *pclk = &clk->base; - return nvkm_clk_ctor(&gk104_clk, device, index, true, &clk->base); + return nvkm_clk_ctor(&gk104_clk, device, type, inst, true, &clk->base); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c index 218893e3e5f9..d573fb0917fc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c @@ -610,10 +610,9 @@ gk20a_clk = { }; int -gk20a_clk_ctor(struct nvkm_device *device, int index, - const struct nvkm_clk_func *func, - const struct gk20a_clk_pllg_params *params, - struct gk20a_clk *clk) +gk20a_clk_ctor(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + const struct nvkm_clk_func *func, const struct gk20a_clk_pllg_params *params, + struct gk20a_clk *clk) { struct nvkm_device_tegra *tdev = device->func->tegra(device); int ret; @@ -628,7 +627,7 @@ gk20a_clk_ctor(struct nvkm_device *device, int index, clk->params = params; clk->parent_rate = clk_get_rate(tdev->clk); - ret = nvkm_clk_ctor(func, device, index, true, &clk->base); + ret = nvkm_clk_ctor(func, device, type, inst, true, &clk->base); if (ret) return ret; @@ -639,7 +638,8 @@ gk20a_clk_ctor(struct nvkm_device *device, int index, } int -gk20a_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +gk20a_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { struct gk20a_clk *clk; int ret; @@ -649,11 +649,9 @@ gk20a_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) return -ENOMEM; *pclk = &clk->base; - ret = gk20a_clk_ctor(device, index, &gk20a_clk, &gk20a_pllg_params, - clk); + ret = gk20a_clk_ctor(device, type, inst, &gk20a_clk, &gk20a_pllg_params, clk); clk->pl_to_div = pl_to_div; clk->div_to_pl = div_to_pl; - return ret; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.h b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.h index 0d1450972162..286413ff4a9e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.h @@ -146,8 +146,8 @@ gk20a_pllg_n_lo(struct gk20a_clk *clk, struct gk20a_pll *pll) clk->parent_rate / KHZ); } -int gk20a_clk_ctor(struct nvkm_device *, int, const struct nvkm_clk_func *, - const struct gk20a_clk_pllg_params *, struct gk20a_clk *); +int gk20a_clk_ctor(struct nvkm_device *, enum nvkm_subdev_type, int, const struct nvkm_clk_func *, + const struct gk20a_clk_pllg_params *, struct gk20a_clk *); void gk20a_clk_fini(struct nvkm_clk *); int gk20a_clk_read(struct nvkm_clk *, enum nv_clk_src); int gk20a_clk_calc(struct nvkm_clk *, struct nvkm_cstate *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c index b284e949f732..a139dafffe06 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.c @@ -908,7 +908,7 @@ gm20b_clk = { }; static int -gm20b_clk_new_speedo0(struct nvkm_device *device, int index, +gm20b_clk_new_speedo0(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_clk **pclk) { struct gk20a_clk *clk; @@ -919,12 +919,9 @@ gm20b_clk_new_speedo0(struct nvkm_device *device, int index, return -ENOMEM; *pclk = &clk->base; - ret = gk20a_clk_ctor(device, index, &gm20b_clk_speedo0, - &gm20b_pllg_params, clk); - + ret = gk20a_clk_ctor(device, type, inst, &gm20b_clk_speedo0, &gm20b_pllg_params, clk); clk->pl_to_div = pl_to_div; clk->div_to_pl = div_to_pl; - return ret; } @@ -1014,7 +1011,8 @@ gm20b_clk_init_safe_fmax(struct gm20b_clk *clk) } int -gm20b_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +gm20b_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { struct nvkm_device_tegra *tdev = device->func->tegra(device); struct gm20b_clk *clk; @@ -1024,7 +1022,7 @@ gm20b_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) /* Speedo 0 GPUs cannot use noise-aware PLL */ if (tdev->gpu_speedo_id == 0) - return gm20b_clk_new_speedo0(device, index, pclk); + return gm20b_clk_new_speedo0(device, type, inst, pclk); /* Speedo >= 1, use NAPLL */ clk = kzalloc(sizeof(*clk) + sizeof(*clk_params), GFP_KERNEL); @@ -1036,8 +1034,7 @@ gm20b_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) /* duplicate the clock parameters since we will patch them below */ clk_params = (void *) (clk + 1); *clk_params = gm20b_pllg_params; - ret = gk20a_clk_ctor(device, index, &gm20b_clk, clk_params, - &clk->base); + ret = gk20a_clk_ctor(device, type, inst, &gm20b_clk, clk_params, &clk->base); if (ret) return ret; @@ -1050,7 +1047,7 @@ gm20b_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) if (clk_params->max_m == 0) { nvkm_warn(subdev, "cannot use NAPLL, using legacy clock...\n"); kfree(clk); - return gm20b_clk_new_speedo0(device, index, pclk); + return gm20b_clk_new_speedo0(device, type, inst, pclk); } clk->base.pl_to_div = pl_to_div; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c index f0a26881d9b9..b5f3969727a2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c @@ -537,7 +537,8 @@ gt215_clk = { }; int -gt215_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +gt215_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { struct gt215_clk *clk; @@ -545,5 +546,5 @@ gt215_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) return -ENOMEM; *pclk = &clk->base; - return nvkm_clk_ctor(>215_clk, device, index, true, &clk->base); + return nvkm_clk_ctor(>215_clk, device, type, inst, true, &clk->base); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c index 4884eb4a9221..81f103f88dc8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.c @@ -409,7 +409,8 @@ mcp77_clk = { }; int -mcp77_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +mcp77_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { struct mcp77_clk *clk; @@ -417,5 +418,5 @@ mcp77_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) return -ENOMEM; *pclk = &clk->base; - return nvkm_clk_ctor(&mcp77_clk, device, index, true, &clk->base); + return nvkm_clk_ctor(&mcp77_clk, device, type, inst, true, &clk->base); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.c index b280f85e8827..ca13598c2caa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.c @@ -72,9 +72,10 @@ nv04_clk = { }; int -nv04_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +nv04_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { - int ret = nvkm_clk_new_(&nv04_clk, device, index, false, pclk); + int ret = nvkm_clk_new_(&nv04_clk, device, type, inst, false, pclk); if (ret == 0) { (*pclk)->pll_calc = nv04_clk_pll_calc; (*pclk)->pll_prog = nv04_clk_pll_prog; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.c index 2ab9b9b84018..7ddd8cecb805 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.c @@ -218,7 +218,8 @@ nv40_clk = { }; int -nv40_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +nv40_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { struct nv40_clk *clk; @@ -228,5 +229,5 @@ nv40_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) clk->base.pll_prog = nv04_clk_pll_prog; *pclk = &clk->base; - return nvkm_clk_ctor(&nv40_clk, device, index, true, &clk->base); + return nvkm_clk_ctor(&nv40_clk, device, type, inst, true, &clk->base); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.c index da1770e47490..83067763c0ec 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.c @@ -507,14 +507,14 @@ nv50_clk_tidy(struct nvkm_clk *base) int nv50_clk_new_(const struct nvkm_clk_func *func, struct nvkm_device *device, - int index, bool allow_reclock, struct nvkm_clk **pclk) + enum nvkm_subdev_type type, int inst, bool allow_reclock, struct nvkm_clk **pclk) { struct nv50_clk *clk; int ret; if (!(clk = kzalloc(sizeof(*clk), GFP_KERNEL))) return -ENOMEM; - ret = nvkm_clk_ctor(func, device, index, allow_reclock, &clk->base); + ret = nvkm_clk_ctor(func, device, type, inst, allow_reclock, &clk->base); *pclk = &clk->base; if (ret) return ret; @@ -555,7 +555,8 @@ nv50_clk = { }; int -nv50_clk_new(struct nvkm_device *device, int index, struct nvkm_clk **pclk) +nv50_clk_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_clk **pclk) { - return nv50_clk_new_(&nv50_clk, device, index, false, pclk); + return nv50_clk_new_(&nv50_clk, device, type, inst, false, pclk); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.h b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.h index 7c7713238ec4..5b4cb7e5cff6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.h @@ -20,7 +20,7 @@ struct nv50_clk { struct nv50_clk_hwsq hwsq; }; -int nv50_clk_new_(const struct nvkm_clk_func *, struct nvkm_device *, int, +int nv50_clk_new_(const struct nvkm_clk_func *, struct nvkm_device *, enum nvkm_subdev_type, int, bool, struct nvkm_clk **); int nv50_clk_read(struct nvkm_clk *, enum nv_clk_src); int nv50_clk_calc(struct nvkm_clk *, struct nvkm_cstate *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/priv.h index 81dfb37480ae..810cc572cd30 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/priv.h @@ -16,9 +16,9 @@ struct nvkm_clk_func { struct nvkm_domain domains[]; }; -int nvkm_clk_ctor(const struct nvkm_clk_func *, struct nvkm_device *, int, +int nvkm_clk_ctor(const struct nvkm_clk_func *, struct nvkm_device *, enum nvkm_subdev_type, int, bool allow_reclock, struct nvkm_clk *); -int nvkm_clk_new_(const struct nvkm_clk_func *, struct nvkm_device *, int, +int nvkm_clk_new_(const struct nvkm_clk_func *, struct nvkm_device *, enum nvkm_subdev_type, int, bool allow_reclock, struct nvkm_clk **); int nv04_clk_pll_calc(struct nvkm_clk *, struct nvbios_pll *, int clk, From 4a34fd0e88d8e10f6a6779f0200c6454b305c89c Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 11:04:41 +1000 Subject: [PATCH 22/87] drm/nouveau/devinit: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/devinit.h | 32 ++-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 169 +++++++++--------- .../drm/nouveau/nvkm/subdev/devinit/base.c | 7 +- .../gpu/drm/nouveau/nvkm/subdev/devinit/g84.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/devinit/g98.c | 4 +- .../drm/nouveau/nvkm/subdev/devinit/ga100.c | 5 +- .../drm/nouveau/nvkm/subdev/devinit/gf100.c | 6 +- .../drm/nouveau/nvkm/subdev/devinit/gm107.c | 6 +- .../drm/nouveau/nvkm/subdev/devinit/gm200.c | 6 +- .../drm/nouveau/nvkm/subdev/devinit/gt215.c | 6 +- .../drm/nouveau/nvkm/subdev/devinit/gv100.c | 6 +- .../drm/nouveau/nvkm/subdev/devinit/mcp89.c | 6 +- .../drm/nouveau/nvkm/subdev/devinit/nv04.c | 11 +- .../drm/nouveau/nvkm/subdev/devinit/nv04.h | 2 +- .../drm/nouveau/nvkm/subdev/devinit/nv05.c | 4 +- .../drm/nouveau/nvkm/subdev/devinit/nv10.c | 4 +- .../drm/nouveau/nvkm/subdev/devinit/nv1a.c | 4 +- .../drm/nouveau/nvkm/subdev/devinit/nv20.c | 4 +- .../drm/nouveau/nvkm/subdev/devinit/nv50.c | 11 +- .../drm/nouveau/nvkm/subdev/devinit/nv50.h | 2 +- .../drm/nouveau/nvkm/subdev/devinit/priv.h | 2 +- .../drm/nouveau/nvkm/subdev/devinit/tu102.c | 6 +- 25 files changed, 153 insertions(+), 158 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 42ae6c5cf0e1..01e653f16edc 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_devinit *devinit; struct nvkm_fault *fault; struct nvkm_fb *fb; struct nvkm_fuse *fuse; @@ -143,7 +142,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*devinit )(struct nvkm_device *, int idx, struct nvkm_devinit **); int (*fault )(struct nvkm_device *, int idx, struct nvkm_fault **); int (*fb )(struct nvkm_device *, int idx, struct nvkm_fb **); int (*fuse )(struct nvkm_device *, int idx, struct nvkm_fuse **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 1b79b4e812ae..47cb81c6e129 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: MIT */ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h index 50cc7c05eac4..d22d7239c272 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h @@ -17,20 +17,20 @@ void nvkm_devinit_meminit(struct nvkm_devinit *); u64 nvkm_devinit_disable(struct nvkm_devinit *); int nvkm_devinit_post(struct nvkm_devinit *, u64 *disable); -int nv04_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int nv05_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int nv10_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int nv1a_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int nv20_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int nv50_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int g84_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int g98_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int gt215_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int mcp89_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int gf100_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int gm107_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int gm200_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int gv100_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int tu102_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); -int ga100_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **); +int nv04_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int nv05_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int nv10_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int nv1a_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int nv20_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int nv50_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int g84_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int g98_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int gt215_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int mcp89_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int gf100_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int gm107_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int gm200_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int gv100_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int tu102_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); +int ga100_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 8f8853a5bac6..2aa0dc6c32d3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_DEVINIT ] = "devinit", [NVKM_SUBDEV_FAULT ] = "fault", [NVKM_SUBDEV_FB ] = "fb", [NVKM_SUBDEV_FUSE ] = "fuse", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index bb0aefc65f7e..d334bcc6d5bb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -80,7 +80,7 @@ nv4_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv04_devinit_new, + .devinit = { 0x00000001, nv04_devinit_new }, .fb = nv04_fb_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -101,7 +101,7 @@ nv5_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv05_devinit_new, + .devinit = { 0x00000001, nv05_devinit_new }, .fb = nv04_fb_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -122,7 +122,7 @@ nv10_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv10_devinit_new, + .devinit = { 0x00000001, nv10_devinit_new }, .fb = nv10_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -142,7 +142,7 @@ nv11_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv10_devinit_new, + .devinit = { 0x00000001, nv10_devinit_new }, .fb = nv10_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -164,7 +164,7 @@ nv15_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv10_devinit_new, + .devinit = { 0x00000001, nv10_devinit_new }, .fb = nv10_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -186,7 +186,7 @@ nv17_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv10_devinit_new, + .devinit = { 0x00000001, nv10_devinit_new }, .fb = nv10_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -208,7 +208,7 @@ nv18_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv10_devinit_new, + .devinit = { 0x00000001, nv10_devinit_new }, .fb = nv10_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -230,7 +230,7 @@ nv1a_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv1a_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -252,7 +252,7 @@ nv1f_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv1a_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -274,7 +274,7 @@ nv20_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv20_devinit_new, + .devinit = { 0x00000001, nv20_devinit_new }, .fb = nv20_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -296,7 +296,7 @@ nv25_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv20_devinit_new, + .devinit = { 0x00000001, nv20_devinit_new }, .fb = nv25_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -318,7 +318,7 @@ nv28_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv20_devinit_new, + .devinit = { 0x00000001, nv20_devinit_new }, .fb = nv25_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -340,7 +340,7 @@ nv2a_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv20_devinit_new, + .devinit = { 0x00000001, nv20_devinit_new }, .fb = nv25_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -362,7 +362,7 @@ nv30_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv20_devinit_new, + .devinit = { 0x00000001, nv20_devinit_new }, .fb = nv30_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -384,7 +384,7 @@ nv31_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv20_devinit_new, + .devinit = { 0x00000001, nv20_devinit_new }, .fb = nv30_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -407,7 +407,7 @@ nv34_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv10_devinit_new, + .devinit = { 0x00000001, nv10_devinit_new }, .fb = nv10_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -430,7 +430,7 @@ nv35_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv20_devinit_new, + .devinit = { 0x00000001, nv20_devinit_new }, .fb = nv35_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -452,7 +452,7 @@ nv36_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv04_clk_new }, - .devinit = nv20_devinit_new, + .devinit = { 0x00000001, nv20_devinit_new }, .fb = nv36_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -475,7 +475,7 @@ nv40_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv40_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -501,7 +501,7 @@ nv41_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv41_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -527,7 +527,7 @@ nv42_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv41_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -553,7 +553,7 @@ nv43_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv41_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -579,7 +579,7 @@ nv44_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv44_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -605,7 +605,7 @@ nv45_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv40_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -631,7 +631,7 @@ nv46_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv46_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -657,7 +657,7 @@ nv47_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv47_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -683,7 +683,7 @@ nv49_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv49_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -709,7 +709,7 @@ nv4a_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv44_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -735,7 +735,7 @@ nv4b_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv49_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -761,7 +761,7 @@ nv4c_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv46_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -787,7 +787,7 @@ nv4e_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv4e_fb_new, .gpio = nv10_gpio_new, .i2c = nv4e_i2c_new, @@ -814,7 +814,7 @@ nv50_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv50_bus_new }, .clk = { 0x00000001, nv50_clk_new }, - .devinit = nv50_devinit_new, + .devinit = { 0x00000001, nv50_devinit_new }, .fb = nv50_fb_new, .fuse = nv50_fuse_new, .gpio = nv50_gpio_new, @@ -842,7 +842,7 @@ nv63_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv46_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -868,7 +868,7 @@ nv67_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv46_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -894,7 +894,7 @@ nv68_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, - .devinit = nv1a_devinit_new, + .devinit = { 0x00000001, nv1a_devinit_new }, .fb = nv46_fb_new, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, @@ -921,7 +921,7 @@ nv84_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv50_bus_new }, .clk = { 0x00000001, g84_clk_new }, - .devinit = g84_devinit_new, + .devinit = { 0x00000001, g84_devinit_new }, .fb = g84_fb_new, .fuse = nv50_fuse_new, .gpio = nv50_gpio_new, @@ -953,7 +953,7 @@ nv86_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv50_bus_new }, .clk = { 0x00000001, g84_clk_new }, - .devinit = g84_devinit_new, + .devinit = { 0x00000001, g84_devinit_new }, .fb = g84_fb_new, .fuse = nv50_fuse_new, .gpio = nv50_gpio_new, @@ -985,7 +985,7 @@ nv92_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, nv50_bus_new }, .clk = { 0x00000001, g84_clk_new }, - .devinit = g84_devinit_new, + .devinit = { 0x00000001, g84_devinit_new }, .fb = g84_fb_new, .fuse = nv50_fuse_new, .gpio = nv50_gpio_new, @@ -1017,7 +1017,7 @@ nv94_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, g84_clk_new }, - .devinit = g84_devinit_new, + .devinit = { 0x00000001, g84_devinit_new }, .fb = g84_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1049,7 +1049,7 @@ nv96_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, g84_clk_new }, - .devinit = g84_devinit_new, + .devinit = { 0x00000001, g84_devinit_new }, .fb = g84_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1081,7 +1081,7 @@ nv98_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, g84_clk_new }, - .devinit = g98_devinit_new, + .devinit = { 0x00000001, g98_devinit_new }, .fb = g84_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1113,7 +1113,7 @@ nva0_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, g84_clk_new }, - .devinit = g84_devinit_new, + .devinit = { 0x00000001, g84_devinit_new }, .fb = g84_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1145,7 +1145,7 @@ nva3_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, gt215_clk_new }, - .devinit = gt215_devinit_new, + .devinit = { 0x00000001, gt215_devinit_new }, .fb = gt215_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1179,7 +1179,7 @@ nva5_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, gt215_clk_new }, - .devinit = gt215_devinit_new, + .devinit = { 0x00000001, gt215_devinit_new }, .fb = gt215_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1212,7 +1212,7 @@ nva8_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, gt215_clk_new }, - .devinit = gt215_devinit_new, + .devinit = { 0x00000001, gt215_devinit_new }, .fb = gt215_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1245,7 +1245,7 @@ nvaa_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, mcp77_clk_new }, - .devinit = g98_devinit_new, + .devinit = { 0x00000001, g98_devinit_new }, .fb = mcp77_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1277,7 +1277,7 @@ nvac_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, mcp77_clk_new }, - .devinit = g98_devinit_new, + .devinit = { 0x00000001, g98_devinit_new }, .fb = mcp77_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1309,7 +1309,7 @@ nvaf_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, gt215_clk_new }, - .devinit = mcp89_devinit_new, + .devinit = { 0x00000001, mcp89_devinit_new }, .fb = mcp89_fb_new, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, @@ -1342,7 +1342,7 @@ nvc0_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf100_fb_new, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, @@ -1379,7 +1379,7 @@ nvc1_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf108_fb_new, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, @@ -1415,7 +1415,7 @@ nvc3_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf100_fb_new, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, @@ -1451,7 +1451,7 @@ nvc4_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf100_fb_new, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, @@ -1488,7 +1488,7 @@ nvc8_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf100_fb_new, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, @@ -1525,7 +1525,7 @@ nvce_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf100_fb_new, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, @@ -1562,7 +1562,7 @@ nvcf_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf100_fb_new, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, @@ -1598,7 +1598,7 @@ nvd7_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf100_fb_new, .fuse = gf100_fuse_new, .gpio = gf119_gpio_new, @@ -1633,7 +1633,7 @@ nvd9_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gf100_fb_new, .fuse = gf100_fuse_new, .gpio = gf119_gpio_new, @@ -1669,7 +1669,7 @@ nve4_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gk104_fb_new, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, @@ -1708,7 +1708,7 @@ nve6_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gk104_fb_new, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, @@ -1747,7 +1747,7 @@ nve7_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gk104_fb_new, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, @@ -1811,7 +1811,7 @@ nvf0_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gk110_fb_new, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, @@ -1849,7 +1849,7 @@ nvf1_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gk110_fb_new, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, @@ -1887,7 +1887,7 @@ nv106_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gk110_fb_new, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, @@ -1925,7 +1925,7 @@ nv108_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gf100_devinit_new, + .devinit = { 0x00000001, gf100_devinit_new }, .fb = gk110_fb_new, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, @@ -1963,7 +1963,7 @@ nv117_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gm107_devinit_new, + .devinit = { 0x00000001, gm107_devinit_new }, .fb = gm107_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -1999,7 +1999,7 @@ nv118_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, - .devinit = gm107_devinit_new, + .devinit = { 0x00000001, gm107_devinit_new }, .fb = gm107_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2033,7 +2033,7 @@ nv120_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fb = gm200_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2071,7 +2071,7 @@ nv124_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fb = gm200_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2109,7 +2109,7 @@ nv126_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fb = gm200_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2171,7 +2171,7 @@ nv130_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fault = gp100_fault_new, .fb = gp100_fb_new, .fuse = gm107_fuse_new, @@ -2211,7 +2211,7 @@ nv132_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fault = gp100_fault_new, .fb = gp102_fb_new, .fuse = gm107_fuse_new, @@ -2249,7 +2249,7 @@ nv134_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fault = gp100_fault_new, .fb = gp102_fb_new, .fuse = gm107_fuse_new, @@ -2287,7 +2287,7 @@ nv136_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fault = gp100_fault_new, .fb = gp102_fb_new, .fuse = gm107_fuse_new, @@ -2324,7 +2324,7 @@ nv137_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fault = gp100_fault_new, .fb = gp102_fb_new, .fuse = gm107_fuse_new, @@ -2362,7 +2362,7 @@ nv138_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gm200_devinit_new, + .devinit = { 0x00000001, gm200_devinit_new }, .fault = gp100_fault_new, .fb = gp102_fb_new, .fuse = gm107_fuse_new, @@ -2422,7 +2422,7 @@ nv140_chipset = { .bar = { 0x00000001, gm107_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = gv100_devinit_new, + .devinit = { 0x00000001, gv100_devinit_new }, .fault = gv100_fault_new, .fb = gv100_fb_new, .fuse = gm107_fuse_new, @@ -2466,7 +2466,7 @@ nv162_chipset = { .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = tu102_devinit_new, + .devinit = { 0x00000001, tu102_devinit_new }, .fault = tu102_fault_new, .fb = gv100_fb_new, .fuse = gm107_fuse_new, @@ -2504,7 +2504,7 @@ nv164_chipset = { .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = tu102_devinit_new, + .devinit = { 0x00000001, tu102_devinit_new }, .fault = tu102_fault_new, .fb = gv100_fb_new, .fuse = gm107_fuse_new, @@ -2543,7 +2543,7 @@ nv166_chipset = { .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = tu102_devinit_new, + .devinit = { 0x00000001, tu102_devinit_new }, .fault = tu102_fault_new, .fb = gv100_fb_new, .fuse = gm107_fuse_new, @@ -2583,7 +2583,7 @@ nv167_chipset = { .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = tu102_devinit_new, + .devinit = { 0x00000001, tu102_devinit_new }, .fault = tu102_fault_new, .fb = gv100_fb_new, .fuse = gm107_fuse_new, @@ -2621,7 +2621,7 @@ nv168_chipset = { .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, - .devinit = tu102_devinit_new, + .devinit = { 0x00000001, tu102_devinit_new }, .fault = tu102_fault_new, .fb = gv100_fb_new, .fuse = gm107_fuse_new, @@ -2657,7 +2657,7 @@ nv170_chipset = { .name = "GA100", .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .devinit = ga100_devinit_new, + .devinit = { 0x00000001, ga100_devinit_new }, .fb = ga100_fb_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2674,7 +2674,7 @@ nv172_chipset = { .name = "GA102", .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .devinit = ga100_devinit_new, + .devinit = { 0x00000001, ga100_devinit_new }, .fb = ga102_fb_new, .gpio = ga102_gpio_new, .i2c = gm200_i2c_new, @@ -2693,7 +2693,7 @@ nv174_chipset = { .name = "GA104", .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, - .devinit = ga100_devinit_new, + .devinit = { 0x00000001, ga100_devinit_new }, .fb = ga102_fb_new, .gpio = ga102_gpio_new, .i2c = gm200_i2c_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_DEVINIT , devinit); _(NVKM_SUBDEV_FAULT , fault); _(NVKM_SUBDEV_FB , fb); _(NVKM_SUBDEV_FUSE , fuse); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c index 4756019ddf3f..1ccccc212d94 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c @@ -126,11 +126,10 @@ nvkm_devinit = { }; void -nvkm_devinit_ctor(const struct nvkm_devinit_func *func, - struct nvkm_device *device, int index, - struct nvkm_devinit *init) +nvkm_devinit_ctor(const struct nvkm_devinit_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, struct nvkm_devinit *init) { - nvkm_subdev_ctor(&nvkm_devinit, device, index, &init->subdev); + nvkm_subdev_ctor(&nvkm_devinit, device, type, inst, &init->subdev); init->func = func; init->force_post = nvkm_boolopt(device->cfgopt, "NvForcePost", false); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c index e895289bf3c1..44513a474f74 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c @@ -61,8 +61,8 @@ g84_devinit = { }; int -g84_devinit_new(struct nvkm_device *device, int index, +g84_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&g84_devinit, device, index, pinit); + return nv50_devinit_new_(&g84_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c index a9d45844df5a..ba810cb1f386 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c @@ -60,8 +60,8 @@ g98_devinit = { }; int -g98_devinit_new(struct nvkm_device *device, int index, +g98_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&g98_devinit, device, index, pinit); + return nv50_devinit_new_(&g98_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.c index 636a92128f6c..6b280b05c4ca 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.c @@ -70,7 +70,8 @@ ga100_devinit = { }; int -ga100_devinit_new(struct nvkm_device *device, int index, struct nvkm_devinit **pinit) +ga100_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&ga100_devinit, device, index, pinit); + return nv50_devinit_new_(&ga100_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c index 8b1b34c3ad26..54735a6a01cb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c @@ -114,8 +114,8 @@ gf100_devinit = { }; int -gf100_devinit_new(struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +gf100_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&gf100_devinit, device, index, pinit); + return nv50_devinit_new_(&gf100_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c index 28ca01be3d38..f5eb88bffe3b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c @@ -54,8 +54,8 @@ gm107_devinit = { }; int -gm107_devinit_new(struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +gm107_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&gm107_devinit, device, index, pinit); + return nv50_devinit_new_(&gm107_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c index 59940dacc2ba..a308b9bde449 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c @@ -179,8 +179,8 @@ gm200_devinit = { }; int -gm200_devinit_new(struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +gm200_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&gm200_devinit, device, index, pinit); + return nv50_devinit_new_(&gm200_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c index 9a8522fa9c65..f93ab872395f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c @@ -146,8 +146,8 @@ gt215_devinit = { }; int -gt215_devinit_new(struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +gt215_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_devinit **pinit) { - return nv50_devinit_new_(>215_devinit, device, index, pinit); + return nv50_devinit_new_(>215_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.c index fbde6828bd38..b4d1688517d5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.c @@ -72,8 +72,8 @@ gv100_devinit = { }; int -gv100_devinit_new(struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +gv100_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&gv100_devinit, device, index, pinit); + return nv50_devinit_new_(&gv100_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c index ce4f718e98a1..cb74d433ade2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c @@ -61,8 +61,8 @@ mcp89_devinit = { }; int -mcp89_devinit_new(struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +mcp89_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&mcp89_devinit, device, index, pinit); + return nv50_devinit_new_(&mcp89_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c index 317ce9fb8225..88bc890f89a2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.c @@ -434,9 +434,8 @@ nv04_devinit_dtor(struct nvkm_devinit *base) } int -nv04_devinit_new_(const struct nvkm_devinit_func *func, - struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +nv04_devinit_new_(const struct nvkm_devinit_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { struct nv04_devinit *init; @@ -444,7 +443,7 @@ nv04_devinit_new_(const struct nvkm_devinit_func *func, return -ENOMEM; *pinit = &init->base; - nvkm_devinit_ctor(func, device, index, &init->base); + nvkm_devinit_ctor(func, device, type, inst, &init->base); init->owner = -1; return 0; } @@ -459,8 +458,8 @@ nv04_devinit = { }; int -nv04_devinit_new(struct nvkm_device *device, int index, +nv04_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { - return nv04_devinit_new_(&nv04_devinit, device, index, pinit); + return nv04_devinit_new_(&nv04_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.h b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.h index 15b029ddf6df..06ad8a606bb8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.h @@ -11,7 +11,7 @@ struct nv04_devinit { }; int nv04_devinit_new_(const struct nvkm_devinit_func *, struct nvkm_device *, - int, struct nvkm_devinit **); + enum nvkm_subdev_type, int, struct nvkm_devinit **); void *nv04_devinit_dtor(struct nvkm_devinit *); void nv04_devinit_preinit(struct nvkm_devinit *); void nv04_devinit_fini(struct nvkm_devinit *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.c index 9891eadca1ce..1410befd2285 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.c @@ -136,8 +136,8 @@ nv05_devinit = { }; int -nv05_devinit_new(struct nvkm_device *device, int index, +nv05_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { - return nv04_devinit_new_(&nv05_devinit, device, index, pinit); + return nv04_devinit_new_(&nv05_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.c index 570822f83acf..a6aa8786d610 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.c @@ -106,8 +106,8 @@ nv10_devinit = { }; int -nv10_devinit_new(struct nvkm_device *device, int index, +nv10_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { - return nv04_devinit_new_(&nv10_devinit, device, index, pinit); + return nv04_devinit_new_(&nv10_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.c index fefafec7e2a7..4cc5ef9a5a63 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.c @@ -35,8 +35,8 @@ nv1a_devinit = { }; int -nv1a_devinit_new(struct nvkm_device *device, int index, +nv1a_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { - return nv04_devinit_new_(&nv1a_devinit, device, index, pinit); + return nv04_devinit_new_(&nv1a_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.c index 4ef04e0d8826..67f46df723e4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.c @@ -72,8 +72,8 @@ nv20_devinit = { }; int -nv20_devinit_new(struct nvkm_device *device, int index, +nv20_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { - return nv04_devinit_new_(&nv20_devinit, device, index, pinit); + return nv04_devinit_new_(&nv20_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c index d7947c4391dc..4f25e930339d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c @@ -148,9 +148,8 @@ nv50_devinit_init(struct nvkm_devinit *base) } int -nv50_devinit_new_(const struct nvkm_devinit_func *func, - struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +nv50_devinit_new_(const struct nvkm_devinit_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { struct nv50_devinit *init; @@ -158,7 +157,7 @@ nv50_devinit_new_(const struct nvkm_devinit_func *func, return -ENOMEM; *pinit = &init->base; - nvkm_devinit_ctor(func, device, index, &init->base); + nvkm_devinit_ctor(func, device, type, inst, &init->base); return 0; } @@ -172,8 +171,8 @@ nv50_devinit = { }; int -nv50_devinit_new(struct nvkm_device *device, int index, +nv50_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&nv50_devinit, device, index, pinit); + return nv50_devinit_new_(&nv50_devinit, device, type, inst, pinit); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.h b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.h index e8d37a6145a2..987a7f478b84 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.h @@ -9,7 +9,7 @@ struct nv50_devinit { u32 r001540; }; -int nv50_devinit_new_(const struct nvkm_devinit_func *, struct nvkm_device *, +int nv50_devinit_new_(const struct nvkm_devinit_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); void nv50_devinit_preinit(struct nvkm_devinit *); void nv50_devinit_init(struct nvkm_devinit *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/priv.h index 05961e624264..257ed026b8f5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/priv.h @@ -16,7 +16,7 @@ struct nvkm_devinit_func { }; void nvkm_devinit_ctor(const struct nvkm_devinit_func *, struct nvkm_device *, - int index, struct nvkm_devinit *); + enum nvkm_subdev_type, int inst, struct nvkm_devinit *); int nv04_devinit_post(struct nvkm_devinit *, bool); int tu102_devinit_post(struct nvkm_devinit *, bool); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.c index 9a469bf482f2..634f64f88fc8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.c @@ -82,8 +82,8 @@ tu102_devinit = { }; int -tu102_devinit_new(struct nvkm_device *device, int index, - struct nvkm_devinit **pinit) +tu102_devinit_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_devinit **pinit) { - return nv50_devinit_new_(&tu102_devinit, device, index, pinit); + return nv50_devinit_new_(&tu102_devinit, device, type, inst, pinit); } From 77689f1b6b0a99179b764035b186d30ee8ef938f Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 11:07:41 +1000 Subject: [PATCH 23/87] drm/nouveau/fault: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 -- .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/fault.h | 8 +++--- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 27 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/fault/base.c | 4 +-- .../gpu/drm/nouveau/nvkm/subdev/fault/gp100.c | 4 +-- .../gpu/drm/nouveau/nvkm/subdev/fault/gp10b.c | 4 +-- .../gpu/drm/nouveau/nvkm/subdev/fault/gv100.c | 4 +-- .../gpu/drm/nouveau/nvkm/subdev/fault/priv.h | 4 +-- .../gpu/drm/nouveau/nvkm/subdev/fault/tu102.c | 4 +-- 11 files changed, 30 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 01e653f16edc..0b5c85218c71 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_fault *fault; struct nvkm_fb *fb; struct nvkm_fuse *fuse; struct nvkm_gpio *gpio; @@ -142,7 +141,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*fault )(struct nvkm_device *, int idx, struct nvkm_fault **); int (*fb )(struct nvkm_device *, int idx, struct nvkm_fb **); int (*fuse )(struct nvkm_device *, int idx, struct nvkm_fuse **); int (*gpio )(struct nvkm_device *, int idx, struct nvkm_gpio **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 47cb81c6e129..9f5fad93eacc 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -3,5 +3,6 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fault.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fault.h index a513c16ab105..581458ad38e0 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fault.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fault.h @@ -30,8 +30,8 @@ struct nvkm_fault_data { u8 reason; }; -int gp100_fault_new(struct nvkm_device *, int, struct nvkm_fault **); -int gp10b_fault_new(struct nvkm_device *, int, struct nvkm_fault **); -int gv100_fault_new(struct nvkm_device *, int, struct nvkm_fault **); -int tu102_fault_new(struct nvkm_device *, int, struct nvkm_fault **); +int gp100_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **); +int gp10b_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **); +int gv100_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **); +int tu102_fault_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fault **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 2aa0dc6c32d3..56b61a266f1f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_FAULT ] = "fault", [NVKM_SUBDEV_FB ] = "fb", [NVKM_SUBDEV_FUSE ] = "fuse", [NVKM_SUBDEV_GPIO ] = "gpio", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index d334bcc6d5bb..123a01f26830 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2172,7 +2172,7 @@ nv130_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fault = gp100_fault_new, + .fault = { 0x00000001, gp100_fault_new }, .fb = gp100_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2212,7 +2212,7 @@ nv132_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fault = gp100_fault_new, + .fault = { 0x00000001, gp100_fault_new }, .fb = gp102_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2250,7 +2250,7 @@ nv134_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fault = gp100_fault_new, + .fault = { 0x00000001, gp100_fault_new }, .fb = gp102_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2288,7 +2288,7 @@ nv136_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fault = gp100_fault_new, + .fault = { 0x00000001, gp100_fault_new }, .fb = gp102_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2325,7 +2325,7 @@ nv137_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fault = gp100_fault_new, + .fault = { 0x00000001, gp100_fault_new }, .fb = gp102_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2363,7 +2363,7 @@ nv138_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fault = gp100_fault_new, + .fault = { 0x00000001, gp100_fault_new }, .fb = gp102_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2397,7 +2397,7 @@ nv13b_chipset = { .acr = { 0x00000001, gp10b_acr_new }, .bar = { 0x00000001, gm20b_bar_new }, .bus = { 0x00000001, gf100_bus_new }, - .fault = gp10b_fault_new, + .fault = { 0x00000001, gp10b_fault_new }, .fb = gp10b_fb_new, .fuse = gm107_fuse_new, .ibus = gp10b_ibus_new, @@ -2423,7 +2423,7 @@ nv140_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gv100_devinit_new }, - .fault = gv100_fault_new, + .fault = { 0x00000001, gv100_fault_new }, .fb = gv100_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2467,7 +2467,7 @@ nv162_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, - .fault = tu102_fault_new, + .fault = { 0x00000001, tu102_fault_new }, .fb = gv100_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2505,7 +2505,7 @@ nv164_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, - .fault = tu102_fault_new, + .fault = { 0x00000001, tu102_fault_new }, .fb = gv100_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2544,7 +2544,7 @@ nv166_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, - .fault = tu102_fault_new, + .fault = { 0x00000001, tu102_fault_new }, .fb = gv100_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2584,7 +2584,7 @@ nv167_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, - .fault = tu102_fault_new, + .fault = { 0x00000001, tu102_fault_new }, .fb = gv100_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -2622,7 +2622,7 @@ nv168_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, - .fault = tu102_fault_new, + .fault = { 0x00000001, tu102_fault_new }, .fb = gv100_fb_new, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_FAULT , fault); _(NVKM_SUBDEV_FB , fb); _(NVKM_SUBDEV_FUSE , fuse); _(NVKM_SUBDEV_GPIO , gpio); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c index f6dca97140d6..fd54fa504efa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c @@ -170,12 +170,12 @@ nvkm_fault = { int nvkm_fault_new_(const struct nvkm_fault_func *func, struct nvkm_device *device, - int index, struct nvkm_fault **pfault) + enum nvkm_subdev_type type, int inst, struct nvkm_fault **pfault) { struct nvkm_fault *fault; if (!(fault = *pfault = kzalloc(sizeof(*fault), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_fault, device, index, &fault->subdev); + nvkm_subdev_ctor(&nvkm_fault, device, type, inst, &fault->subdev); fault->func = func; fault->user.ctor = nvkm_ufault_new; fault->user.base = func->user.base; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c index f6b189cc4330..20e271744a7a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c @@ -82,8 +82,8 @@ gp100_fault = { }; int -gp100_fault_new(struct nvkm_device *device, int index, +gp100_fault_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fault **pfault) { - return nvkm_fault_new_(&gp100_fault, device, index, pfault); + return nvkm_fault_new_(&gp100_fault, device, type, inst, pfault); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.c index 9e66d1f7654d..89e0bc96fb92 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.c @@ -46,8 +46,8 @@ gp10b_fault = { }; int -gp10b_fault_new(struct nvkm_device *device, int index, +gp10b_fault_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fault **pfault) { - return nvkm_fault_new_(&gp10b_fault, device, index, pfault); + return nvkm_fault_new_(&gp10b_fault, device, type, inst, pfault); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.c index 2707be4ffabc..cd9d2ade5ac7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.c @@ -228,8 +228,8 @@ gv100_fault = { }; int -gv100_fault_new(struct nvkm_device *device, int index, +gv100_fault_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fault **pfault) { - return nvkm_fault_new_(&gv100_fault, device, index, pfault); + return nvkm_fault_new_(&gv100_fault, device, type, inst, pfault); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/priv.h index f6f1dd7eee1f..36681c347fb5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/priv.h @@ -18,8 +18,8 @@ struct nvkm_fault_buffer { u64 addr; }; -int nvkm_fault_new_(const struct nvkm_fault_func *, struct nvkm_device *, - int index, struct nvkm_fault **); +int nvkm_fault_new_(const struct nvkm_fault_func *, struct nvkm_device *, enum nvkm_subdev_type, + int inst, struct nvkm_fault **); struct nvkm_fault_func { int (*oneinit)(struct nvkm_fault *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c index f080051b0c65..437cf323ee2f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c @@ -181,8 +181,8 @@ tu102_fault = { }; int -tu102_fault_new(struct nvkm_device *device, int index, +tu102_fault_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fault **pfault) { - return nvkm_fault_new_(&tu102_fault, device, index, pfault); + return nvkm_fault_new_(&tu102_fault, device, type, inst, pfault); } From b7a9369ae6f2da41b1d9f01a1d84e10e39bca293 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 11:16:21 +1000 Subject: [PATCH 24/87] drm/nouveau/fb: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/fb.h | 68 +++---- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 175 +++++++++--------- drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c | 8 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/ga100.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/ga102.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gf100.c | 8 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gf100.h | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gf108.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gk104.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gk110.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gm107.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gm200.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gm20b.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gp100.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gp102.c | 8 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gp10b.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gt215.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/gv100.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/mcp77.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/mcp89.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c | 9 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.h | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h | 6 +- 43 files changed, 206 insertions(+), 210 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 0b5c85218c71..c1cb34ba1d40 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_fb *fb; struct nvkm_fuse *fuse; struct nvkm_gpio *gpio; struct nvkm_gsp *gsp; @@ -141,7 +140,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*fb )(struct nvkm_device *, int idx, struct nvkm_fb **); int (*fuse )(struct nvkm_device *, int idx, struct nvkm_fuse **); int (*gpio )(struct nvkm_device *, int idx, struct nvkm_gpio **); int (*gsp )(struct nvkm_device *, int idx, struct nvkm_gsp **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 9f5fad93eacc..85092d589ad4 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -2,6 +2,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h index 7fb5cd8e29af..ef6a6297148c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fb.h @@ -58,40 +58,40 @@ void nvkm_fb_tile_init(struct nvkm_fb *, int region, u32 addr, u32 size, void nvkm_fb_tile_fini(struct nvkm_fb *, int region, struct nvkm_fb_tile *); void nvkm_fb_tile_prog(struct nvkm_fb *, int region, struct nvkm_fb_tile *); -int nv04_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv10_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv1a_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv20_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv25_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv30_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv35_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv36_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv40_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv41_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv44_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv46_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv47_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv49_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv4e_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int nv50_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int g84_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gt215_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int mcp77_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int mcp89_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gf100_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gf108_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gk104_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gk110_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gk20a_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gm107_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gm200_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gm20b_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gp100_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gp102_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gp10b_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int gv100_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int ga100_fb_new(struct nvkm_device *, int, struct nvkm_fb **); -int ga102_fb_new(struct nvkm_device *, int, struct nvkm_fb **); +int nv04_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv10_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv1a_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv20_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv25_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv30_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv35_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv36_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv40_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv41_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv44_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv46_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv47_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv49_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv4e_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int nv50_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int g84_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gt215_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int mcp77_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int mcp89_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gf100_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gf108_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gk104_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gk110_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gk20a_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gm107_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gm200_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gm20b_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gp100_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gp102_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gp10b_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int gv100_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int ga100_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); +int ga102_fb_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fb **); #include #include diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 56b61a266f1f..e43a88fff9bb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_FB ] = "fb", [NVKM_SUBDEV_FUSE ] = "fuse", [NVKM_SUBDEV_GPIO ] = "gpio", [NVKM_SUBDEV_GSP ] = "gsp", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 123a01f26830..a4ef6cac85fa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -81,7 +81,7 @@ nv4_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv04_devinit_new }, - .fb = nv04_fb_new, + .fb = { 0x00000001, nv04_fb_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv04_mc_new, @@ -102,7 +102,7 @@ nv5_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv05_devinit_new }, - .fb = nv04_fb_new, + .fb = { 0x00000001, nv04_fb_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv04_mc_new, @@ -123,7 +123,7 @@ nv10_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, - .fb = nv10_fb_new, + .fb = { 0x00000001, nv10_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -143,7 +143,7 @@ nv11_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, - .fb = nv10_fb_new, + .fb = { 0x00000001, nv10_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -165,7 +165,7 @@ nv15_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, - .fb = nv10_fb_new, + .fb = { 0x00000001, nv10_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -187,7 +187,7 @@ nv17_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, - .fb = nv10_fb_new, + .fb = { 0x00000001, nv10_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -209,7 +209,7 @@ nv18_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, - .fb = nv10_fb_new, + .fb = { 0x00000001, nv10_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -231,7 +231,7 @@ nv1a_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv1a_fb_new, + .fb = { 0x00000001, nv1a_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -253,7 +253,7 @@ nv1f_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv1a_fb_new, + .fb = { 0x00000001, nv1a_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -275,7 +275,7 @@ nv20_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, - .fb = nv20_fb_new, + .fb = { 0x00000001, nv20_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -297,7 +297,7 @@ nv25_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, - .fb = nv25_fb_new, + .fb = { 0x00000001, nv25_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -319,7 +319,7 @@ nv28_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, - .fb = nv25_fb_new, + .fb = { 0x00000001, nv25_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -341,7 +341,7 @@ nv2a_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, - .fb = nv25_fb_new, + .fb = { 0x00000001, nv25_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -363,7 +363,7 @@ nv30_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, - .fb = nv30_fb_new, + .fb = { 0x00000001, nv30_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -385,7 +385,7 @@ nv31_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, - .fb = nv30_fb_new, + .fb = { 0x00000001, nv30_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -408,7 +408,7 @@ nv34_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, - .fb = nv10_fb_new, + .fb = { 0x00000001, nv10_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -431,7 +431,7 @@ nv35_chipset = { .bus = { 0x00000001, nv04_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, - .fb = nv35_fb_new, + .fb = { 0x00000001, nv35_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -453,7 +453,7 @@ nv36_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, - .fb = nv36_fb_new, + .fb = { 0x00000001, nv36_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, @@ -476,7 +476,7 @@ nv40_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv40_fb_new, + .fb = { 0x00000001, nv40_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -502,7 +502,7 @@ nv41_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv41_fb_new, + .fb = { 0x00000001, nv41_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -528,7 +528,7 @@ nv42_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv41_fb_new, + .fb = { 0x00000001, nv41_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -554,7 +554,7 @@ nv43_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv41_fb_new, + .fb = { 0x00000001, nv41_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -580,7 +580,7 @@ nv44_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv44_fb_new, + .fb = { 0x00000001, nv44_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -606,7 +606,7 @@ nv45_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv40_fb_new, + .fb = { 0x00000001, nv40_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -632,7 +632,7 @@ nv46_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv46_fb_new, + .fb = { 0x00000001, nv46_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -658,7 +658,7 @@ nv47_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv47_fb_new, + .fb = { 0x00000001, nv47_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -684,7 +684,7 @@ nv49_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv49_fb_new, + .fb = { 0x00000001, nv49_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -710,7 +710,7 @@ nv4a_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv44_fb_new, + .fb = { 0x00000001, nv44_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -736,7 +736,7 @@ nv4b_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv49_fb_new, + .fb = { 0x00000001, nv49_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -762,7 +762,7 @@ nv4c_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv46_fb_new, + .fb = { 0x00000001, nv46_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -788,7 +788,7 @@ nv4e_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv4e_fb_new, + .fb = { 0x00000001, nv4e_fb_new }, .gpio = nv10_gpio_new, .i2c = nv4e_i2c_new, .imem = nv40_instmem_new, @@ -815,7 +815,7 @@ nv50_chipset = { .bus = { 0x00000001, nv50_bus_new }, .clk = { 0x00000001, nv50_clk_new }, .devinit = { 0x00000001, nv50_devinit_new }, - .fb = nv50_fb_new, + .fb = { 0x00000001, nv50_fb_new }, .fuse = nv50_fuse_new, .gpio = nv50_gpio_new, .i2c = nv50_i2c_new, @@ -843,7 +843,7 @@ nv63_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv46_fb_new, + .fb = { 0x00000001, nv46_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -869,7 +869,7 @@ nv67_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv46_fb_new, + .fb = { 0x00000001, nv46_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -895,7 +895,7 @@ nv68_chipset = { .bus = { 0x00000001, nv31_bus_new }, .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, - .fb = nv46_fb_new, + .fb = { 0x00000001, nv46_fb_new }, .gpio = nv10_gpio_new, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, @@ -922,7 +922,7 @@ nv84_chipset = { .bus = { 0x00000001, nv50_bus_new }, .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, - .fb = g84_fb_new, + .fb = { 0x00000001, g84_fb_new }, .fuse = nv50_fuse_new, .gpio = nv50_gpio_new, .i2c = nv50_i2c_new, @@ -954,7 +954,7 @@ nv86_chipset = { .bus = { 0x00000001, nv50_bus_new }, .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, - .fb = g84_fb_new, + .fb = { 0x00000001, g84_fb_new }, .fuse = nv50_fuse_new, .gpio = nv50_gpio_new, .i2c = nv50_i2c_new, @@ -986,7 +986,7 @@ nv92_chipset = { .bus = { 0x00000001, nv50_bus_new }, .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, - .fb = g84_fb_new, + .fb = { 0x00000001, g84_fb_new }, .fuse = nv50_fuse_new, .gpio = nv50_gpio_new, .i2c = nv50_i2c_new, @@ -1018,7 +1018,7 @@ nv94_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, - .fb = g84_fb_new, + .fb = { 0x00000001, g84_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1050,7 +1050,7 @@ nv96_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, - .fb = g84_fb_new, + .fb = { 0x00000001, g84_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1082,7 +1082,7 @@ nv98_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g98_devinit_new }, - .fb = g84_fb_new, + .fb = { 0x00000001, g84_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1114,7 +1114,7 @@ nva0_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, - .fb = g84_fb_new, + .fb = { 0x00000001, g84_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = nv50_i2c_new, @@ -1146,7 +1146,7 @@ nva3_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, gt215_clk_new }, .devinit = { 0x00000001, gt215_devinit_new }, - .fb = gt215_fb_new, + .fb = { 0x00000001, gt215_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1180,7 +1180,7 @@ nva5_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, gt215_clk_new }, .devinit = { 0x00000001, gt215_devinit_new }, - .fb = gt215_fb_new, + .fb = { 0x00000001, gt215_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1213,7 +1213,7 @@ nva8_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, gt215_clk_new }, .devinit = { 0x00000001, gt215_devinit_new }, - .fb = gt215_fb_new, + .fb = { 0x00000001, gt215_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1246,7 +1246,7 @@ nvaa_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, mcp77_clk_new }, .devinit = { 0x00000001, g98_devinit_new }, - .fb = mcp77_fb_new, + .fb = { 0x00000001, mcp77_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1278,7 +1278,7 @@ nvac_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, mcp77_clk_new }, .devinit = { 0x00000001, g98_devinit_new }, - .fb = mcp77_fb_new, + .fb = { 0x00000001, mcp77_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1310,7 +1310,7 @@ nvaf_chipset = { .bus = { 0x00000001, g94_bus_new }, .clk = { 0x00000001, gt215_clk_new }, .devinit = { 0x00000001, mcp89_devinit_new }, - .fb = mcp89_fb_new, + .fb = { 0x00000001, mcp89_fb_new }, .fuse = nv50_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1343,7 +1343,7 @@ nvc0_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf100_fb_new, + .fb = { 0x00000001, gf100_fb_new }, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1380,7 +1380,7 @@ nvc1_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf108_fb_new, + .fb = { 0x00000001, gf108_fb_new }, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1416,7 +1416,7 @@ nvc3_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf100_fb_new, + .fb = { 0x00000001, gf100_fb_new }, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1452,7 +1452,7 @@ nvc4_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf100_fb_new, + .fb = { 0x00000001, gf100_fb_new }, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1489,7 +1489,7 @@ nvc8_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf100_fb_new, + .fb = { 0x00000001, gf100_fb_new }, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1526,7 +1526,7 @@ nvce_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf100_fb_new, + .fb = { 0x00000001, gf100_fb_new }, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1563,7 +1563,7 @@ nvcf_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf100_fb_new, + .fb = { 0x00000001, gf100_fb_new }, .fuse = gf100_fuse_new, .gpio = g94_gpio_new, .i2c = g94_i2c_new, @@ -1599,7 +1599,7 @@ nvd7_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf100_fb_new, + .fb = { 0x00000001, gf100_fb_new }, .fuse = gf100_fuse_new, .gpio = gf119_gpio_new, .i2c = gf117_i2c_new, @@ -1634,7 +1634,7 @@ nvd9_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gf100_fb_new, + .fb = { 0x00000001, gf100_fb_new }, .fuse = gf100_fuse_new, .gpio = gf119_gpio_new, .i2c = gf119_i2c_new, @@ -1670,7 +1670,7 @@ nve4_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gk104_fb_new, + .fb = { 0x00000001, gk104_fb_new }, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, .i2c = gk104_i2c_new, @@ -1709,7 +1709,7 @@ nve6_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gk104_fb_new, + .fb = { 0x00000001, gk104_fb_new }, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, .i2c = gk104_i2c_new, @@ -1748,7 +1748,7 @@ nve7_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gk104_fb_new, + .fb = { 0x00000001, gk104_fb_new }, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, .i2c = gk104_i2c_new, @@ -1785,7 +1785,7 @@ nvea_chipset = { .bar = { 0x00000001, gk20a_bar_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk20a_clk_new }, - .fb = gk20a_fb_new, + .fb = { 0x00000001, gk20a_fb_new }, .fuse = gf100_fuse_new, .ibus = gk20a_ibus_new, .imem = gk20a_instmem_new, @@ -1812,7 +1812,7 @@ nvf0_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gk110_fb_new, + .fb = { 0x00000001, gk110_fb_new }, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, @@ -1850,7 +1850,7 @@ nvf1_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gk110_fb_new, + .fb = { 0x00000001, gk110_fb_new }, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, @@ -1888,7 +1888,7 @@ nv106_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gk110_fb_new, + .fb = { 0x00000001, gk110_fb_new }, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, @@ -1926,7 +1926,7 @@ nv108_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, - .fb = gk110_fb_new, + .fb = { 0x00000001, gk110_fb_new }, .fuse = gf100_fuse_new, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, @@ -1964,7 +1964,7 @@ nv117_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gm107_devinit_new }, - .fb = gm107_fb_new, + .fb = { 0x00000001, gm107_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, @@ -2000,7 +2000,7 @@ nv118_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gm107_devinit_new }, - .fb = gm107_fb_new, + .fb = { 0x00000001, gm107_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, @@ -2034,7 +2034,7 @@ nv120_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fb = gm200_fb_new, + .fb = { 0x00000001, gm200_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2072,7 +2072,7 @@ nv124_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fb = gm200_fb_new, + .fb = { 0x00000001, gm200_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2110,7 +2110,7 @@ nv126_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, - .fb = gm200_fb_new, + .fb = { 0x00000001, gm200_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2146,7 +2146,7 @@ nv12b_chipset = { .bar = { 0x00000001, gm20b_bar_new }, .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gm20b_clk_new }, - .fb = gm20b_fb_new, + .fb = { 0x00000001, gm20b_fb_new }, .fuse = gm107_fuse_new, .ibus = gk20a_ibus_new, .imem = gk20a_instmem_new, @@ -2173,7 +2173,7 @@ nv130_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, - .fb = gp100_fb_new, + .fb = { 0x00000001, gp100_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2213,7 +2213,7 @@ nv132_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, - .fb = gp102_fb_new, + .fb = { 0x00000001, gp102_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2251,7 +2251,7 @@ nv134_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, - .fb = gp102_fb_new, + .fb = { 0x00000001, gp102_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2289,7 +2289,7 @@ nv136_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, - .fb = gp102_fb_new, + .fb = { 0x00000001, gp102_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2326,7 +2326,7 @@ nv137_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, - .fb = gp102_fb_new, + .fb = { 0x00000001, gp102_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2364,7 +2364,7 @@ nv138_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, - .fb = gp102_fb_new, + .fb = { 0x00000001, gp102_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, @@ -2398,7 +2398,7 @@ nv13b_chipset = { .bar = { 0x00000001, gm20b_bar_new }, .bus = { 0x00000001, gf100_bus_new }, .fault = { 0x00000001, gp10b_fault_new }, - .fb = gp10b_fb_new, + .fb = { 0x00000001, gp10b_fb_new }, .fuse = gm107_fuse_new, .ibus = gp10b_ibus_new, .imem = gk20a_instmem_new, @@ -2424,7 +2424,7 @@ nv140_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gv100_devinit_new }, .fault = { 0x00000001, gv100_fault_new }, - .fb = gv100_fb_new, + .fb = { 0x00000001, gv100_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, @@ -2468,7 +2468,7 @@ nv162_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, - .fb = gv100_fb_new, + .fb = { 0x00000001, gv100_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, @@ -2506,7 +2506,7 @@ nv164_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, - .fb = gv100_fb_new, + .fb = { 0x00000001, gv100_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, @@ -2545,7 +2545,7 @@ nv166_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, - .fb = gv100_fb_new, + .fb = { 0x00000001, gv100_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, @@ -2585,7 +2585,7 @@ nv167_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, - .fb = gv100_fb_new, + .fb = { 0x00000001, gv100_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, @@ -2623,7 +2623,7 @@ nv168_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, - .fb = gv100_fb_new, + .fb = { 0x00000001, gv100_fb_new }, .fuse = gm107_fuse_new, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, @@ -2658,7 +2658,7 @@ nv170_chipset = { .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .devinit = { 0x00000001, ga100_devinit_new }, - .fb = ga100_fb_new, + .fb = { 0x00000001, ga100_fb_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2675,7 +2675,7 @@ nv172_chipset = { .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .devinit = { 0x00000001, ga100_devinit_new }, - .fb = ga102_fb_new, + .fb = { 0x00000001, ga102_fb_new }, .gpio = ga102_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2694,7 +2694,7 @@ nv174_chipset = { .bar = { 0x00000001, tu102_bar_new }, .bios = { 0x00000001, nvkm_bios_new }, .devinit = { 0x00000001, ga100_devinit_new }, - .fb = ga102_fb_new, + .fb = { 0x00000001, ga102_fb_new }, .gpio = ga102_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_FB , fb); _(NVKM_SUBDEV_FUSE , fuse); _(NVKM_SUBDEV_GPIO , gpio); _(NVKM_SUBDEV_GSP , gsp); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c index 7a13165915c9..6faaea948fc4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c @@ -227,9 +227,9 @@ nvkm_fb = { void nvkm_fb_ctor(const struct nvkm_fb_func *func, struct nvkm_device *device, - int index, struct nvkm_fb *fb) + enum nvkm_subdev_type type, int inst, struct nvkm_fb *fb) { - nvkm_subdev_ctor(&nvkm_fb, device, index, &fb->subdev); + nvkm_subdev_ctor(&nvkm_fb, device, type, inst, &fb->subdev); fb->func = func; fb->tile.regions = fb->func->tile.regions; fb->page = nvkm_longopt(device->cfgopt, "NvFbBigPage", fb->func->default_bigpage); @@ -238,10 +238,10 @@ nvkm_fb_ctor(const struct nvkm_fb_func *func, struct nvkm_device *device, int nvkm_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device, - int index, struct nvkm_fb **pfb) + enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { if (!(*pfb = kzalloc(sizeof(**pfb), GFP_KERNEL))) return -ENOMEM; - nvkm_fb_ctor(func, device, index, *pfb); + nvkm_fb_ctor(func, device, type, inst, *pfb); return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.c index 06bf95c0c549..770a4ad39122 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.c @@ -32,7 +32,7 @@ g84_fb = { }; int -g84_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +g84_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nv50_fb_new_(&g84_fb, device, index, pfb); + return nv50_fb_new_(&g84_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.c index bf82686851cd..b47bebfbc26f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.c @@ -34,7 +34,7 @@ ga100_fb = { }; int -ga100_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +ga100_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gp102_fb_new_(&ga100_fb, device, index, pfb); + return gp102_fb_new_(&ga100_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga102.c index bcecf84a6e67..6ea7908f0563 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga102.c @@ -34,7 +34,7 @@ ga102_fb = { }; int -ga102_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +ga102_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gp102_fb_new_(&ga102_fb, device, index, pfb); + return gp102_fb_new_(&ga102_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c index e8dc4e913494..9dcc40f9ef79 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c @@ -117,13 +117,13 @@ gf100_fb_dtor(struct nvkm_fb *base) int gf100_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device, - int index, struct nvkm_fb **pfb) + enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { struct gf100_fb *fb; if (!(fb = kzalloc(sizeof(*fb), GFP_KERNEL))) return -ENOMEM; - nvkm_fb_ctor(func, device, index, &fb->base); + nvkm_fb_ctor(func, device, type, inst, &fb->base); *pfb = &fb->base; return 0; @@ -141,7 +141,7 @@ gf100_fb = { }; int -gf100_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gf100_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gf100_fb, device, index, pfb); + return gf100_fb_new_(&gf100_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.h b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.h index 2ed7cdaab37c..0cac7b06acc8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.h @@ -10,8 +10,8 @@ struct gf100_fb { dma_addr_t r100c10; }; -int gf100_fb_new_(const struct nvkm_fb_func *, struct nvkm_device *, - int index, struct nvkm_fb **); +int gf100_fb_new_(const struct nvkm_fb_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_fb **); void *gf100_fb_dtor(struct nvkm_fb *); void gf100_fb_init(struct nvkm_fb *); void gf100_fb_intr(struct nvkm_fb *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.c index 4a9f463745b5..76678dd60f93 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.c @@ -36,7 +36,7 @@ gf108_fb = { }; int -gf108_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gf108_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gf108_fb, device, index, pfb); + return gf100_fb_new_(&gf108_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.c index 48fd98e08baa..f73442ccb424 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.c @@ -83,7 +83,7 @@ gk104_fb = { }; int -gk104_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gk104_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gk104_fb, device, index, pfb); + return gf100_fb_new_(&gk104_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.c index 0695e5dd360e..45d6cdffafee 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.c @@ -65,7 +65,7 @@ gk110_fb = { }; int -gk110_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gk110_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gk110_fb, device, index, pfb); + return gf100_fb_new_(&gk110_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c index a7e29b125094..6bc42f89d8c4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c @@ -34,7 +34,7 @@ gk20a_fb = { }; int -gk20a_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gk20a_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gk20a_fb, device, index, pfb); + return gf100_fb_new_(&gk20a_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.c index 69c876d5d1c1..de52462a92bf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.c @@ -36,7 +36,7 @@ gm107_fb = { }; int -gm107_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gm107_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gm107_fb, device, index, pfb); + return gf100_fb_new_(&gm107_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.c index d3b8c3367152..5acf8d15d06f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.c @@ -67,7 +67,7 @@ gm200_fb = { }; int -gm200_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gm200_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gm200_fb, device, index, pfb); + return gf100_fb_new_(&gm200_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.c index 12db61e31128..86f61a3f2fea 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.c @@ -34,7 +34,7 @@ gm20b_fb = { }; int -gm20b_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gm20b_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gm20b_fb, device, index, pfb); + return gf100_fb_new_(&gm20b_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.c index 8205ce436b3e..09e943edc362 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.c @@ -71,7 +71,7 @@ gp100_fb = { }; int -gp100_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gp100_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gp100_fb, device, index, pfb); + return gf100_fb_new_(&gp100_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.c index fc8c93aa3da5..0e78b3d734a0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.c @@ -114,9 +114,9 @@ gp102_fb = { int gp102_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device, - int index, struct nvkm_fb **pfb) + enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - int ret = gf100_fb_new_(func, device, index, pfb); + int ret = gf100_fb_new_(func, device, type, inst, pfb); if (ret) return ret; @@ -126,9 +126,9 @@ gp102_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device, } int -gp102_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gp102_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gp102_fb_new_(&gp102_fb, device, index, pfb); + return gp102_fb_new_(&gp102_fb, device, type, inst, pfb); } MODULE_FIRMWARE("nvidia/gp102/nvdec/scrubber.bin"); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.c index af8e43979dc1..84c9815a6d48 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.c @@ -31,7 +31,7 @@ gp10b_fb = { }; int -gp10b_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gp10b_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gf100_fb_new_(&gp10b_fb, device, index, pfb); + return gf100_fb_new_(&gp10b_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.c index 9266559b45f9..c1ec9758617c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.c @@ -32,7 +32,7 @@ gt215_fb = { }; int -gt215_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gt215_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nv50_fb_new_(>215_fb, device, index, pfb); + return nv50_fb_new_(>215_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.c index feda86a5fba8..63daa83ae12d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.c @@ -42,9 +42,9 @@ gv100_fb = { }; int -gv100_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +gv100_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return gp102_fb_new_(&gv100_fb, device, index, pfb); + return gp102_fb_new_(&gv100_fb, device, type, inst, pfb); } MODULE_FIRMWARE("nvidia/gv100/nvdec/scrubber.bin"); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.c index 73b3b86a2826..70c7b08ee0a6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.c @@ -31,7 +31,7 @@ mcp77_fb = { }; int -mcp77_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +mcp77_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nv50_fb_new_(&mcp77_fb, device, index, pfb); + return nv50_fb_new_(&mcp77_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.c index 6d11e32ec7ad..308d955168e8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.c @@ -31,7 +31,7 @@ mcp89_fb = { }; int -mcp89_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +mcp89_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nv50_fb_new_(&mcp89_fb, device, index, pfb); + return nv50_fb_new_(&mcp89_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.c index c886664533c8..8d5a007ecc47 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.c @@ -44,7 +44,7 @@ nv04_fb = { }; int -nv04_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv04_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv04_fb, device, index, pfb); + return nvkm_fb_new_(&nv04_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.c index c998b7e96aa3..7d2c16b27032 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.c @@ -64,7 +64,7 @@ nv10_fb = { }; int -nv10_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv10_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv10_fb, device, index, pfb); + return nvkm_fb_new_(&nv10_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.c index 7b9f04f44af8..4bdad2abd56f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.c @@ -36,7 +36,7 @@ nv1a_fb = { }; int -nv1a_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv1a_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv1a_fb, device, index, pfb); + return nvkm_fb_new_(&nv1a_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c index e5ddbe6b698e..d254f27f9b37 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.c @@ -96,7 +96,7 @@ nv20_fb = { }; int -nv20_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv20_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv20_fb, device, index, pfb); + return nvkm_fb_new_(&nv20_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c index fb87e699ff54..47da66dea6e6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.c @@ -54,7 +54,7 @@ nv25_fb = { }; int -nv25_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv25_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv25_fb, device, index, pfb); + return nvkm_fb_new_(&nv25_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c index 6e033495fc1a..0f87efb636d5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.c @@ -127,7 +127,7 @@ nv30_fb = { }; int -nv30_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv30_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv30_fb, device, index, pfb); + return nvkm_fb_new_(&nv30_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c index 02a38d83c812..0694dcfd107e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.c @@ -56,7 +56,7 @@ nv35_fb = { }; int -nv35_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv35_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv35_fb, device, index, pfb); + return nvkm_fb_new_(&nv35_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c index f45143ebded3..1a39770372f1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.c @@ -56,7 +56,7 @@ nv36_fb = { }; int -nv36_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv36_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv36_fb, device, index, pfb); + return nvkm_fb_new_(&nv36_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c index f51ba70c673a..77dbb9d6ba48 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.c @@ -62,7 +62,7 @@ nv40_fb = { }; int -nv40_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv40_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv40_fb, device, index, pfb); + return nvkm_fb_new_(&nv40_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.c index b77f08d34cc3..0f9d9e48e7ad 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.c @@ -56,7 +56,7 @@ nv41_fb = { }; int -nv41_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv41_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv41_fb, device, index, pfb); + return nvkm_fb_new_(&nv41_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.c index b59dc486083d..b1046ee9f0ea 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.c @@ -65,7 +65,7 @@ nv44_fb = { }; int -nv44_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv44_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv44_fb, device, index, pfb); + return nvkm_fb_new_(&nv44_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.c index cab7d20fa039..0d78de422dfa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.c @@ -51,7 +51,7 @@ nv46_fb = { }; int -nv46_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv46_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv46_fb, device, index, pfb); + return nvkm_fb_new_(&nv46_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.c index a8b0ad4c871d..5cedde29c8ee 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.c @@ -39,7 +39,7 @@ nv47_fb = { }; int -nv47_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv47_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv47_fb, device, index, pfb); + return nvkm_fb_new_(&nv47_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.c index d0b317bb0252..95cc099603d8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.c @@ -39,7 +39,7 @@ nv49_fb = { }; int -nv49_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv49_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv49_fb, device, index, pfb); + return nvkm_fb_new_(&nv49_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.c index 6a6f0c086071..c9f3148f4e75 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.c @@ -37,7 +37,7 @@ nv4e_fb = { }; int -nv4e_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv4e_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nvkm_fb_new_(&nv4e_fb, device, index, pfb); + return nvkm_fb_new_(&nv4e_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c index b2f5bf8144ea..95fd8f834010 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c @@ -262,16 +262,15 @@ nv50_fb_ = { int nv50_fb_new_(const struct nv50_fb_func *func, struct nvkm_device *device, - int index, struct nvkm_fb **pfb) + enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { struct nv50_fb *fb; if (!(fb = kzalloc(sizeof(*fb), GFP_KERNEL))) return -ENOMEM; - nvkm_fb_ctor(&nv50_fb_, device, index, &fb->base); + nvkm_fb_ctor(&nv50_fb_, device, type, inst, &fb->base); fb->func = func; *pfb = &fb->base; - return 0; } @@ -283,7 +282,7 @@ nv50_fb = { }; int -nv50_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) +nv50_fb_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fb **pfb) { - return nv50_fb_new_(&nv50_fb, device, index, pfb); + return nv50_fb_new_(&nv50_fb, device, type, inst, pfb); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.h b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.h index 5e2b0c9539ed..a5e673859a90 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.h @@ -17,6 +17,6 @@ struct nv50_fb_func { u32 trap; }; -int nv50_fb_new_(const struct nv50_fb_func *, struct nvkm_device *, int index, +int nv50_fb_new_(const struct nv50_fb_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_fb **pfb); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h index 66932ac10d15..3f1be9780c65 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h @@ -38,9 +38,9 @@ struct nvkm_fb_func { }; void nvkm_fb_ctor(const struct nvkm_fb_func *, struct nvkm_device *device, - int index, struct nvkm_fb *); + enum nvkm_subdev_type type, int inst, struct nvkm_fb *); int nvkm_fb_new_(const struct nvkm_fb_func *, struct nvkm_device *device, - int index, struct nvkm_fb **); + enum nvkm_subdev_type type, int inst, struct nvkm_fb **); int nvkm_fb_bios_memtype(struct nvkm_bios *); void nv10_fb_tile_init(struct nvkm_fb *, int i, u32 addr, u32 size, @@ -78,7 +78,7 @@ int gm200_fb_init_page(struct nvkm_fb *); void gp100_fb_init_remapper(struct nvkm_fb *); void gp100_fb_init_unkn(struct nvkm_fb *); -int gp102_fb_new_(const struct nvkm_fb_func *, struct nvkm_device *, int, +int gp102_fb_new_(const struct nvkm_fb_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_fb **); bool gp102_fb_vpr_scrub_required(struct nvkm_fb *); int gp102_fb_vpr_scrub(struct nvkm_fb *); From 8d056d9987e3fb0189ffd281c7ba065bd265d8b0 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 11:18:45 +1000 Subject: [PATCH 25/87] drm/nouveau/fuse: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/fuse.h | 6 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 101 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/fuse/base.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fuse/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/fuse/nv50.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/fuse/priv.h | 4 +- 10 files changed, 67 insertions(+), 67 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index c1cb34ba1d40..3a264d25201d 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_fuse *fuse; struct nvkm_gpio *gpio; struct nvkm_gsp *gsp; struct nvkm_i2c *i2c; @@ -140,7 +139,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*fuse )(struct nvkm_device *, int idx, struct nvkm_fuse **); int (*gpio )(struct nvkm_device *, int idx, struct nvkm_gpio **); int (*gsp )(struct nvkm_device *, int idx, struct nvkm_gsp **); int (*i2c )(struct nvkm_device *, int idx, struct nvkm_i2c **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 85092d589ad4..e34c1b9c77b6 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: MIT */ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fuse.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fuse.h index 00111c34311e..dabbef0ac96c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/fuse.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/fuse.h @@ -11,7 +11,7 @@ struct nvkm_fuse { u32 nvkm_fuse_read(struct nvkm_fuse *, u32 addr); -int nv50_fuse_new(struct nvkm_device *, int, struct nvkm_fuse **); -int gf100_fuse_new(struct nvkm_device *, int, struct nvkm_fuse **); -int gm107_fuse_new(struct nvkm_device *, int, struct nvkm_fuse **); +int nv50_fuse_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fuse **); +int gf100_fuse_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fuse **); +int gm107_fuse_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fuse **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index e43a88fff9bb..fbe8a2379a6c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_FUSE ] = "fuse", [NVKM_SUBDEV_GPIO ] = "gpio", [NVKM_SUBDEV_GSP ] = "gsp", [NVKM_SUBDEV_I2C ] = "i2c", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index a4ef6cac85fa..0a4355686fcb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -816,7 +816,7 @@ nv50_chipset = { .clk = { 0x00000001, nv50_clk_new }, .devinit = { 0x00000001, nv50_devinit_new }, .fb = { 0x00000001, nv50_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = nv50_gpio_new, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, @@ -923,7 +923,7 @@ nv84_chipset = { .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = nv50_gpio_new, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, @@ -955,7 +955,7 @@ nv86_chipset = { .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = nv50_gpio_new, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, @@ -987,7 +987,7 @@ nv92_chipset = { .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = nv50_gpio_new, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, @@ -1019,7 +1019,7 @@ nv94_chipset = { .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1051,7 +1051,7 @@ nv96_chipset = { .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1083,7 +1083,7 @@ nv98_chipset = { .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g98_devinit_new }, .fb = { 0x00000001, g84_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1115,7 +1115,7 @@ nva0_chipset = { .clk = { 0x00000001, g84_clk_new }, .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, @@ -1147,7 +1147,7 @@ nva3_chipset = { .clk = { 0x00000001, gt215_clk_new }, .devinit = { 0x00000001, gt215_devinit_new }, .fb = { 0x00000001, gt215_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1181,7 +1181,7 @@ nva5_chipset = { .clk = { 0x00000001, gt215_clk_new }, .devinit = { 0x00000001, gt215_devinit_new }, .fb = { 0x00000001, gt215_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1214,7 +1214,7 @@ nva8_chipset = { .clk = { 0x00000001, gt215_clk_new }, .devinit = { 0x00000001, gt215_devinit_new }, .fb = { 0x00000001, gt215_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1247,7 +1247,7 @@ nvaa_chipset = { .clk = { 0x00000001, mcp77_clk_new }, .devinit = { 0x00000001, g98_devinit_new }, .fb = { 0x00000001, mcp77_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1279,7 +1279,7 @@ nvac_chipset = { .clk = { 0x00000001, mcp77_clk_new }, .devinit = { 0x00000001, g98_devinit_new }, .fb = { 0x00000001, mcp77_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1311,7 +1311,7 @@ nvaf_chipset = { .clk = { 0x00000001, gt215_clk_new }, .devinit = { 0x00000001, mcp89_devinit_new }, .fb = { 0x00000001, mcp89_fb_new }, - .fuse = nv50_fuse_new, + .fuse = { 0x00000001, nv50_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .imem = nv50_instmem_new, @@ -1344,7 +1344,7 @@ nvc0_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, @@ -1381,7 +1381,7 @@ nvc1_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf108_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, @@ -1417,7 +1417,7 @@ nvc3_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, @@ -1453,7 +1453,7 @@ nvc4_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, @@ -1490,7 +1490,7 @@ nvc8_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, @@ -1527,7 +1527,7 @@ nvce_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, @@ -1564,7 +1564,7 @@ nvcf_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = g94_gpio_new, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, @@ -1600,7 +1600,7 @@ nvd7_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gf119_gpio_new, .i2c = gf117_i2c_new, .ibus = gf117_ibus_new, @@ -1635,7 +1635,7 @@ nvd9_chipset = { .clk = { 0x00000001, gf100_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gf119_gpio_new, .i2c = gf119_i2c_new, .ibus = gf117_ibus_new, @@ -1671,7 +1671,7 @@ nve4_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk104_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk104_i2c_new, .ibus = gk104_ibus_new, @@ -1710,7 +1710,7 @@ nve6_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk104_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk104_i2c_new, .ibus = gk104_ibus_new, @@ -1749,7 +1749,7 @@ nve7_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk104_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk104_i2c_new, .ibus = gk104_ibus_new, @@ -1786,7 +1786,7 @@ nvea_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gk20a_clk_new }, .fb = { 0x00000001, gk20a_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .ibus = gk20a_ibus_new, .imem = gk20a_instmem_new, .ltc = gk104_ltc_new, @@ -1813,7 +1813,7 @@ nvf0_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk110_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, @@ -1851,7 +1851,7 @@ nvf1_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk110_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, @@ -1889,7 +1889,7 @@ nv106_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk110_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, @@ -1927,7 +1927,7 @@ nv108_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk110_fb_new }, - .fuse = gf100_fuse_new, + .fuse = { 0x00000001, gf100_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, @@ -1965,7 +1965,7 @@ nv117_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gm107_devinit_new }, .fb = { 0x00000001, gm107_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, @@ -2001,7 +2001,7 @@ nv118_chipset = { .clk = { 0x00000001, gk104_clk_new }, .devinit = { 0x00000001, gm107_devinit_new }, .fb = { 0x00000001, gm107_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, @@ -2035,7 +2035,7 @@ nv120_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fb = { 0x00000001, gm200_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2073,7 +2073,7 @@ nv124_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fb = { 0x00000001, gm200_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2111,7 +2111,7 @@ nv126_chipset = { .bus = { 0x00000001, gf100_bus_new }, .devinit = { 0x00000001, gm200_devinit_new }, .fb = { 0x00000001, gm200_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2147,7 +2147,7 @@ nv12b_chipset = { .bus = { 0x00000001, gf100_bus_new }, .clk = { 0x00000001, gm20b_clk_new }, .fb = { 0x00000001, gm20b_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .ibus = gk20a_ibus_new, .imem = gk20a_instmem_new, .ltc = gm200_ltc_new, @@ -2174,7 +2174,7 @@ nv130_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp100_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2214,7 +2214,7 @@ nv132_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2252,7 +2252,7 @@ nv134_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2290,7 +2290,7 @@ nv136_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2327,7 +2327,7 @@ nv137_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2365,7 +2365,7 @@ nv138_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2399,7 +2399,7 @@ nv13b_chipset = { .bus = { 0x00000001, gf100_bus_new }, .fault = { 0x00000001, gp10b_fault_new }, .fb = { 0x00000001, gp10b_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .ibus = gp10b_ibus_new, .imem = gk20a_instmem_new, .ltc = gp10b_ltc_new, @@ -2425,7 +2425,7 @@ nv140_chipset = { .devinit = { 0x00000001, gv100_devinit_new }, .fault = { 0x00000001, gv100_fault_new }, .fb = { 0x00000001, gv100_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, @@ -2469,7 +2469,7 @@ nv162_chipset = { .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, @@ -2507,7 +2507,7 @@ nv164_chipset = { .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, @@ -2546,7 +2546,7 @@ nv166_chipset = { .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, @@ -2586,7 +2586,7 @@ nv167_chipset = { .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, @@ -2624,7 +2624,7 @@ nv168_chipset = { .devinit = { 0x00000001, tu102_devinit_new }, .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, - .fuse = gm107_fuse_new, + .fuse = { 0x00000001, gm107_fuse_new }, .gpio = gk104_gpio_new, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_FUSE , fuse); _(NVKM_SUBDEV_GPIO , gpio); _(NVKM_SUBDEV_GSP , gsp); _(NVKM_SUBDEV_I2C , i2c); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.c index 1c3c18ea8ced..375dfce09f84 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.c @@ -42,12 +42,12 @@ nvkm_fuse = { int nvkm_fuse_new_(const struct nvkm_fuse_func *func, struct nvkm_device *device, - int index, struct nvkm_fuse **pfuse) + enum nvkm_subdev_type type, int inst, struct nvkm_fuse **pfuse) { struct nvkm_fuse *fuse; if (!(fuse = *pfuse = kzalloc(sizeof(*fuse), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_fuse, device, index, &fuse->subdev); + nvkm_subdev_ctor(&nvkm_fuse, device, type, inst, &fuse->subdev); fuse->func = func; spin_lock_init(&fuse->lock); return 0; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.c index 13671fedc805..01f770654b1d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.c @@ -47,7 +47,8 @@ gf100_fuse = { }; int -gf100_fuse_new(struct nvkm_device *device, int index, struct nvkm_fuse **pfuse) +gf100_fuse_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fuse **pfuse) { - return nvkm_fuse_new_(&gf100_fuse, device, index, pfuse); + return nvkm_fuse_new_(&gf100_fuse, device, type, inst, pfuse); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c index 9aff4ea04506..7dc99492f536 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c @@ -36,7 +36,8 @@ gm107_fuse = { }; int -gm107_fuse_new(struct nvkm_device *device, int index, struct nvkm_fuse **pfuse) +gm107_fuse_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fuse **pfuse) { - return nvkm_fuse_new_(&gm107_fuse, device, index, pfuse); + return nvkm_fuse_new_(&gm107_fuse, device, type, inst, pfuse); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.c index 514c193db25d..2505e8e1c1d3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.c @@ -45,7 +45,8 @@ nv50_fuse = { }; int -nv50_fuse_new(struct nvkm_device *device, int index, struct nvkm_fuse **pfuse) +nv50_fuse_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fuse **pfuse) { - return nvkm_fuse_new_(&nv50_fuse, device, index, pfuse); + return nvkm_fuse_new_(&nv50_fuse, device, type, inst, pfuse); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/priv.h index 2edc612408dd..e83d0c30dff6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/priv.h @@ -8,6 +8,6 @@ struct nvkm_fuse_func { u32 (*read)(struct nvkm_fuse *, u32 addr); }; -int nvkm_fuse_new_(const struct nvkm_fuse_func *, struct nvkm_device *, - int index, struct nvkm_fuse **); +int nvkm_fuse_new_(const struct nvkm_fuse_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_fuse **); #endif From 01055c01ba435cce2e9644a2c1582948f4c64883 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 11:21:38 +1000 Subject: [PATCH 26/87] drm/nouveau/gpio: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/gpio.h | 12 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 165 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/gpio/base.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/gpio/g94.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/gpio/ga102.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/gpio/gf119.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/gpio/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/gpio/nv10.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/gpio/nv50.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/gpio/priv.h | 4 +- 13 files changed, 111 insertions(+), 108 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 3a264d25201d..42ce75d325fa 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_gpio *gpio; struct nvkm_gsp *gsp; struct nvkm_i2c *i2c; struct nvkm_subdev *ibus; @@ -139,7 +138,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*gpio )(struct nvkm_device *, int idx, struct nvkm_gpio **); int (*gsp )(struct nvkm_device *, int idx, struct nvkm_gsp **); int (*i2c )(struct nvkm_device *, int idx, struct nvkm_i2c **); int (*ibus )(struct nvkm_device *, int idx, struct nvkm_subdev **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index e34c1b9c77b6..13c8d3736eed 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: MIT */ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GPIO , struct nvkm_gpio , gpio) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gpio.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gpio.h index cdcce5ece6ff..0e46ea1fe972 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gpio.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gpio.h @@ -32,10 +32,10 @@ int nvkm_gpio_find(struct nvkm_gpio *, int idx, u8 tag, u8 line, int nvkm_gpio_set(struct nvkm_gpio *, int idx, u8 tag, u8 line, int state); int nvkm_gpio_get(struct nvkm_gpio *, int idx, u8 tag, u8 line); -int nv10_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **); -int nv50_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **); -int g94_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **); -int gf119_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **); -int gk104_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **); -int ga102_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **); +int nv10_gpio_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gpio **); +int nv50_gpio_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gpio **); +int g94_gpio_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gpio **); +int gf119_gpio_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gpio **); +int gk104_gpio_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gpio **); +int ga102_gpio_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gpio **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index fbe8a2379a6c..b83dd00160c9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_GPIO ] = "gpio", [NVKM_SUBDEV_GSP ] = "gsp", [NVKM_SUBDEV_I2C ] = "i2c", [NVKM_SUBDEV_IBUS ] = "priv", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 0a4355686fcb..86dd1353b52b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -124,7 +124,7 @@ nv10_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv04_mc_new, @@ -144,7 +144,7 @@ nv11_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv11_mc_new, @@ -166,7 +166,7 @@ nv15_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv04_mc_new, @@ -188,7 +188,7 @@ nv17_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -210,7 +210,7 @@ nv18_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -232,7 +232,7 @@ nv1a_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv1a_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv04_mc_new, @@ -254,7 +254,7 @@ nv1f_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv1a_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -276,7 +276,7 @@ nv20_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv20_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -298,7 +298,7 @@ nv25_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv25_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -320,7 +320,7 @@ nv28_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv25_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -342,7 +342,7 @@ nv2a_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv25_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -364,7 +364,7 @@ nv30_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv30_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -386,7 +386,7 @@ nv31_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv30_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -409,7 +409,7 @@ nv34_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -432,7 +432,7 @@ nv35_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv35_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -454,7 +454,7 @@ nv36_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv36_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv04_instmem_new, .mc = nv17_mc_new, @@ -477,7 +477,7 @@ nv40_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv40_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv17_mc_new, @@ -503,7 +503,7 @@ nv41_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv41_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv17_mc_new, @@ -529,7 +529,7 @@ nv42_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv41_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv17_mc_new, @@ -555,7 +555,7 @@ nv43_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv41_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv17_mc_new, @@ -581,7 +581,7 @@ nv44_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv44_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new, @@ -607,7 +607,7 @@ nv45_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv40_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv17_mc_new, @@ -633,7 +633,7 @@ nv46_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new, @@ -659,7 +659,7 @@ nv47_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv47_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv17_mc_new, @@ -685,7 +685,7 @@ nv49_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv49_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv17_mc_new, @@ -711,7 +711,7 @@ nv4a_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv44_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new, @@ -737,7 +737,7 @@ nv4b_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv49_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv17_mc_new, @@ -763,7 +763,7 @@ nv4c_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new, @@ -789,7 +789,7 @@ nv4e_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv4e_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv4e_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new, @@ -817,7 +817,7 @@ nv50_chipset = { .devinit = { 0x00000001, nv50_devinit_new }, .fb = { 0x00000001, nv50_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = nv50_gpio_new, + .gpio = { 0x00000001, nv50_gpio_new }, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, .mc = nv50_mc_new, @@ -844,7 +844,7 @@ nv63_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new, @@ -870,7 +870,7 @@ nv67_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new, @@ -896,7 +896,7 @@ nv68_chipset = { .clk = { 0x00000001, nv40_clk_new }, .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, - .gpio = nv10_gpio_new, + .gpio = { 0x00000001, nv10_gpio_new }, .i2c = nv04_i2c_new, .imem = nv40_instmem_new, .mc = nv44_mc_new, @@ -924,7 +924,7 @@ nv84_chipset = { .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = nv50_gpio_new, + .gpio = { 0x00000001, nv50_gpio_new }, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, .mc = g84_mc_new, @@ -956,7 +956,7 @@ nv86_chipset = { .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = nv50_gpio_new, + .gpio = { 0x00000001, nv50_gpio_new }, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, .mc = g84_mc_new, @@ -988,7 +988,7 @@ nv92_chipset = { .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = nv50_gpio_new, + .gpio = { 0x00000001, nv50_gpio_new }, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, .mc = g84_mc_new, @@ -1020,7 +1020,7 @@ nv94_chipset = { .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = g84_mc_new, @@ -1052,7 +1052,7 @@ nv96_chipset = { .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = g84_mc_new, @@ -1084,7 +1084,7 @@ nv98_chipset = { .devinit = { 0x00000001, g98_devinit_new }, .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = g98_mc_new, @@ -1116,7 +1116,7 @@ nva0_chipset = { .devinit = { 0x00000001, g84_devinit_new }, .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = nv50_i2c_new, .imem = nv50_instmem_new, .mc = g84_mc_new, @@ -1148,7 +1148,7 @@ nva3_chipset = { .devinit = { 0x00000001, gt215_devinit_new }, .fb = { 0x00000001, gt215_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = gt215_mc_new, @@ -1182,7 +1182,7 @@ nva5_chipset = { .devinit = { 0x00000001, gt215_devinit_new }, .fb = { 0x00000001, gt215_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = gt215_mc_new, @@ -1215,7 +1215,7 @@ nva8_chipset = { .devinit = { 0x00000001, gt215_devinit_new }, .fb = { 0x00000001, gt215_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = gt215_mc_new, @@ -1248,7 +1248,7 @@ nvaa_chipset = { .devinit = { 0x00000001, g98_devinit_new }, .fb = { 0x00000001, mcp77_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = g98_mc_new, @@ -1280,7 +1280,7 @@ nvac_chipset = { .devinit = { 0x00000001, g98_devinit_new }, .fb = { 0x00000001, mcp77_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = g98_mc_new, @@ -1312,7 +1312,7 @@ nvaf_chipset = { .devinit = { 0x00000001, mcp89_devinit_new }, .fb = { 0x00000001, mcp89_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .imem = nv50_instmem_new, .mc = gt215_mc_new, @@ -1345,7 +1345,7 @@ nvc0_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, @@ -1382,7 +1382,7 @@ nvc1_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf108_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, @@ -1418,7 +1418,7 @@ nvc3_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, @@ -1454,7 +1454,7 @@ nvc4_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, @@ -1491,7 +1491,7 @@ nvc8_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, @@ -1528,7 +1528,7 @@ nvce_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, @@ -1565,7 +1565,7 @@ nvcf_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = g94_gpio_new, + .gpio = { 0x00000001, g94_gpio_new }, .i2c = g94_i2c_new, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, @@ -1601,7 +1601,7 @@ nvd7_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gf119_gpio_new, + .gpio = { 0x00000001, gf119_gpio_new }, .i2c = gf117_i2c_new, .ibus = gf117_ibus_new, .iccsense = gf100_iccsense_new, @@ -1636,7 +1636,7 @@ nvd9_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gf119_gpio_new, + .gpio = { 0x00000001, gf119_gpio_new }, .i2c = gf119_i2c_new, .ibus = gf117_ibus_new, .iccsense = gf100_iccsense_new, @@ -1672,7 +1672,7 @@ nve4_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk104_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk104_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -1711,7 +1711,7 @@ nve6_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk104_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk104_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -1750,7 +1750,7 @@ nve7_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk104_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk104_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -1814,7 +1814,7 @@ nvf0_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk110_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -1852,7 +1852,7 @@ nvf1_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk110_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -1890,7 +1890,7 @@ nv106_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk110_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -1928,7 +1928,7 @@ nv108_chipset = { .devinit = { 0x00000001, gf100_devinit_new }, .fb = { 0x00000001, gk110_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -1966,7 +1966,7 @@ nv117_chipset = { .devinit = { 0x00000001, gm107_devinit_new }, .fb = { 0x00000001, gm107_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -2002,7 +2002,7 @@ nv118_chipset = { .devinit = { 0x00000001, gm107_devinit_new }, .fb = { 0x00000001, gm107_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gk110_i2c_new, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, @@ -2036,7 +2036,7 @@ nv120_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fb = { 0x00000001, gm200_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .iccsense = gf100_iccsense_new, @@ -2074,7 +2074,7 @@ nv124_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fb = { 0x00000001, gm200_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .iccsense = gf100_iccsense_new, @@ -2112,7 +2112,7 @@ nv126_chipset = { .devinit = { 0x00000001, gm200_devinit_new }, .fb = { 0x00000001, gm200_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .iccsense = gf100_iccsense_new, @@ -2175,7 +2175,7 @@ nv130_chipset = { .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2215,7 +2215,7 @@ nv132_chipset = { .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2253,7 +2253,7 @@ nv134_chipset = { .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2291,7 +2291,7 @@ nv136_chipset = { .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2328,7 +2328,7 @@ nv137_chipset = { .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2366,7 +2366,7 @@ nv138_chipset = { .fault = { 0x00000001, gp100_fault_new }, .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2426,7 +2426,7 @@ nv140_chipset = { .fault = { 0x00000001, gv100_fault_new }, .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2470,7 +2470,7 @@ nv162_chipset = { .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2508,7 +2508,7 @@ nv164_chipset = { .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2547,7 +2547,7 @@ nv166_chipset = { .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2587,7 +2587,7 @@ nv167_chipset = { .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2625,7 +2625,7 @@ nv168_chipset = { .fault = { 0x00000001, tu102_fault_new }, .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .gsp = gv100_gsp_new, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, @@ -2659,7 +2659,7 @@ nv170_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .devinit = { 0x00000001, ga100_devinit_new }, .fb = { 0x00000001, ga100_fb_new }, - .gpio = gk104_gpio_new, + .gpio = { 0x00000001, gk104_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2676,7 +2676,7 @@ nv172_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .devinit = { 0x00000001, ga100_devinit_new }, .fb = { 0x00000001, ga102_fb_new }, - .gpio = ga102_gpio_new, + .gpio = { 0x00000001, ga102_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2695,7 +2695,7 @@ nv174_chipset = { .bios = { 0x00000001, nvkm_bios_new }, .devinit = { 0x00000001, ga100_devinit_new }, .fb = { 0x00000001, ga102_fb_new }, - .gpio = ga102_gpio_new, + .gpio = { 0x00000001, ga102_gpio_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_GPIO , gpio); _(NVKM_SUBDEV_GSP , gsp); _(NVKM_SUBDEV_I2C , i2c); _(NVKM_SUBDEV_IBUS , ibus); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c index 914276410ef8..048bcc70c3f4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c @@ -241,14 +241,14 @@ nvkm_gpio = { int nvkm_gpio_new_(const struct nvkm_gpio_func *func, struct nvkm_device *device, - int index, struct nvkm_gpio **pgpio) + enum nvkm_subdev_type type, int inst, struct nvkm_gpio **pgpio) { struct nvkm_gpio *gpio; if (!(gpio = *pgpio = kzalloc(sizeof(*gpio), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_gpio, device, index, &gpio->subdev); + nvkm_subdev_ctor(&nvkm_gpio, device, type, inst, &gpio->subdev); gpio->func = func; return nvkm_event_init(&nvkm_gpio_intr_func, 2, func->lines, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.c index 6dcda55fb865..114728ccdf8e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.c @@ -68,7 +68,8 @@ g94_gpio = { }; int -g94_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio) +g94_gpio_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_gpio **pgpio) { - return nvkm_gpio_new_(&g94_gpio, device, index, pgpio); + return nvkm_gpio_new_(&g94_gpio, device, type, inst, pgpio); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.c index 62c791baf400..4a96f926b66d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.c @@ -112,7 +112,8 @@ ga102_gpio = { }; int -ga102_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio) +ga102_gpio_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_gpio **pgpio) { - return nvkm_gpio_new_(&ga102_gpio, device, index, pgpio); + return nvkm_gpio_new_(&ga102_gpio, device, type, inst, pgpio); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.c index bb7400dfaef8..ecb19e4f5c48 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.c @@ -80,7 +80,8 @@ gf119_gpio = { }; int -gf119_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio) +gf119_gpio_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_gpio **pgpio) { - return nvkm_gpio_new_(&gf119_gpio, device, index, pgpio); + return nvkm_gpio_new_(&gf119_gpio, device, type, inst, pgpio); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.c index 2ead515b8530..c0e4cdb45520 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.c @@ -68,7 +68,8 @@ gk104_gpio = { }; int -gk104_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio) +gk104_gpio_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_gpio **pgpio) { - return nvkm_gpio_new_(&gk104_gpio, device, index, pgpio); + return nvkm_gpio_new_(&gk104_gpio, device, type, inst, pgpio); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.c index ae3499b48330..48ad29b5638f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.c @@ -112,7 +112,8 @@ nv10_gpio = { }; int -nv10_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio) +nv10_gpio_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_gpio **pgpio) { - return nvkm_gpio_new_(&nv10_gpio, device, index, pgpio); + return nvkm_gpio_new_(&nv10_gpio, device, type, inst, pgpio); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.c index 73923fd5f7f2..b86c49762f11 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.c @@ -126,7 +126,8 @@ nv50_gpio = { }; int -nv50_gpio_new(struct nvkm_device *device, int index, struct nvkm_gpio **pgpio) +nv50_gpio_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_gpio **pgpio) { - return nvkm_gpio_new_(&nv50_gpio, device, index, pgpio); + return nvkm_gpio_new_(&nv50_gpio, device, type, inst, pgpio); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/priv.h index 59e39affe2a0..6590d81164e7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/priv.h @@ -28,8 +28,8 @@ struct nvkm_gpio_func { void (*reset)(struct nvkm_gpio *, u8); }; -int nvkm_gpio_new_(const struct nvkm_gpio_func *, struct nvkm_device *, - int index, struct nvkm_gpio **); +int nvkm_gpio_new_(const struct nvkm_gpio_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_gpio **); void nv50_gpio_reset(struct nvkm_gpio *, u8); int nv50_gpio_drive(struct nvkm_gpio *, int, int, int); From b240b21261c2a40ed3afbaf811a9f473d3ad926a Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 11:23:38 +1000 Subject: [PATCH 27/87] drm/nouveau/gsp: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 2 -- drivers/gpu/drm/nouveau/include/nvkm/core/layout.h | 1 + drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 13 ++++++------- drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.c | 5 +++-- drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h | 2 +- 8 files changed, 14 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 42ce75d325fa..4b7f75aaf7d8 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_gsp *gsp; struct nvkm_i2c *i2c; struct nvkm_subdev *ibus; struct nvkm_iccsense *iccsense; @@ -138,7 +137,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*gsp )(struct nvkm_device *, int idx, struct nvkm_gsp **); int (*i2c )(struct nvkm_device *, int idx, struct nvkm_i2c **); int (*ibus )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*iccsense)(struct nvkm_device *, int idx, struct nvkm_iccsense **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 13c8d3736eed..a307c985bb3a 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -9,3 +9,4 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h index 06db67610a50..cf42a59d4e58 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h @@ -9,5 +9,5 @@ struct nvkm_gsp { struct nvkm_falcon falcon; }; -int gv100_gsp_new(struct nvkm_device *, int, struct nvkm_gsp **); +int gv100_gsp_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_gsp **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index b83dd00160c9..17156b1d7d59 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_GSP ] = "gsp", [NVKM_SUBDEV_I2C ] = "i2c", [NVKM_SUBDEV_IBUS ] = "priv", [NVKM_SUBDEV_ICCSENSE] = "iccsense", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 86dd1353b52b..8f043d7c209b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2427,7 +2427,7 @@ nv140_chipset = { .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .gsp = gv100_gsp_new, + .gsp = { 0x00000001, gv100_gsp_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2471,7 +2471,7 @@ nv162_chipset = { .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .gsp = gv100_gsp_new, + .gsp = { 0x00000001, gv100_gsp_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2509,7 +2509,7 @@ nv164_chipset = { .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .gsp = gv100_gsp_new, + .gsp = { 0x00000001, gv100_gsp_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2548,7 +2548,7 @@ nv166_chipset = { .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .gsp = gv100_gsp_new, + .gsp = { 0x00000001, gv100_gsp_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2588,7 +2588,7 @@ nv167_chipset = { .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .gsp = gv100_gsp_new, + .gsp = { 0x00000001, gv100_gsp_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -2626,7 +2626,7 @@ nv168_chipset = { .fb = { 0x00000001, gv100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .gsp = gv100_gsp_new, + .gsp = { 0x00000001, gv100_gsp_new }, .i2c = gm200_i2c_new, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_GSP , gsp); _(NVKM_SUBDEV_I2C , i2c); _(NVKM_SUBDEV_IBUS , ibus); _(NVKM_SUBDEV_ICCSENSE, iccsense); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c index 7bfcca9ec266..22574886b819 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c @@ -40,14 +40,14 @@ nvkm_gsp = { int nvkm_gsp_new_(const struct nvkm_gsp_fwif *fwif, struct nvkm_device *device, - int index, struct nvkm_gsp **pgsp) + enum nvkm_subdev_type type, int inst, struct nvkm_gsp **pgsp) { struct nvkm_gsp *gsp; if (!(gsp = *pgsp = kzalloc(sizeof(*gsp), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_gsp, device, index, &gsp->subdev); + nvkm_subdev_ctor(&nvkm_gsp, device, type, inst, &gsp->subdev); fwif = nvkm_firmware_load(&gsp->subdev, fwif, "Gsp", gsp); if (IS_ERR(fwif)) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.c index 2114f9b00a28..2ac7fc934c09 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.c @@ -49,7 +49,8 @@ gv100_gsp[] = { }; int -gv100_gsp_new(struct nvkm_device *device, int index, struct nvkm_gsp **pgsp) +gv100_gsp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_gsp **pgsp) { - return nvkm_gsp_new_(gv100_gsp, device, index, pgsp); + return nvkm_gsp_new_(gv100_gsp, device, type, inst, pgsp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h index 92820fb997c1..19381ddd38d4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h @@ -10,6 +10,6 @@ struct nvkm_gsp_fwif { const struct nvkm_falcon_func *flcn; }; -int nvkm_gsp_new_(const struct nvkm_gsp_fwif *, struct nvkm_device *, int, +int nvkm_gsp_new_(const struct nvkm_gsp_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_gsp **); #endif From c6ce0861fe71fe83e51b202ebd2b9f9de7e652a0 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:03:13 +1000 Subject: [PATCH 28/87] drm/nouveau/i2c: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/i2c.h | 18 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 169 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/i2c/base.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/gf117.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/gf119.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/gk110.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/gm200.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/nv04.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/nv50.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/i2c/priv.h | 4 +- 16 files changed, 125 insertions(+), 119 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 4b7f75aaf7d8..2dc7134718b4 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_i2c *i2c; struct nvkm_subdev *ibus; struct nvkm_iccsense *iccsense; struct nvkm_instmem *imem; @@ -137,7 +136,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*i2c )(struct nvkm_device *, int idx, struct nvkm_i2c **); int (*ibus )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*iccsense)(struct nvkm_device *, int idx, struct nvkm_iccsense **); int (*imem )(struct nvkm_device *, int idx, struct nvkm_instmem **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index a307c985bb3a..61f8237e137d 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -2,6 +2,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GPIO , struct nvkm_gpio , gpio) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_I2C , struct nvkm_i2c , i2c) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h index 640f649ce497..146e13292203 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h @@ -85,15 +85,15 @@ struct nvkm_i2c { struct nvkm_i2c_bus *nvkm_i2c_bus_find(struct nvkm_i2c *, int); struct nvkm_i2c_aux *nvkm_i2c_aux_find(struct nvkm_i2c *, int); -int nv04_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); -int nv4e_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); -int nv50_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); -int g94_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); -int gf117_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); -int gf119_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); -int gk104_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); -int gk110_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); -int gm200_i2c_new(struct nvkm_device *, int, struct nvkm_i2c **); +int nv04_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); +int nv4e_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); +int nv50_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); +int g94_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); +int gf117_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); +int gf119_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); +int gk104_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); +int gk110_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); +int gm200_i2c_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_i2c **); static inline int nvkm_rdi2cr(struct i2c_adapter *adap, u8 addr, u8 reg) diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 17156b1d7d59..cfd4ba06b112 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_I2C ] = "i2c", [NVKM_SUBDEV_IBUS ] = "priv", [NVKM_SUBDEV_ICCSENSE] = "iccsense", [NVKM_SUBDEV_INSTMEM ] = "imem", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 8f043d7c209b..2de86304d7a3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -82,7 +82,7 @@ nv4_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv04_devinit_new }, .fb = { 0x00000001, nv04_fb_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv04_mc_new, .mmu = nv04_mmu_new, @@ -103,7 +103,7 @@ nv5_chipset = { .clk = { 0x00000001, nv04_clk_new }, .devinit = { 0x00000001, nv05_devinit_new }, .fb = { 0x00000001, nv04_fb_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv04_mc_new, .mmu = nv04_mmu_new, @@ -125,7 +125,7 @@ nv10_chipset = { .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv04_mc_new, .mmu = nv04_mmu_new, @@ -145,7 +145,7 @@ nv11_chipset = { .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv11_mc_new, .mmu = nv04_mmu_new, @@ -167,7 +167,7 @@ nv15_chipset = { .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv04_mc_new, .mmu = nv04_mmu_new, @@ -189,7 +189,7 @@ nv17_chipset = { .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -211,7 +211,7 @@ nv18_chipset = { .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -233,7 +233,7 @@ nv1a_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv1a_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv04_mc_new, .mmu = nv04_mmu_new, @@ -255,7 +255,7 @@ nv1f_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv1a_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -277,7 +277,7 @@ nv20_chipset = { .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv20_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -299,7 +299,7 @@ nv25_chipset = { .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv25_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -321,7 +321,7 @@ nv28_chipset = { .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv25_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -343,7 +343,7 @@ nv2a_chipset = { .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv25_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -365,7 +365,7 @@ nv30_chipset = { .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv30_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -387,7 +387,7 @@ nv31_chipset = { .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv30_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -410,7 +410,7 @@ nv34_chipset = { .devinit = { 0x00000001, nv10_devinit_new }, .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -433,7 +433,7 @@ nv35_chipset = { .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv35_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -455,7 +455,7 @@ nv36_chipset = { .devinit = { 0x00000001, nv20_devinit_new }, .fb = { 0x00000001, nv36_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv04_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -478,7 +478,7 @@ nv40_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv40_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -504,7 +504,7 @@ nv41_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv41_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv17_mc_new, .mmu = nv41_mmu_new, @@ -530,7 +530,7 @@ nv42_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv41_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv17_mc_new, .mmu = nv41_mmu_new, @@ -556,7 +556,7 @@ nv43_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv41_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv17_mc_new, .mmu = nv41_mmu_new, @@ -582,7 +582,7 @@ nv44_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv44_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv44_mc_new, .mmu = nv44_mmu_new, @@ -608,7 +608,7 @@ nv45_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv40_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv17_mc_new, .mmu = nv04_mmu_new, @@ -634,7 +634,7 @@ nv46_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv44_mc_new, .mmu = nv44_mmu_new, @@ -660,7 +660,7 @@ nv47_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv47_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv17_mc_new, .mmu = nv41_mmu_new, @@ -686,7 +686,7 @@ nv49_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv49_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv17_mc_new, .mmu = nv41_mmu_new, @@ -712,7 +712,7 @@ nv4a_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv44_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv44_mc_new, .mmu = nv04_mmu_new, @@ -738,7 +738,7 @@ nv4b_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv49_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv17_mc_new, .mmu = nv41_mmu_new, @@ -764,7 +764,7 @@ nv4c_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv44_mc_new, .mmu = nv44_mmu_new, @@ -790,7 +790,7 @@ nv4e_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv4e_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv4e_i2c_new, + .i2c = { 0x00000001, nv4e_i2c_new }, .imem = nv40_instmem_new, .mc = nv44_mc_new, .mmu = nv44_mmu_new, @@ -818,7 +818,7 @@ nv50_chipset = { .fb = { 0x00000001, nv50_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, nv50_gpio_new }, - .i2c = nv50_i2c_new, + .i2c = { 0x00000001, nv50_i2c_new }, .imem = nv50_instmem_new, .mc = nv50_mc_new, .mmu = nv50_mmu_new, @@ -845,7 +845,7 @@ nv63_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv44_mc_new, .mmu = nv44_mmu_new, @@ -871,7 +871,7 @@ nv67_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv44_mc_new, .mmu = nv44_mmu_new, @@ -897,7 +897,7 @@ nv68_chipset = { .devinit = { 0x00000001, nv1a_devinit_new }, .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, - .i2c = nv04_i2c_new, + .i2c = { 0x00000001, nv04_i2c_new }, .imem = nv40_instmem_new, .mc = nv44_mc_new, .mmu = nv44_mmu_new, @@ -925,7 +925,7 @@ nv84_chipset = { .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, nv50_gpio_new }, - .i2c = nv50_i2c_new, + .i2c = { 0x00000001, nv50_i2c_new }, .imem = nv50_instmem_new, .mc = g84_mc_new, .mmu = g84_mmu_new, @@ -957,7 +957,7 @@ nv86_chipset = { .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, nv50_gpio_new }, - .i2c = nv50_i2c_new, + .i2c = { 0x00000001, nv50_i2c_new }, .imem = nv50_instmem_new, .mc = g84_mc_new, .mmu = g84_mmu_new, @@ -989,7 +989,7 @@ nv92_chipset = { .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, nv50_gpio_new }, - .i2c = nv50_i2c_new, + .i2c = { 0x00000001, nv50_i2c_new }, .imem = nv50_instmem_new, .mc = g84_mc_new, .mmu = g84_mmu_new, @@ -1021,7 +1021,7 @@ nv94_chipset = { .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = g84_mc_new, .mmu = g84_mmu_new, @@ -1053,7 +1053,7 @@ nv96_chipset = { .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = g84_mc_new, .mmu = g84_mmu_new, @@ -1085,7 +1085,7 @@ nv98_chipset = { .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = g98_mc_new, .mmu = g84_mmu_new, @@ -1117,7 +1117,7 @@ nva0_chipset = { .fb = { 0x00000001, g84_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = nv50_i2c_new, + .i2c = { 0x00000001, nv50_i2c_new }, .imem = nv50_instmem_new, .mc = g84_mc_new, .mmu = g84_mmu_new, @@ -1149,7 +1149,7 @@ nva3_chipset = { .fb = { 0x00000001, gt215_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = gt215_mc_new, .mmu = g84_mmu_new, @@ -1183,7 +1183,7 @@ nva5_chipset = { .fb = { 0x00000001, gt215_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = gt215_mc_new, .mmu = g84_mmu_new, @@ -1216,7 +1216,7 @@ nva8_chipset = { .fb = { 0x00000001, gt215_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = gt215_mc_new, .mmu = g84_mmu_new, @@ -1249,7 +1249,7 @@ nvaa_chipset = { .fb = { 0x00000001, mcp77_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = g98_mc_new, .mmu = mcp77_mmu_new, @@ -1281,7 +1281,7 @@ nvac_chipset = { .fb = { 0x00000001, mcp77_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = g98_mc_new, .mmu = mcp77_mmu_new, @@ -1313,7 +1313,7 @@ nvaf_chipset = { .fb = { 0x00000001, mcp89_fb_new }, .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .imem = nv50_instmem_new, .mc = gt215_mc_new, .mmu = mcp77_mmu_new, @@ -1346,7 +1346,7 @@ nvc0_chipset = { .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1383,7 +1383,7 @@ nvc1_chipset = { .fb = { 0x00000001, gf108_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1419,7 +1419,7 @@ nvc3_chipset = { .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1455,7 +1455,7 @@ nvc4_chipset = { .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1492,7 +1492,7 @@ nvc8_chipset = { .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1529,7 +1529,7 @@ nvce_chipset = { .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1566,7 +1566,7 @@ nvcf_chipset = { .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, - .i2c = g94_i2c_new, + .i2c = { 0x00000001, g94_i2c_new }, .ibus = gf100_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1602,7 +1602,7 @@ nvd7_chipset = { .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gf119_gpio_new }, - .i2c = gf117_i2c_new, + .i2c = { 0x00000001, gf117_i2c_new }, .ibus = gf117_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1637,7 +1637,7 @@ nvd9_chipset = { .fb = { 0x00000001, gf100_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gf119_gpio_new }, - .i2c = gf119_i2c_new, + .i2c = { 0x00000001, gf119_i2c_new }, .ibus = gf117_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1673,7 +1673,7 @@ nve4_chipset = { .fb = { 0x00000001, gk104_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk104_i2c_new, + .i2c = { 0x00000001, gk104_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1712,7 +1712,7 @@ nve6_chipset = { .fb = { 0x00000001, gk104_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk104_i2c_new, + .i2c = { 0x00000001, gk104_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1751,7 +1751,7 @@ nve7_chipset = { .fb = { 0x00000001, gk104_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk104_i2c_new, + .i2c = { 0x00000001, gk104_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1815,7 +1815,7 @@ nvf0_chipset = { .fb = { 0x00000001, gk110_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk110_i2c_new, + .i2c = { 0x00000001, gk110_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1853,7 +1853,7 @@ nvf1_chipset = { .fb = { 0x00000001, gk110_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk110_i2c_new, + .i2c = { 0x00000001, gk110_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1891,7 +1891,7 @@ nv106_chipset = { .fb = { 0x00000001, gk110_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk110_i2c_new, + .i2c = { 0x00000001, gk110_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1929,7 +1929,7 @@ nv108_chipset = { .fb = { 0x00000001, gk110_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk110_i2c_new, + .i2c = { 0x00000001, gk110_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -1967,7 +1967,7 @@ nv117_chipset = { .fb = { 0x00000001, gm107_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk110_i2c_new, + .i2c = { 0x00000001, gk110_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -2003,7 +2003,7 @@ nv118_chipset = { .fb = { 0x00000001, gm107_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gk110_i2c_new, + .i2c = { 0x00000001, gk110_i2c_new }, .ibus = gk104_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -2037,7 +2037,7 @@ nv120_chipset = { .fb = { 0x00000001, gm200_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -2075,7 +2075,7 @@ nv124_chipset = { .fb = { 0x00000001, gm200_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -2113,7 +2113,7 @@ nv126_chipset = { .fb = { 0x00000001, gm200_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, @@ -2176,7 +2176,7 @@ nv130_chipset = { .fb = { 0x00000001, gp100_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp100_ltc_new, @@ -2216,7 +2216,7 @@ nv132_chipset = { .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2254,7 +2254,7 @@ nv134_chipset = { .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2292,7 +2292,7 @@ nv136_chipset = { .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2329,7 +2329,7 @@ nv137_chipset = { .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2367,7 +2367,7 @@ nv138_chipset = { .fb = { 0x00000001, gp102_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2428,7 +2428,7 @@ nv140_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2472,7 +2472,7 @@ nv162_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2510,7 +2510,7 @@ nv164_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2549,7 +2549,7 @@ nv166_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2589,7 +2589,7 @@ nv167_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2627,7 +2627,7 @@ nv168_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, @@ -2660,7 +2660,7 @@ nv170_chipset = { .devinit = { 0x00000001, ga100_devinit_new }, .fb = { 0x00000001, ga100_fb_new }, .gpio = { 0x00000001, gk104_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .mc = ga100_mc_new, @@ -2677,7 +2677,7 @@ nv172_chipset = { .devinit = { 0x00000001, ga100_devinit_new }, .fb = { 0x00000001, ga102_fb_new }, .gpio = { 0x00000001, ga102_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .mc = ga100_mc_new, @@ -2696,7 +2696,7 @@ nv174_chipset = { .devinit = { 0x00000001, ga100_devinit_new }, .fb = { 0x00000001, ga102_fb_new }, .gpio = { 0x00000001, ga102_gpio_new }, - .i2c = gm200_i2c_new, + .i2c = { 0x00000001, gm200_i2c_new }, .ibus = gm200_ibus_new, .imem = nv50_instmem_new, .mc = ga100_mc_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_I2C , i2c); _(NVKM_SUBDEV_IBUS , ibus); _(NVKM_SUBDEV_ICCSENSE, iccsense); _(NVKM_SUBDEV_INSTMEM , imem); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c index 719345074711..cb5cb533d91c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c @@ -277,7 +277,7 @@ nvkm_i2c_drv[] = { int nvkm_i2c_new_(const struct nvkm_i2c_func *func, struct nvkm_device *device, - int index, struct nvkm_i2c **pi2c) + enum nvkm_subdev_type type, int inst, struct nvkm_i2c **pi2c) { struct nvkm_bios *bios = device->bios; struct nvkm_i2c *i2c; @@ -289,7 +289,7 @@ nvkm_i2c_new_(const struct nvkm_i2c_func *func, struct nvkm_device *device, if (!(i2c = *pi2c = kzalloc(sizeof(*i2c), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_i2c, device, index, &i2c->subdev); + nvkm_subdev_ctor(&nvkm_i2c, device, type, inst, &i2c->subdev); i2c->func = func; INIT_LIST_HEAD(&i2c->pad); INIT_LIST_HEAD(&i2c->bus); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.c index bb2a31d88161..e5bad085c06f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.c @@ -66,7 +66,8 @@ g94_i2c = { }; int -g94_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +g94_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&g94_i2c, device, index, pi2c); + return nvkm_i2c_new_(&g94_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.c index ae4aad3fcd2e..cda30ee6767d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.c @@ -30,7 +30,8 @@ gf117_i2c = { }; int -gf117_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +gf117_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&gf117_i2c, device, index, pi2c); + return nvkm_i2c_new_(&gf117_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.c index 6f2b02af42c8..e9c6a6cca09d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.c @@ -34,7 +34,8 @@ gf119_i2c = { }; int -gf119_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +gf119_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&gf119_i2c, device, index, pi2c); + return nvkm_i2c_new_(&gf119_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.c index f9f6bf4b66c9..d35aa6fe3015 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.c @@ -66,7 +66,8 @@ gk104_i2c = { }; int -gk104_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +gk104_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&gk104_i2c, device, index, pi2c); + return nvkm_i2c_new_(&gk104_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk110.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk110.c index 8e3bfa1af52a..9fec6af56e07 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk110.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk110.c @@ -39,7 +39,8 @@ gk110_i2c = { }; int -gk110_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +gk110_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&gk110_i2c, device, index, pi2c); + return nvkm_i2c_new_(&gk110_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gm200.c index 7b2375bff8a9..46917eb600f9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gm200.c @@ -41,7 +41,8 @@ gm200_i2c = { }; int -gm200_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +gm200_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&gm200_i2c, device, index, pi2c); + return nvkm_i2c_new_(&gm200_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.c index 18776f49355c..ecfcf147c789 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.c @@ -30,7 +30,8 @@ nv04_i2c = { }; int -nv04_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +nv04_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&nv04_i2c, device, index, pi2c); + return nvkm_i2c_new_(&nv04_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c index 6b762f7cee9e..ad1d3fd2bcbc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.c @@ -30,7 +30,8 @@ nv4e_i2c = { }; int -nv4e_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +nv4e_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&nv4e_i2c, device, index, pi2c); + return nvkm_i2c_new_(&nv4e_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.c index 75640ab97d6a..2f94bed2c056 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.c @@ -30,7 +30,8 @@ nv50_i2c = { }; int -nv50_i2c_new(struct nvkm_device *device, int index, struct nvkm_i2c **pi2c) +nv50_i2c_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_i2c **pi2c) { - return nvkm_i2c_new_(&nv50_i2c, device, index, pi2c); + return nvkm_i2c_new_(&nv50_i2c, device, type, inst, pi2c); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/priv.h index e35f6036fcfc..f9d79f72f7e7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/priv.h @@ -4,8 +4,8 @@ #define nvkm_i2c(p) container_of((p), struct nvkm_i2c, subdev) #include -int nvkm_i2c_new_(const struct nvkm_i2c_func *, struct nvkm_device *, - int index, struct nvkm_i2c **); +int nvkm_i2c_new_(const struct nvkm_i2c_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_i2c **); struct nvkm_i2c_func { int (*pad_x_new)(struct nvkm_i2c *, int id, struct nvkm_i2c_pad **); From c5f38d67f953da319061f9878473e68b09d4c58a Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:05:51 +1000 Subject: [PATCH 29/87] drm/nouveau/ibus: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/core/subdev.h | 4 +- .../drm/nouveau/include/nvkm/subdev/ibus.h | 12 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 8 +- .../gpu/drm/nouveau/nvkm/engine/device/base.c | 79 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/ibus/gf117.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/ibus/gk20a.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/ibus/gm200.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/ibus/gp10b.c | 4 +- 12 files changed, 63 insertions(+), 67 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 2dc7134718b4..297b308ae65d 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_subdev *ibus; struct nvkm_iccsense *iccsense; struct nvkm_instmem *imem; struct nvkm_ltc *ltc; @@ -136,7 +135,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*ibus )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*iccsense)(struct nvkm_device *, int idx, struct nvkm_iccsense **); int (*imem )(struct nvkm_device *, int idx, struct nvkm_instmem **); int (*ltc )(struct nvkm_device *, int idx, struct nvkm_ltc **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 61f8237e137d..ee5946e30dcb 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: MIT */ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_IBUS , struct nvkm_subdev , ibus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GPIO , struct nvkm_gpio , gpio) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_I2C , struct nvkm_i2c , i2c) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index 8f41393467ce..efde81b9b046 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -104,8 +104,8 @@ struct nvkm_subdev_func { }; extern const char *nvkm_subdev_type[NVKM_SUBDEV_NR]; -int nvkm_subdev_new_(const struct nvkm_subdev_func *, struct nvkm_device *, - int index, struct nvkm_subdev **); +int nvkm_subdev_new_(const struct nvkm_subdev_func *, struct nvkm_device *, enum nvkm_subdev_type, + int inst, struct nvkm_subdev **); void nvkm_subdev_ctor_(const struct nvkm_subdev_func *, bool old, struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev *); #define nvkm_subdev_ctor_o(f,d,i, s) nvkm_subdev_ctor_((f), true, (d), (i), -1 , (s)) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h index db791411eaa8..f5da256315cf 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h @@ -3,10 +3,10 @@ #define __NVKM_IBUS_H__ #include -int gf100_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); -int gf117_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); -int gk104_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); -int gk20a_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); -int gm200_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); -int gp10b_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); +int gf100_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gf117_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gk104_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gk20a_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gm200_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gp10b_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index cfd4ba06b112..a0c201a4748a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_IBUS ] = "priv", [NVKM_SUBDEV_ICCSENSE] = "iccsense", [NVKM_SUBDEV_INSTMEM ] = "imem", [NVKM_SUBDEV_LTC ] = "ltc", @@ -253,12 +252,11 @@ nvkm_subdev_ctor_(const struct nvkm_subdev_func *func, bool old, } int -nvkm_subdev_new_(const struct nvkm_subdev_func *func, - struct nvkm_device *device, int index, - struct nvkm_subdev **psubdev) +nvkm_subdev_new_(const struct nvkm_subdev_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, struct nvkm_subdev **psubdev) { if (!(*psubdev = kzalloc(sizeof(**psubdev), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(func, device, index, *psubdev); + nvkm_subdev_ctor(func, device, type, inst, *psubdev); return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 2de86304d7a3..c6990b84c273 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1347,7 +1347,7 @@ nvc0_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = gf100_ibus_new, + .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1384,7 +1384,7 @@ nvc1_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = gf100_ibus_new, + .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1420,7 +1420,7 @@ nvc3_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = gf100_ibus_new, + .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1456,7 +1456,7 @@ nvc4_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = gf100_ibus_new, + .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1493,7 +1493,7 @@ nvc8_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = gf100_ibus_new, + .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1530,7 +1530,7 @@ nvce_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = gf100_ibus_new, + .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1567,7 +1567,7 @@ nvcf_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = gf100_ibus_new, + .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1603,7 +1603,7 @@ nvd7_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gf119_gpio_new }, .i2c = { 0x00000001, gf117_i2c_new }, - .ibus = gf117_ibus_new, + .ibus = { 0x00000001, gf117_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1638,7 +1638,7 @@ nvd9_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gf119_gpio_new }, .i2c = { 0x00000001, gf119_i2c_new }, - .ibus = gf117_ibus_new, + .ibus = { 0x00000001, gf117_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, @@ -1674,7 +1674,7 @@ nve4_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, @@ -1713,7 +1713,7 @@ nve6_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, @@ -1752,7 +1752,7 @@ nve7_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, @@ -1787,7 +1787,7 @@ nvea_chipset = { .clk = { 0x00000001, gk20a_clk_new }, .fb = { 0x00000001, gk20a_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .ibus = gk20a_ibus_new, + .ibus = { 0x00000001, gk20a_ibus_new }, .imem = gk20a_instmem_new, .ltc = gk104_ltc_new, .mc = gk20a_mc_new, @@ -1816,7 +1816,7 @@ nvf0_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, @@ -1854,7 +1854,7 @@ nvf1_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, @@ -1892,7 +1892,7 @@ nv106_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, @@ -1930,7 +1930,7 @@ nv108_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, @@ -1968,7 +1968,7 @@ nv117_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gm107_ltc_new, @@ -2004,7 +2004,7 @@ nv118_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = gk104_ibus_new, + .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gm107_ltc_new, @@ -2038,7 +2038,7 @@ nv120_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gm200_ltc_new, @@ -2076,7 +2076,7 @@ nv124_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gm200_ltc_new, @@ -2114,7 +2114,7 @@ nv126_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = gf100_iccsense_new, .imem = nv50_instmem_new, .ltc = gm200_ltc_new, @@ -2148,7 +2148,7 @@ nv12b_chipset = { .clk = { 0x00000001, gm20b_clk_new }, .fb = { 0x00000001, gm20b_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .ibus = gk20a_ibus_new, + .ibus = { 0x00000001, gk20a_ibus_new }, .imem = gk20a_instmem_new, .ltc = gm200_ltc_new, .mc = gk20a_mc_new, @@ -2177,7 +2177,7 @@ nv130_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp100_ltc_new, .mc = gp100_mc_new, @@ -2217,7 +2217,7 @@ nv132_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = gp100_mc_new, @@ -2255,7 +2255,7 @@ nv134_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = gp100_mc_new, @@ -2293,7 +2293,7 @@ nv136_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = gp100_mc_new, @@ -2330,7 +2330,7 @@ nv137_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = gp100_mc_new, @@ -2368,7 +2368,7 @@ nv138_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = gp100_mc_new, @@ -2400,7 +2400,7 @@ nv13b_chipset = { .fault = { 0x00000001, gp10b_fault_new }, .fb = { 0x00000001, gp10b_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .ibus = gp10b_ibus_new, + .ibus = { 0x00000001, gp10b_ibus_new }, .imem = gk20a_instmem_new, .ltc = gp10b_ltc_new, .mc = gp10b_mc_new, @@ -2429,7 +2429,7 @@ nv140_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = gp100_mc_new, @@ -2473,7 +2473,7 @@ nv162_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = tu102_mc_new, @@ -2511,7 +2511,7 @@ nv164_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = tu102_mc_new, @@ -2550,7 +2550,7 @@ nv166_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = tu102_mc_new, @@ -2590,7 +2590,7 @@ nv167_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = tu102_mc_new, @@ -2628,7 +2628,7 @@ nv168_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .ltc = gp102_ltc_new, .mc = tu102_mc_new, @@ -2661,7 +2661,7 @@ nv170_chipset = { .fb = { 0x00000001, ga100_fb_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .mc = ga100_mc_new, .mmu = tu102_mmu_new, @@ -2678,7 +2678,7 @@ nv172_chipset = { .fb = { 0x00000001, ga102_fb_new }, .gpio = { 0x00000001, ga102_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .mc = ga100_mc_new, .mmu = tu102_mmu_new, @@ -2697,7 +2697,7 @@ nv174_chipset = { .fb = { 0x00000001, ga102_fb_new }, .gpio = { 0x00000001, ga102_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = gm200_ibus_new, + .ibus = { 0x00000001, gm200_ibus_new }, .imem = nv50_instmem_new, .mc = ga100_mc_new, .mmu = tu102_mmu_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_IBUS , ibus); _(NVKM_SUBDEV_ICCSENSE, iccsense); _(NVKM_SUBDEV_INSTMEM , imem); _(NVKM_SUBDEV_LTC , ltc); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c index 1115376bc85f..1213f990323e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c @@ -115,8 +115,8 @@ gf100_ibus = { }; int -gf100_ibus_new(struct nvkm_device *device, int index, +gf100_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_subdev **pibus) { - return nvkm_subdev_new_(&gf100_ibus, device, index, pibus); + return nvkm_subdev_new_(&gf100_ibus, device, type, inst, pibus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf117.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf117.c index 1124dadac145..e4e545f4d893 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf117.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf117.c @@ -40,8 +40,8 @@ gf117_ibus = { }; int -gf117_ibus_new(struct nvkm_device *device, int index, +gf117_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_subdev **pibus) { - return nvkm_subdev_new_(&gf117_ibus, device, index, pibus); + return nvkm_subdev_new_(&gf117_ibus, device, type, inst, pibus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c index 22e487b493ad..36cae20b3195 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c @@ -118,8 +118,8 @@ gk104_ibus = { }; int -gk104_ibus_new(struct nvkm_device *device, int index, +gk104_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_subdev **pibus) { - return nvkm_subdev_new_(&gk104_ibus, device, index, pibus); + return nvkm_subdev_new_(&gk104_ibus, device, type, inst, pibus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk20a.c index 187d544378b0..ece073a1cc5a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk20a.c @@ -78,8 +78,8 @@ gk20a_ibus = { }; int -gk20a_ibus_new(struct nvkm_device *device, int index, +gk20a_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_subdev **pibus) { - return nvkm_subdev_new_(&gk20a_ibus, device, index, pibus); + return nvkm_subdev_new_(&gk20a_ibus, device, type, inst, pibus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm200.c index 0f1f0ad6377e..7973e603e031 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm200.c @@ -29,8 +29,8 @@ gm200_ibus = { }; int -gm200_ibus_new(struct nvkm_device *device, int index, +gm200_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_subdev **pibus) { - return nvkm_subdev_new_(&gm200_ibus, device, index, pibus); + return nvkm_subdev_new_(&gm200_ibus, device, type, inst, pibus); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gp10b.c index 0347b367cefe..611341afc685 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gp10b.c @@ -48,8 +48,8 @@ gp10b_ibus = { }; int -gp10b_ibus_new(struct nvkm_device *device, int index, +gp10b_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_subdev **pibus) { - return nvkm_subdev_new_(&gp10b_ibus, device, index, pibus); + return nvkm_subdev_new_(&gp10b_ibus, device, type, inst, pibus); } From 4dea1a9609d156f57462a06b3075416d23c82bd7 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:17:03 +1000 Subject: [PATCH 30/87] drm/nouveau/iccsense: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../nouveau/include/nvkm/subdev/iccsense.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 43 +++++++++---------- .../drm/nouveau/nvkm/subdev/iccsense/base.c | 8 ++-- .../drm/nouveau/nvkm/subdev/iccsense/gf100.c | 4 +- .../drm/nouveau/nvkm/subdev/iccsense/priv.h | 4 +- 8 files changed, 31 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 297b308ae65d..5ef4b5cca7e2 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_iccsense *iccsense; struct nvkm_instmem *imem; struct nvkm_ltc *ltc; struct nvkm_mc *mc; @@ -135,7 +134,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*iccsense)(struct nvkm_device *, int idx, struct nvkm_iccsense **); int (*imem )(struct nvkm_device *, int idx, struct nvkm_instmem **); int (*ltc )(struct nvkm_device *, int idx, struct nvkm_ltc **); int (*mc )(struct nvkm_device *, int idx, struct nvkm_mc **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index ee5946e30dcb..03a5b43c42ad 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -10,5 +10,6 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ICCSENSE, struct nvkm_iccsense, iccsense) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/iccsense.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/iccsense.h index f483dcd7cd1c..7400d62dcbec 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/iccsense.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/iccsense.h @@ -14,6 +14,6 @@ struct nvkm_iccsense { u32 power_w_crit; }; -int gf100_iccsense_new(struct nvkm_device *, int index, struct nvkm_iccsense **); +int gf100_iccsense_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_iccsense **); int nvkm_iccsense_read_all(struct nvkm_iccsense *iccsense); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index a0c201a4748a..a6b05aafbc1e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_ICCSENSE] = "iccsense", [NVKM_SUBDEV_INSTMEM ] = "imem", [NVKM_SUBDEV_LTC ] = "ltc", [NVKM_SUBDEV_MC ] = "mc", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index c6990b84c273..99f6d36d23eb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1348,7 +1348,7 @@ nvc0_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1385,7 +1385,7 @@ nvc1_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1421,7 +1421,7 @@ nvc3_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1457,7 +1457,7 @@ nvc4_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1494,7 +1494,7 @@ nvc8_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1531,7 +1531,7 @@ nvce_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1568,7 +1568,7 @@ nvcf_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1604,7 +1604,7 @@ nvd7_chipset = { .gpio = { 0x00000001, gf119_gpio_new }, .i2c = { 0x00000001, gf117_i2c_new }, .ibus = { 0x00000001, gf117_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1639,7 +1639,7 @@ nvd9_chipset = { .gpio = { 0x00000001, gf119_gpio_new }, .i2c = { 0x00000001, gf119_i2c_new }, .ibus = { 0x00000001, gf117_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gf100_ltc_new, .mc = gf100_mc_new, @@ -1675,7 +1675,7 @@ nve4_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, .mc = gk104_mc_new, @@ -1714,7 +1714,7 @@ nve6_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, .mc = gk104_mc_new, @@ -1753,7 +1753,7 @@ nve7_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, .mc = gk104_mc_new, @@ -1817,7 +1817,7 @@ nvf0_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, .mc = gk104_mc_new, @@ -1855,7 +1855,7 @@ nvf1_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, .mc = gk104_mc_new, @@ -1893,7 +1893,7 @@ nv106_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, .mc = gk20a_mc_new, @@ -1931,7 +1931,7 @@ nv108_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gk104_ltc_new, .mc = gk20a_mc_new, @@ -1969,7 +1969,7 @@ nv117_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gm107_ltc_new, .mc = gk20a_mc_new, @@ -2005,7 +2005,7 @@ nv118_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gm107_ltc_new, .mc = gk20a_mc_new, @@ -2039,7 +2039,7 @@ nv120_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gm200_ltc_new, .mc = gk20a_mc_new, @@ -2077,7 +2077,7 @@ nv124_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gm200_ltc_new, .mc = gk20a_mc_new, @@ -2115,7 +2115,7 @@ nv126_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .iccsense = gf100_iccsense_new, + .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = nv50_instmem_new, .ltc = gm200_ltc_new, .mc = gk20a_mc_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_ICCSENSE, iccsense); _(NVKM_SUBDEV_INSTMEM , imem); _(NVKM_SUBDEV_LTC , ltc); _(NVKM_SUBDEV_MC , mc); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.c index fecfa6afcf54..8f0ccd3664eb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.c @@ -312,20 +312,20 @@ iccsense_func = { }; void -nvkm_iccsense_ctor(struct nvkm_device *device, int index, +nvkm_iccsense_ctor(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_iccsense *iccsense) { - nvkm_subdev_ctor(&iccsense_func, device, index, &iccsense->subdev); + nvkm_subdev_ctor(&iccsense_func, device, type, inst, &iccsense->subdev); } int -nvkm_iccsense_new_(struct nvkm_device *device, int index, +nvkm_iccsense_new_(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_iccsense **iccsense) { if (!(*iccsense = kzalloc(sizeof(**iccsense), GFP_KERNEL))) return -ENOMEM; INIT_LIST_HEAD(&(*iccsense)->sensors); INIT_LIST_HEAD(&(*iccsense)->rails); - nvkm_iccsense_ctor(device, index, *iccsense); + nvkm_iccsense_ctor(device, type, inst, *iccsense); return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/gf100.c index cccff1c8a409..3eabf4944395 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/gf100.c @@ -24,8 +24,8 @@ #include "priv.h" int -gf100_iccsense_new(struct nvkm_device *device, int index, +gf100_iccsense_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_iccsense **piccsense) { - return nvkm_iccsense_new_(device, index, piccsense); + return nvkm_iccsense_new_(device, type, inst, piccsense); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/priv.h index cc09c6c504af..c33441124241 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/priv.h @@ -22,6 +22,6 @@ struct nvkm_iccsense_rail { u8 mohm; }; -void nvkm_iccsense_ctor(struct nvkm_device *, int, struct nvkm_iccsense *); -int nvkm_iccsense_new_(struct nvkm_device *, int, struct nvkm_iccsense **); +void nvkm_iccsense_ctor(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_iccsense *); +int nvkm_iccsense_new_(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_iccsense **); #endif From d9691a2245dbadbc76c27f5f3068a7f83eb9adc0 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:20:41 +1000 Subject: [PATCH 31/87] drm/nouveau/instmem: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/instmem.h | 8 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 175 +++++++++--------- .../drm/nouveau/nvkm/subdev/instmem/base.c | 7 +- .../drm/nouveau/nvkm/subdev/instmem/gk20a.c | 4 +- .../drm/nouveau/nvkm/subdev/instmem/nv04.c | 4 +- .../drm/nouveau/nvkm/subdev/instmem/nv40.c | 4 +- .../drm/nouveau/nvkm/subdev/instmem/nv50.c | 4 +- .../drm/nouveau/nvkm/subdev/instmem/priv.h | 2 +- 11 files changed, 104 insertions(+), 108 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 5ef4b5cca7e2..54a224634c85 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_instmem *imem; struct nvkm_ltc *ltc; struct nvkm_mc *mc; struct nvkm_mmu *mmu; @@ -134,7 +133,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*imem )(struct nvkm_device *, int idx, struct nvkm_instmem **); int (*ltc )(struct nvkm_device *, int idx, struct nvkm_ltc **); int (*mc )(struct nvkm_device *, int idx, struct nvkm_mc **); int (*mmu )(struct nvkm_device *, int idx, struct nvkm_mmu **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 03a5b43c42ad..798e5a0fbbc9 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -6,6 +6,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GPIO , struct nvkm_gpio , gpio) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_I2C , struct nvkm_i2c , i2c) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_INSTMEM , struct nvkm_instmem , imem) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h index 4090d4795f74..f967b97d163c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h @@ -30,8 +30,8 @@ int nvkm_instobj_new(struct nvkm_instmem *, u32 size, u32 align, bool zero, struct nvkm_memory **); -int nv04_instmem_new(struct nvkm_device *, int, struct nvkm_instmem **); -int nv40_instmem_new(struct nvkm_device *, int, struct nvkm_instmem **); -int nv50_instmem_new(struct nvkm_device *, int, struct nvkm_instmem **); -int gk20a_instmem_new(struct nvkm_device *, int, struct nvkm_instmem **); +int nv04_instmem_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_instmem **); +int nv40_instmem_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_instmem **); +int nv50_instmem_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_instmem **); +int gk20a_instmem_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_instmem **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index a6b05aafbc1e..c984fc6a2341 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_INSTMEM ] = "imem", [NVKM_SUBDEV_LTC ] = "ltc", [NVKM_SUBDEV_MC ] = "mc", [NVKM_SUBDEV_MMU ] = "mmu", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 99f6d36d23eb..24f949a419c5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -83,7 +83,7 @@ nv4_chipset = { .devinit = { 0x00000001, nv04_devinit_new }, .fb = { 0x00000001, nv04_fb_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv04_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -104,7 +104,7 @@ nv5_chipset = { .devinit = { 0x00000001, nv05_devinit_new }, .fb = { 0x00000001, nv04_fb_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv04_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -126,7 +126,7 @@ nv10_chipset = { .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv04_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -146,7 +146,7 @@ nv11_chipset = { .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv11_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -168,7 +168,7 @@ nv15_chipset = { .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv04_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -190,7 +190,7 @@ nv17_chipset = { .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -212,7 +212,7 @@ nv18_chipset = { .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -234,7 +234,7 @@ nv1a_chipset = { .fb = { 0x00000001, nv1a_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv04_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -256,7 +256,7 @@ nv1f_chipset = { .fb = { 0x00000001, nv1a_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -278,7 +278,7 @@ nv20_chipset = { .fb = { 0x00000001, nv20_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -300,7 +300,7 @@ nv25_chipset = { .fb = { 0x00000001, nv25_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -322,7 +322,7 @@ nv28_chipset = { .fb = { 0x00000001, nv25_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -344,7 +344,7 @@ nv2a_chipset = { .fb = { 0x00000001, nv25_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -366,7 +366,7 @@ nv30_chipset = { .fb = { 0x00000001, nv30_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -388,7 +388,7 @@ nv31_chipset = { .fb = { 0x00000001, nv30_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -411,7 +411,7 @@ nv34_chipset = { .fb = { 0x00000001, nv10_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -434,7 +434,7 @@ nv35_chipset = { .fb = { 0x00000001, nv35_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -456,7 +456,7 @@ nv36_chipset = { .fb = { 0x00000001, nv36_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv04_instmem_new, + .imem = { 0x00000001, nv04_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv04_pci_new, @@ -479,7 +479,7 @@ nv40_chipset = { .fb = { 0x00000001, nv40_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv40_pci_new, @@ -505,7 +505,7 @@ nv41_chipset = { .fb = { 0x00000001, nv41_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv17_mc_new, .mmu = nv41_mmu_new, .pci = nv40_pci_new, @@ -531,7 +531,7 @@ nv42_chipset = { .fb = { 0x00000001, nv41_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv17_mc_new, .mmu = nv41_mmu_new, .pci = nv40_pci_new, @@ -557,7 +557,7 @@ nv43_chipset = { .fb = { 0x00000001, nv41_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv17_mc_new, .mmu = nv41_mmu_new, .pci = nv40_pci_new, @@ -583,7 +583,7 @@ nv44_chipset = { .fb = { 0x00000001, nv44_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv44_mc_new, .mmu = nv44_mmu_new, .pci = nv40_pci_new, @@ -609,7 +609,7 @@ nv45_chipset = { .fb = { 0x00000001, nv40_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv17_mc_new, .mmu = nv04_mmu_new, .pci = nv40_pci_new, @@ -635,7 +635,7 @@ nv46_chipset = { .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv44_mc_new, .mmu = nv44_mmu_new, .pci = nv46_pci_new, @@ -661,7 +661,7 @@ nv47_chipset = { .fb = { 0x00000001, nv47_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv17_mc_new, .mmu = nv41_mmu_new, .pci = nv40_pci_new, @@ -687,7 +687,7 @@ nv49_chipset = { .fb = { 0x00000001, nv49_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv17_mc_new, .mmu = nv41_mmu_new, .pci = nv40_pci_new, @@ -713,7 +713,7 @@ nv4a_chipset = { .fb = { 0x00000001, nv44_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv44_mc_new, .mmu = nv04_mmu_new, .pci = nv40_pci_new, @@ -739,7 +739,7 @@ nv4b_chipset = { .fb = { 0x00000001, nv49_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv17_mc_new, .mmu = nv41_mmu_new, .pci = nv40_pci_new, @@ -765,7 +765,7 @@ nv4c_chipset = { .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv44_mc_new, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, @@ -791,7 +791,7 @@ nv4e_chipset = { .fb = { 0x00000001, nv4e_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv4e_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv44_mc_new, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, @@ -819,7 +819,7 @@ nv50_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, nv50_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = nv50_mc_new, .mmu = nv50_mmu_new, .mxm = nv50_mxm_new, @@ -846,7 +846,7 @@ nv63_chipset = { .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv44_mc_new, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, @@ -872,7 +872,7 @@ nv67_chipset = { .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv44_mc_new, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, @@ -898,7 +898,7 @@ nv68_chipset = { .fb = { 0x00000001, nv46_fb_new }, .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, - .imem = nv40_instmem_new, + .imem = { 0x00000001, nv40_instmem_new }, .mc = nv44_mc_new, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, @@ -926,7 +926,7 @@ nv84_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, nv50_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g84_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -958,7 +958,7 @@ nv86_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, nv50_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g84_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -990,7 +990,7 @@ nv92_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, nv50_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g84_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -1022,7 +1022,7 @@ nv94_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g84_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -1054,7 +1054,7 @@ nv96_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g84_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -1086,7 +1086,7 @@ nv98_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g98_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -1118,7 +1118,7 @@ nva0_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g84_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -1150,7 +1150,7 @@ nva3_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = gt215_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -1184,7 +1184,7 @@ nva5_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = gt215_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -1217,7 +1217,7 @@ nva8_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = gt215_mc_new, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, @@ -1250,7 +1250,7 @@ nvaa_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g98_mc_new, .mmu = mcp77_mmu_new, .mxm = nv50_mxm_new, @@ -1282,7 +1282,7 @@ nvac_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = g98_mc_new, .mmu = mcp77_mmu_new, .mxm = nv50_mxm_new, @@ -1314,7 +1314,7 @@ nvaf_chipset = { .fuse = { 0x00000001, nv50_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = gt215_mc_new, .mmu = mcp77_mmu_new, .mxm = nv50_mxm_new, @@ -1349,7 +1349,7 @@ nvc0_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1386,7 +1386,7 @@ nvc1_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1422,7 +1422,7 @@ nvc3_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1458,7 +1458,7 @@ nvc4_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1495,7 +1495,7 @@ nvc8_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1532,7 +1532,7 @@ nvce_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1569,7 +1569,7 @@ nvcf_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1605,7 +1605,7 @@ nvd7_chipset = { .i2c = { 0x00000001, gf117_i2c_new }, .ibus = { 0x00000001, gf117_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1640,7 +1640,7 @@ nvd9_chipset = { .i2c = { 0x00000001, gf119_i2c_new }, .ibus = { 0x00000001, gf117_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gf100_ltc_new, .mc = gf100_mc_new, .mmu = gf100_mmu_new, @@ -1676,7 +1676,7 @@ nve4_chipset = { .i2c = { 0x00000001, gk104_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gk104_ltc_new, .mc = gk104_mc_new, .mmu = gk104_mmu_new, @@ -1715,7 +1715,7 @@ nve6_chipset = { .i2c = { 0x00000001, gk104_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gk104_ltc_new, .mc = gk104_mc_new, .mmu = gk104_mmu_new, @@ -1754,7 +1754,7 @@ nve7_chipset = { .i2c = { 0x00000001, gk104_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gk104_ltc_new, .mc = gk104_mc_new, .mmu = gk104_mmu_new, @@ -1788,7 +1788,7 @@ nvea_chipset = { .fb = { 0x00000001, gk20a_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, .ibus = { 0x00000001, gk20a_ibus_new }, - .imem = gk20a_instmem_new, + .imem = { 0x00000001, gk20a_instmem_new }, .ltc = gk104_ltc_new, .mc = gk20a_mc_new, .mmu = gk20a_mmu_new, @@ -1818,7 +1818,7 @@ nvf0_chipset = { .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gk104_ltc_new, .mc = gk104_mc_new, .mmu = gk104_mmu_new, @@ -1856,7 +1856,7 @@ nvf1_chipset = { .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gk104_ltc_new, .mc = gk104_mc_new, .mmu = gk104_mmu_new, @@ -1894,7 +1894,7 @@ nv106_chipset = { .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gk104_ltc_new, .mc = gk20a_mc_new, .mmu = gk104_mmu_new, @@ -1932,7 +1932,7 @@ nv108_chipset = { .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gk104_ltc_new, .mc = gk20a_mc_new, .mmu = gk104_mmu_new, @@ -1970,7 +1970,7 @@ nv117_chipset = { .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gm107_ltc_new, .mc = gk20a_mc_new, .mmu = gk104_mmu_new, @@ -2006,7 +2006,7 @@ nv118_chipset = { .i2c = { 0x00000001, gk110_i2c_new }, .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gm107_ltc_new, .mc = gk20a_mc_new, .mmu = gk104_mmu_new, @@ -2040,7 +2040,7 @@ nv120_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gm200_ltc_new, .mc = gk20a_mc_new, .mmu = gm200_mmu_new, @@ -2078,7 +2078,7 @@ nv124_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gm200_ltc_new, .mc = gk20a_mc_new, .mmu = gm200_mmu_new, @@ -2116,7 +2116,7 @@ nv126_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gm200_ltc_new, .mc = gk20a_mc_new, .mmu = gm200_mmu_new, @@ -2149,7 +2149,7 @@ nv12b_chipset = { .fb = { 0x00000001, gm20b_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .ibus = { 0x00000001, gk20a_ibus_new }, - .imem = gk20a_instmem_new, + .imem = { 0x00000001, gk20a_instmem_new }, .ltc = gm200_ltc_new, .mc = gk20a_mc_new, .mmu = gm20b_mmu_new, @@ -2178,7 +2178,7 @@ nv130_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp100_ltc_new, .mc = gp100_mc_new, .mmu = gp100_mmu_new, @@ -2218,7 +2218,7 @@ nv132_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = gp100_mc_new, .mmu = gp100_mmu_new, @@ -2256,7 +2256,7 @@ nv134_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = gp100_mc_new, .mmu = gp100_mmu_new, @@ -2294,7 +2294,7 @@ nv136_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = gp100_mc_new, .mmu = gp100_mmu_new, @@ -2331,7 +2331,7 @@ nv137_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = gp100_mc_new, .mmu = gp100_mmu_new, @@ -2369,7 +2369,7 @@ nv138_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = gp100_mc_new, .mmu = gp100_mmu_new, @@ -2401,7 +2401,7 @@ nv13b_chipset = { .fb = { 0x00000001, gp10b_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, .ibus = { 0x00000001, gp10b_ibus_new }, - .imem = gk20a_instmem_new, + .imem = { 0x00000001, gk20a_instmem_new }, .ltc = gp10b_ltc_new, .mc = gp10b_mc_new, .mmu = gp10b_mmu_new, @@ -2430,7 +2430,7 @@ nv140_chipset = { .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = gp100_mc_new, .mmu = gv100_mmu_new, @@ -2474,7 +2474,7 @@ nv162_chipset = { .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = tu102_mc_new, .mmu = tu102_mmu_new, @@ -2512,7 +2512,7 @@ nv164_chipset = { .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = tu102_mc_new, .mmu = tu102_mmu_new, @@ -2551,7 +2551,7 @@ nv166_chipset = { .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = tu102_mc_new, .mmu = tu102_mmu_new, @@ -2591,7 +2591,7 @@ nv167_chipset = { .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = tu102_mc_new, .mmu = tu102_mmu_new, @@ -2629,7 +2629,7 @@ nv168_chipset = { .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .ltc = gp102_ltc_new, .mc = tu102_mc_new, .mmu = tu102_mmu_new, @@ -2662,7 +2662,7 @@ nv170_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = ga100_mc_new, .mmu = tu102_mmu_new, .pci = gp100_pci_new, @@ -2679,7 +2679,7 @@ nv172_chipset = { .gpio = { 0x00000001, ga102_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = ga100_mc_new, .mmu = tu102_mmu_new, .pci = gp100_pci_new, @@ -2698,7 +2698,7 @@ nv174_chipset = { .gpio = { 0x00000001, ga102_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, - .imem = nv50_instmem_new, + .imem = { 0x00000001, nv50_instmem_new }, .mc = ga100_mc_new, .mmu = tu102_mmu_new, .pci = gp100_pci_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_INSTMEM , imem); _(NVKM_SUBDEV_LTC , ltc); _(NVKM_SUBDEV_MC , mc); _(NVKM_SUBDEV_MMU , mmu); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c index 33566566435a..cd8163a52bb6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.c @@ -234,11 +234,10 @@ nvkm_instmem = { }; void -nvkm_instmem_ctor(const struct nvkm_instmem_func *func, - struct nvkm_device *device, int index, - struct nvkm_instmem *imem) +nvkm_instmem_ctor(const struct nvkm_instmem_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, struct nvkm_instmem *imem) { - nvkm_subdev_ctor(&nvkm_instmem, device, index, &imem->subdev); + nvkm_subdev_ctor(&nvkm_instmem, device, type, inst, &imem->subdev); imem->func = func; spin_lock_init(&imem->lock); INIT_LIST_HEAD(&imem->list); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c index 13d4d7ac0697..648ecf5a8fbc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c @@ -568,7 +568,7 @@ gk20a_instmem = { }; int -gk20a_instmem_new(struct nvkm_device *device, int index, +gk20a_instmem_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_instmem **pimem) { struct nvkm_device_tegra *tdev = device->func->tegra(device); @@ -576,7 +576,7 @@ gk20a_instmem_new(struct nvkm_device *device, int index, if (!(imem = kzalloc(sizeof(*imem), GFP_KERNEL))) return -ENOMEM; - nvkm_instmem_ctor(&gk20a_instmem, device, index, &imem->base); + nvkm_instmem_ctor(&gk20a_instmem, device, type, inst, &imem->base); mutex_init(&imem->lock); *pimem = &imem->base; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c index 0133f98467bb..25603b01d6f8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.c @@ -217,14 +217,14 @@ nv04_instmem = { }; int -nv04_instmem_new(struct nvkm_device *device, int index, +nv04_instmem_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_instmem **pimem) { struct nv04_instmem *imem; if (!(imem = kzalloc(sizeof(*imem), GFP_KERNEL))) return -ENOMEM; - nvkm_instmem_ctor(&nv04_instmem, device, index, &imem->base); + nvkm_instmem_ctor(&nv04_instmem, device, type, inst, &imem->base); *pimem = &imem->base; return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c index 3df5bb169258..6b462f960922 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c @@ -235,7 +235,7 @@ nv40_instmem = { }; int -nv40_instmem_new(struct nvkm_device *device, int index, +nv40_instmem_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_instmem **pimem) { struct nv40_instmem *imem; @@ -243,7 +243,7 @@ nv40_instmem_new(struct nvkm_device *device, int index, if (!(imem = kzalloc(sizeof(*imem), GFP_KERNEL))) return -ENOMEM; - nvkm_instmem_ctor(&nv40_instmem, device, index, &imem->base); + nvkm_instmem_ctor(&nv40_instmem, device, type, inst, &imem->base); *pimem = &imem->base; /* map bar */ diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c index 44c567036c2b..96aca0edfa3c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c @@ -386,14 +386,14 @@ nv50_instmem = { }; int -nv50_instmem_new(struct nvkm_device *device, int index, +nv50_instmem_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_instmem **pimem) { struct nv50_instmem *imem; if (!(imem = kzalloc(sizeof(*imem), GFP_KERNEL))) return -ENOMEM; - nvkm_instmem_ctor(&nv50_instmem, device, index, &imem->base); + nvkm_instmem_ctor(&nv50_instmem, device, type, inst, &imem->base); INIT_LIST_HEAD(&imem->lru); *pimem = &imem->base; return 0; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/priv.h index f5da8fcbdde3..56c15e30a5dd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/priv.h @@ -16,7 +16,7 @@ struct nvkm_instmem_func { }; void nvkm_instmem_ctor(const struct nvkm_instmem_func *, struct nvkm_device *, - int index, struct nvkm_instmem *); + enum nvkm_subdev_type, int, struct nvkm_instmem *); void nvkm_instmem_boot(struct nvkm_instmem *); #include From 0afc1c4caa001e71615fbc6a53f05119ea502fc8 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:24:17 +1000 Subject: [PATCH 32/87] drm/nouveau/ltc: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/ltc.h | 15 ++-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 73 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/ltc/base.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/gp102.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/ltc/priv.h | 4 +- 14 files changed, 69 insertions(+), 66 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 54a224634c85..8c11f4e19750 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_ltc *ltc; struct nvkm_mc *mc; struct nvkm_mmu *mmu; struct nvkm_subdev *mxm; @@ -133,7 +132,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*ltc )(struct nvkm_device *, int idx, struct nvkm_ltc **); int (*mc )(struct nvkm_device *, int idx, struct nvkm_mc **); int (*mmu )(struct nvkm_device *, int idx, struct nvkm_mmu **); int (*mxm )(struct nvkm_device *, int idx, struct nvkm_subdev **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 798e5a0fbbc9..d2f30c080e7e 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -8,6 +8,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_INSTMEM , struct nvkm_instmem , imem) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_LTC , struct nvkm_ltc , ltc) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h index 18fc5eac3a1a..d32a326a9290 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h @@ -34,12 +34,11 @@ int nvkm_ltc_zbc_stencil_get(struct nvkm_ltc *, int index, const u32); void nvkm_ltc_invalidate(struct nvkm_ltc *); void nvkm_ltc_flush(struct nvkm_ltc *); -int gf100_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); -int gk104_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); -int gk20a_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); -int gm107_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); -int gm200_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); -int gp100_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); -int gp102_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); -int gp10b_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); +int gf100_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); +int gk104_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); +int gm107_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); +int gm200_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); +int gp100_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); +int gp102_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); +int gp10b_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index c984fc6a2341..ac78135c34b0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_LTC ] = "ltc", [NVKM_SUBDEV_MC ] = "mc", [NVKM_SUBDEV_MMU ] = "mmu", [NVKM_SUBDEV_MXM ] = "mxm", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 24f949a419c5..766d4be1103e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1350,7 +1350,7 @@ nvc0_chipset = { .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1387,7 +1387,7 @@ nvc1_chipset = { .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1423,7 +1423,7 @@ nvc3_chipset = { .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1459,7 +1459,7 @@ nvc4_chipset = { .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1496,7 +1496,7 @@ nvc8_chipset = { .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1533,7 +1533,7 @@ nvce_chipset = { .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1570,7 +1570,7 @@ nvcf_chipset = { .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1606,7 +1606,7 @@ nvd7_chipset = { .ibus = { 0x00000001, gf117_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1641,7 +1641,7 @@ nvd9_chipset = { .ibus = { 0x00000001, gf117_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gf100_ltc_new, + .ltc = { 0x00000001, gf100_ltc_new }, .mc = gf100_mc_new, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, @@ -1677,7 +1677,7 @@ nve4_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gk104_ltc_new, + .ltc = { 0x00000001, gk104_ltc_new }, .mc = gk104_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -1716,7 +1716,7 @@ nve6_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gk104_ltc_new, + .ltc = { 0x00000001, gk104_ltc_new }, .mc = gk104_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -1755,7 +1755,7 @@ nve7_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gk104_ltc_new, + .ltc = { 0x00000001, gk104_ltc_new }, .mc = gk104_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -1789,7 +1789,7 @@ nvea_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .ibus = { 0x00000001, gk20a_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, - .ltc = gk104_ltc_new, + .ltc = { 0x00000001, gk104_ltc_new }, .mc = gk20a_mc_new, .mmu = gk20a_mmu_new, .pmu = gk20a_pmu_new, @@ -1819,7 +1819,7 @@ nvf0_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gk104_ltc_new, + .ltc = { 0x00000001, gk104_ltc_new }, .mc = gk104_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -1857,7 +1857,7 @@ nvf1_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gk104_ltc_new, + .ltc = { 0x00000001, gk104_ltc_new }, .mc = gk104_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -1895,7 +1895,7 @@ nv106_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gk104_ltc_new, + .ltc = { 0x00000001, gk104_ltc_new }, .mc = gk20a_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -1933,7 +1933,7 @@ nv108_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gk104_ltc_new, + .ltc = { 0x00000001, gk104_ltc_new }, .mc = gk20a_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -1971,7 +1971,7 @@ nv117_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gm107_ltc_new, + .ltc = { 0x00000001, gm107_ltc_new }, .mc = gk20a_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -2007,7 +2007,7 @@ nv118_chipset = { .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gm107_ltc_new, + .ltc = { 0x00000001, gm107_ltc_new }, .mc = gk20a_mc_new, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, @@ -2041,7 +2041,7 @@ nv120_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gm200_ltc_new, + .ltc = { 0x00000001, gm200_ltc_new }, .mc = gk20a_mc_new, .mmu = gm200_mmu_new, .mxm = nv50_mxm_new, @@ -2079,7 +2079,7 @@ nv124_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gm200_ltc_new, + .ltc = { 0x00000001, gm200_ltc_new }, .mc = gk20a_mc_new, .mmu = gm200_mmu_new, .mxm = nv50_mxm_new, @@ -2117,7 +2117,7 @@ nv126_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gm200_ltc_new, + .ltc = { 0x00000001, gm200_ltc_new }, .mc = gk20a_mc_new, .mmu = gm200_mmu_new, .mxm = nv50_mxm_new, @@ -2150,7 +2150,7 @@ nv12b_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .ibus = { 0x00000001, gk20a_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, - .ltc = gm200_ltc_new, + .ltc = { 0x00000001, gm200_ltc_new }, .mc = gk20a_mc_new, .mmu = gm20b_mmu_new, .pmu = gm20b_pmu_new, @@ -2179,7 +2179,7 @@ nv130_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp100_ltc_new, + .ltc = { 0x00000001, gp100_ltc_new }, .mc = gp100_mc_new, .mmu = gp100_mmu_new, .therm = gp100_therm_new, @@ -2219,7 +2219,7 @@ nv132_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = gp100_mc_new, .mmu = gp100_mmu_new, .therm = gp100_therm_new, @@ -2257,7 +2257,7 @@ nv134_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = gp100_mc_new, .mmu = gp100_mmu_new, .therm = gp100_therm_new, @@ -2295,7 +2295,7 @@ nv136_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = gp100_mc_new, .mmu = gp100_mmu_new, .therm = gp100_therm_new, @@ -2332,7 +2332,7 @@ nv137_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = gp100_mc_new, .mmu = gp100_mmu_new, .therm = gp100_therm_new, @@ -2370,7 +2370,7 @@ nv138_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = gp100_mc_new, .mmu = gp100_mmu_new, .therm = gp100_therm_new, @@ -2402,7 +2402,7 @@ nv13b_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .ibus = { 0x00000001, gp10b_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, - .ltc = gp10b_ltc_new, + .ltc = { 0x00000001, gp10b_ltc_new }, .mc = gp10b_mc_new, .mmu = gp10b_mmu_new, .pmu = gp10b_pmu_new, @@ -2431,7 +2431,7 @@ nv140_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = gp100_mc_new, .mmu = gv100_mmu_new, .pci = gp100_pci_new, @@ -2475,7 +2475,7 @@ nv162_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = tu102_mc_new, .mmu = tu102_mmu_new, .pci = gp100_pci_new, @@ -2513,7 +2513,7 @@ nv164_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = tu102_mc_new, .mmu = tu102_mmu_new, .pci = gp100_pci_new, @@ -2552,7 +2552,7 @@ nv166_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = tu102_mc_new, .mmu = tu102_mmu_new, .pci = gp100_pci_new, @@ -2592,7 +2592,7 @@ nv167_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = tu102_mc_new, .mmu = tu102_mmu_new, .pci = gp100_pci_new, @@ -2630,7 +2630,7 @@ nv168_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .ltc = gp102_ltc_new, + .ltc = { 0x00000001, gp102_ltc_new }, .mc = tu102_mc_new, .mmu = tu102_mmu_new, .pci = gp100_pci_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_LTC , ltc); _(NVKM_SUBDEV_MC , mc); _(NVKM_SUBDEV_MMU , mmu); _(NVKM_SUBDEV_MXM , mxm); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c index d54957f817bd..fa683c190795 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c @@ -127,14 +127,14 @@ nvkm_ltc = { int nvkm_ltc_new_(const struct nvkm_ltc_func *func, struct nvkm_device *device, - int index, struct nvkm_ltc **pltc) + enum nvkm_subdev_type type, int inst, struct nvkm_ltc **pltc) { struct nvkm_ltc *ltc; if (!(ltc = *pltc = kzalloc(sizeof(*ltc), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_ltc, device, index, <c->subdev); + nvkm_subdev_ctor(&nvkm_ltc, device, type, inst, <c->subdev); ltc->func = func; mutex_init(<c->mutex); ltc->zbc_min = 1; /* reserve 0 for disabled */ diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c index 1d453566fa3d..fd8aeafc812d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c @@ -249,7 +249,8 @@ gf100_ltc = { }; int -gf100_ltc_new(struct nvkm_device *device, int index, struct nvkm_ltc **pltc) +gf100_ltc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_ltc **pltc) { - return nvkm_ltc_new_(&gf100_ltc, device, index, pltc); + return nvkm_ltc_new_(&gf100_ltc, device, type, inst, pltc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.c index b4f6e0034d58..94aa09244d67 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.c @@ -50,7 +50,8 @@ gk104_ltc = { }; int -gk104_ltc_new(struct nvkm_device *device, int index, struct nvkm_ltc **pltc) +gk104_ltc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_ltc **pltc) { - return nvkm_ltc_new_(&gk104_ltc, device, index, pltc); + return nvkm_ltc_new_(&gk104_ltc, device, type, inst, pltc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c index ec0a3844b2d1..54d1d65d5a85 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c @@ -145,7 +145,8 @@ gm107_ltc = { }; int -gm107_ltc_new(struct nvkm_device *device, int index, struct nvkm_ltc **pltc) +gm107_ltc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_ltc **pltc) { - return nvkm_ltc_new_(&gm107_ltc, device, index, pltc); + return nvkm_ltc_new_(&gm107_ltc, device, type, inst, pltc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c index e18e0dc19ec8..8cfdbbdd8e8d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.c @@ -57,7 +57,8 @@ gm200_ltc = { }; int -gm200_ltc_new(struct nvkm_device *device, int index, struct nvkm_ltc **pltc) +gm200_ltc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_ltc **pltc) { - return nvkm_ltc_new_(&gm200_ltc, device, index, pltc); + return nvkm_ltc_new_(&gm200_ltc, device, type, inst, pltc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c index e923ed76d37a..a4a6cd9b435a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c @@ -69,7 +69,8 @@ gp100_ltc = { }; int -gp100_ltc_new(struct nvkm_device *device, int index, struct nvkm_ltc **pltc) +gp100_ltc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_ltc **pltc) { - return nvkm_ltc_new_(&gp100_ltc, device, index, pltc); + return nvkm_ltc_new_(&gp100_ltc, device, type, inst, pltc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.c index 601747ada655..ff05d617e7f4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.c @@ -45,7 +45,8 @@ gp102_ltc = { }; int -gp102_ltc_new(struct nvkm_device *device, int index, struct nvkm_ltc **pltc) +gp102_ltc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_ltc **pltc) { - return nvkm_ltc_new_(&gp102_ltc, device, index, pltc); + return nvkm_ltc_new_(&gp102_ltc, device, type, inst, pltc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.c index c0063c7caa50..dfebd796cb4b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.c @@ -59,7 +59,8 @@ gp10b_ltc = { }; int -gp10b_ltc_new(struct nvkm_device *device, int index, struct nvkm_ltc **pltc) +gp10b_ltc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_ltc **pltc) { - return nvkm_ltc_new_(&gp10b_ltc, device, index, pltc); + return nvkm_ltc_new_(&gp10b_ltc, device, type, inst, pltc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h index eca5a711b1b8..2bebe139005d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h @@ -5,8 +5,8 @@ #include #include -int nvkm_ltc_new_(const struct nvkm_ltc_func *, struct nvkm_device *, - int index, struct nvkm_ltc **); +int nvkm_ltc_new_(const struct nvkm_ltc_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_ltc **); struct nvkm_ltc_func { int (*oneinit)(struct nvkm_ltc *); From 5e0d3dbc62a93bfc7e72ff0b3dca8e9374aacba3 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 7 Dec 2020 08:52:41 +1000 Subject: [PATCH 33/87] drm/nouveau/top: store device type and instance separately MC/FIFO will need this info as they're switched over. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/nvkm/subdev/top/base.c | 2 + .../gpu/drm/nouveau/nvkm/subdev/top/gk104.c | 38 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/top/priv.h | 2 + 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index cce6e4e90ebf..7c56d4860978 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -28,6 +28,8 @@ nvkm_top_device_new(struct nvkm_top *top) { struct nvkm_top_device *info = kmalloc(sizeof(*info), GFP_KERNEL); if (info) { + info->type = NVKM_SUBDEV_NR; + info->inst = -1; info->index = NVKM_SUBDEV_NR; info->addr = 0; info->fault = -1; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c index 150109ccea26..29f47e2db972 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c @@ -70,26 +70,24 @@ gk104_top_oneinit(struct nvkm_top *top) continue; /* Translate engine type to NVKM engine identifier. */ -#define A_(A) if (inst == 0) info->index = NVKM_ENGINE_##A -#define B_(A) if (inst + NVKM_ENGINE_##A##0 < NVKM_ENGINE_##A##_LAST + 1) \ - info->index = NVKM_ENGINE_##A##0 + inst -#define C_(A) if (inst == 0) info->index = NVKM_SUBDEV_##A +#define I_(T,I) do { info->type = (T); info->inst = (I); info->index = (T) + (I); } while(0) +#define O_(T,I) do { WARN_ON(inst); I_(T, I); } while (0) switch (type) { - case 0x00000000: A_(GR ); break; - case 0x00000001: A_(CE0 ); break; - case 0x00000002: A_(CE1 ); break; - case 0x00000003: A_(CE2 ); break; - case 0x00000008: A_(MSPDEC); break; - case 0x00000009: A_(MSPPP ); break; - case 0x0000000a: A_(MSVLD ); break; - case 0x0000000b: A_(MSENC ); break; - case 0x0000000c: A_(VIC ); break; - case 0x0000000d: A_(SEC2 ); break; - case 0x0000000e: B_(NVENC ); break; - case 0x0000000f: A_(NVENC1); break; - case 0x00000010: B_(NVDEC ); break; - case 0x00000013: B_(CE ); break; - case 0x00000014: C_(GSP ); break; + case 0x00000000: O_(NVKM_ENGINE_GR , 0); break; + case 0x00000001: O_(NVKM_ENGINE_CE , 0); break; + case 0x00000002: O_(NVKM_ENGINE_CE , 1); break; + case 0x00000003: O_(NVKM_ENGINE_CE , 2); break; + case 0x00000008: O_(NVKM_ENGINE_MSPDEC, 0); break; + case 0x00000009: O_(NVKM_ENGINE_MSPPP , 0); break; + case 0x0000000a: O_(NVKM_ENGINE_MSVLD , 0); break; + case 0x0000000b: O_(NVKM_ENGINE_MSENC , 0); break; + case 0x0000000c: O_(NVKM_ENGINE_VIC , 0); break; + case 0x0000000d: O_(NVKM_ENGINE_SEC2 , 0); break; + case 0x0000000e: I_(NVKM_ENGINE_NVENC , inst); break; + case 0x0000000f: O_(NVKM_ENGINE_NVENC , 1); break; + case 0x00000010: I_(NVKM_ENGINE_NVDEC , inst); break; + case 0x00000013: I_(NVKM_ENGINE_CE , inst); break; + case 0x00000014: O_(NVKM_SUBDEV_GSP , 0); break; default: break; } @@ -97,7 +95,7 @@ gk104_top_oneinit(struct nvkm_top *top) nvkm_debug(subdev, "%02x.%d (%8s): addr %06x fault %2d " "engine %2d runlist %2d intr %2d " "reset %2d\n", type, inst, - info->index == NVKM_SUBDEV_NR ? NULL : nvkm_subdev_type[info->index], + info->type == NVKM_SUBDEV_NR ? "????????" : nvkm_subdev_type[info->type], info->addr, info->fault, info->engine, info->runlist, info->intr, info->reset); info = NULL; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h index a16baa2941cf..85c9f1411012 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h @@ -12,6 +12,8 @@ int nvkm_top_new_(const struct nvkm_top_func *, struct nvkm_device *, int, struct nvkm_top **); struct nvkm_top_device { + enum nvkm_subdev_type type; + int inst; enum nvkm_devidx index; u32 addr; int fault; From 3b9e93f7d73ccc5af9d7e21b1378c4b91bcdc0ab Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 7 Dec 2020 08:54:34 +1000 Subject: [PATCH 34/87] drm/nouveau/top: expose parsed device info more directly This is easier to deal with in some situations than the existing accessor functions. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h | 13 +++++++++++++ drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h | 13 ------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index 7be0e7e7bd77..cf3c4fd8942d 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -9,6 +9,19 @@ struct nvkm_top { struct list_head device; }; +struct nvkm_top_device { + enum nvkm_subdev_type type; + int inst; + enum nvkm_devidx index; + u32 addr; + int fault; + int engine; + int runlist; + int reset; + int intr; + struct list_head head; +}; + u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_devidx); u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_devidx); u32 nvkm_top_intr(struct nvkm_device *, u32 intr, u64 *subdevs); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h index 85c9f1411012..37187691bfb4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h @@ -11,18 +11,5 @@ struct nvkm_top_func { int nvkm_top_new_(const struct nvkm_top_func *, struct nvkm_device *, int, struct nvkm_top **); -struct nvkm_top_device { - enum nvkm_subdev_type type; - int inst; - enum nvkm_devidx index; - u32 addr; - int fault; - int engine; - int runlist; - int reset; - int intr; - struct list_head head; -}; - struct nvkm_top_device *nvkm_top_device_new(struct nvkm_top *); #endif From 1fc2fddfbc8c6908451c06025b992e228a65bfba Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:28:41 +1000 Subject: [PATCH 35/87] drm/nouveau/mc: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/mc.h | 30 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 175 +++++++++--------- drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c | 8 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/mc/ga100.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/mc/gf100.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/mc/gk104.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/mc/gk20a.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/mc/gp100.c | 8 +- .../gpu/drm/nouveau/nvkm/subdev/mc/gp10b.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/mc/gt215.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h | 10 +- .../gpu/drm/nouveau/nvkm/subdev/mc/tu102.c | 10 +- 22 files changed, 147 insertions(+), 150 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 8c11f4e19750..75de60cf9577 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_mc *mc; struct nvkm_mmu *mmu; struct nvkm_subdev *mxm; struct nvkm_pci *pci; @@ -132,7 +131,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*mc )(struct nvkm_device *, int idx, struct nvkm_mc **); int (*mmu )(struct nvkm_device *, int idx, struct nvkm_mmu **); int (*mxm )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*pci )(struct nvkm_device *, int idx, struct nvkm_pci **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index d2f30c080e7e..f4d1112094aa 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -5,6 +5,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_IBUS , struct nvkm_subdev , ibus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GPIO , struct nvkm_gpio , gpio) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_I2C , struct nvkm_i2c , i2c) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_MC , struct nvkm_mc , mc) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_INSTMEM , struct nvkm_instmem , imem) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h index e45ca4583967..2d84b1bfc119 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h @@ -18,19 +18,19 @@ void nvkm_mc_intr_rearm(struct nvkm_device *); void nvkm_mc_intr_mask(struct nvkm_device *, enum nvkm_devidx, bool enable); void nvkm_mc_unk260(struct nvkm_device *, u32 data); -int nv04_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int nv11_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int nv17_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int nv44_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int nv50_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int g84_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int g98_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int gt215_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int gf100_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int gk104_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int gk20a_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int gp100_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int gp10b_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int tu102_mc_new(struct nvkm_device *, int, struct nvkm_mc **); -int ga100_mc_new(struct nvkm_device *, int, struct nvkm_mc **); +int nv04_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int nv11_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int nv17_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int nv44_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int nv50_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int g84_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int g98_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int gt215_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int gf100_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int gk104_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int gk20a_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int gp100_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int gp10b_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int tu102_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); +int ga100_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index ac78135c34b0..fca876b6bc91 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_MC ] = "mc", [NVKM_SUBDEV_MMU ] = "mmu", [NVKM_SUBDEV_MXM ] = "mxm", [NVKM_SUBDEV_PCI ] = "pci", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 766d4be1103e..437b7557b64b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -84,7 +84,7 @@ nv4_chipset = { .fb = { 0x00000001, nv04_fb_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv04_mc_new, + .mc = { 0x00000001, nv04_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -105,7 +105,7 @@ nv5_chipset = { .fb = { 0x00000001, nv04_fb_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv04_mc_new, + .mc = { 0x00000001, nv04_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -127,7 +127,7 @@ nv10_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv04_mc_new, + .mc = { 0x00000001, nv04_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -147,7 +147,7 @@ nv11_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv11_mc_new, + .mc = { 0x00000001, nv11_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -169,7 +169,7 @@ nv15_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv04_mc_new, + .mc = { 0x00000001, nv04_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -191,7 +191,7 @@ nv17_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -213,7 +213,7 @@ nv18_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -235,7 +235,7 @@ nv1a_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv04_mc_new, + .mc = { 0x00000001, nv04_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -257,7 +257,7 @@ nv1f_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -279,7 +279,7 @@ nv20_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -301,7 +301,7 @@ nv25_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -323,7 +323,7 @@ nv28_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -345,7 +345,7 @@ nv2a_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -367,7 +367,7 @@ nv30_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -389,7 +389,7 @@ nv31_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -412,7 +412,7 @@ nv34_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -435,7 +435,7 @@ nv35_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -457,7 +457,7 @@ nv36_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv04_pci_new, .timer = nv04_timer_new, @@ -480,7 +480,7 @@ nv40_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -506,7 +506,7 @@ nv41_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv41_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -532,7 +532,7 @@ nv42_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv41_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -558,7 +558,7 @@ nv43_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv41_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -584,7 +584,7 @@ nv44_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv44_mc_new, + .mc = { 0x00000001, nv44_mc_new }, .mmu = nv44_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -610,7 +610,7 @@ nv45_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv04_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -636,7 +636,7 @@ nv46_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv44_mc_new, + .mc = { 0x00000001, nv44_mc_new }, .mmu = nv44_mmu_new, .pci = nv46_pci_new, .therm = nv40_therm_new, @@ -662,7 +662,7 @@ nv47_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv41_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -688,7 +688,7 @@ nv49_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv41_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -714,7 +714,7 @@ nv4a_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv44_mc_new, + .mc = { 0x00000001, nv44_mc_new }, .mmu = nv04_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -740,7 +740,7 @@ nv4b_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv17_mc_new, + .mc = { 0x00000001, nv17_mc_new }, .mmu = nv41_mmu_new, .pci = nv40_pci_new, .therm = nv40_therm_new, @@ -766,7 +766,7 @@ nv4c_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv44_mc_new, + .mc = { 0x00000001, nv44_mc_new }, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, .therm = nv40_therm_new, @@ -792,7 +792,7 @@ nv4e_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv4e_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv44_mc_new, + .mc = { 0x00000001, nv44_mc_new }, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, .therm = nv40_therm_new, @@ -820,7 +820,7 @@ nv50_chipset = { .gpio = { 0x00000001, nv50_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = nv50_mc_new, + .mc = { 0x00000001, nv50_mc_new }, .mmu = nv50_mmu_new, .mxm = nv50_mxm_new, .pci = nv46_pci_new, @@ -847,7 +847,7 @@ nv63_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv44_mc_new, + .mc = { 0x00000001, nv44_mc_new }, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, .therm = nv40_therm_new, @@ -873,7 +873,7 @@ nv67_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv44_mc_new, + .mc = { 0x00000001, nv44_mc_new }, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, .therm = nv40_therm_new, @@ -899,7 +899,7 @@ nv68_chipset = { .gpio = { 0x00000001, nv10_gpio_new }, .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, - .mc = nv44_mc_new, + .mc = { 0x00000001, nv44_mc_new }, .mmu = nv44_mmu_new, .pci = nv4c_pci_new, .therm = nv40_therm_new, @@ -927,7 +927,7 @@ nv84_chipset = { .gpio = { 0x00000001, nv50_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g84_mc_new, + .mc = { 0x00000001, g84_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g84_pci_new, @@ -959,7 +959,7 @@ nv86_chipset = { .gpio = { 0x00000001, nv50_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g84_mc_new, + .mc = { 0x00000001, g84_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g84_pci_new, @@ -991,7 +991,7 @@ nv92_chipset = { .gpio = { 0x00000001, nv50_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g84_mc_new, + .mc = { 0x00000001, g84_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g92_pci_new, @@ -1023,7 +1023,7 @@ nv94_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g84_mc_new, + .mc = { 0x00000001, g84_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1055,7 +1055,7 @@ nv96_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g84_mc_new, + .mc = { 0x00000001, g84_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1087,7 +1087,7 @@ nv98_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g98_mc_new, + .mc = { 0x00000001, g98_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1119,7 +1119,7 @@ nva0_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g84_mc_new, + .mc = { 0x00000001, g84_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1151,7 +1151,7 @@ nva3_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = gt215_mc_new, + .mc = { 0x00000001, gt215_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1185,7 +1185,7 @@ nva5_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = gt215_mc_new, + .mc = { 0x00000001, gt215_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1218,7 +1218,7 @@ nva8_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = gt215_mc_new, + .mc = { 0x00000001, gt215_mc_new }, .mmu = g84_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1251,7 +1251,7 @@ nvaa_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g98_mc_new, + .mc = { 0x00000001, g98_mc_new }, .mmu = mcp77_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1283,7 +1283,7 @@ nvac_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = g98_mc_new, + .mc = { 0x00000001, g98_mc_new }, .mmu = mcp77_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1315,7 +1315,7 @@ nvaf_chipset = { .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = gt215_mc_new, + .mc = { 0x00000001, gt215_mc_new }, .mmu = mcp77_mmu_new, .mxm = nv50_mxm_new, .pci = g94_pci_new, @@ -1351,7 +1351,7 @@ nvc0_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf100_pci_new, @@ -1388,7 +1388,7 @@ nvc1_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf106_pci_new, @@ -1424,7 +1424,7 @@ nvc3_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf106_pci_new, @@ -1460,7 +1460,7 @@ nvc4_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf100_pci_new, @@ -1497,7 +1497,7 @@ nvc8_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf100_pci_new, @@ -1534,7 +1534,7 @@ nvce_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf100_pci_new, @@ -1571,7 +1571,7 @@ nvcf_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf106_pci_new, @@ -1607,7 +1607,7 @@ nvd7_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf106_pci_new, @@ -1642,7 +1642,7 @@ nvd9_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, - .mc = gf100_mc_new, + .mc = { 0x00000001, gf100_mc_new }, .mmu = gf100_mmu_new, .mxm = nv50_mxm_new, .pci = gf106_pci_new, @@ -1678,7 +1678,7 @@ nve4_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, - .mc = gk104_mc_new, + .mc = { 0x00000001, gk104_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -1717,7 +1717,7 @@ nve6_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, - .mc = gk104_mc_new, + .mc = { 0x00000001, gk104_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -1756,7 +1756,7 @@ nve7_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, - .mc = gk104_mc_new, + .mc = { 0x00000001, gk104_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -1790,7 +1790,7 @@ nvea_chipset = { .ibus = { 0x00000001, gk20a_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gk20a_mmu_new, .pmu = gk20a_pmu_new, .timer = gk20a_timer_new, @@ -1820,7 +1820,7 @@ nvf0_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, - .mc = gk104_mc_new, + .mc = { 0x00000001, gk104_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -1858,7 +1858,7 @@ nvf1_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, - .mc = gk104_mc_new, + .mc = { 0x00000001, gk104_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -1896,7 +1896,7 @@ nv106_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -1934,7 +1934,7 @@ nv108_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -1972,7 +1972,7 @@ nv117_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm107_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -2008,7 +2008,7 @@ nv118_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm107_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gk104_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -2042,7 +2042,7 @@ nv120_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gm200_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -2080,7 +2080,7 @@ nv124_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gm200_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -2118,7 +2118,7 @@ nv126_chipset = { .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gm200_mmu_new, .mxm = nv50_mxm_new, .pci = gk104_pci_new, @@ -2151,7 +2151,7 @@ nv12b_chipset = { .ibus = { 0x00000001, gk20a_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, - .mc = gk20a_mc_new, + .mc = { 0x00000001, gk20a_mc_new }, .mmu = gm20b_mmu_new, .pmu = gm20b_pmu_new, .timer = gk20a_timer_new, @@ -2180,7 +2180,7 @@ nv130_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp100_ltc_new }, - .mc = gp100_mc_new, + .mc = { 0x00000001, gp100_mc_new }, .mmu = gp100_mmu_new, .therm = gp100_therm_new, .pci = gp100_pci_new, @@ -2220,7 +2220,7 @@ nv132_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = gp100_mc_new, + .mc = { 0x00000001, gp100_mc_new }, .mmu = gp100_mmu_new, .therm = gp100_therm_new, .pci = gp100_pci_new, @@ -2258,7 +2258,7 @@ nv134_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = gp100_mc_new, + .mc = { 0x00000001, gp100_mc_new }, .mmu = gp100_mmu_new, .therm = gp100_therm_new, .pci = gp100_pci_new, @@ -2296,7 +2296,7 @@ nv136_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = gp100_mc_new, + .mc = { 0x00000001, gp100_mc_new }, .mmu = gp100_mmu_new, .therm = gp100_therm_new, .pci = gp100_pci_new, @@ -2333,7 +2333,7 @@ nv137_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = gp100_mc_new, + .mc = { 0x00000001, gp100_mc_new }, .mmu = gp100_mmu_new, .therm = gp100_therm_new, .pci = gp100_pci_new, @@ -2371,7 +2371,7 @@ nv138_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = gp100_mc_new, + .mc = { 0x00000001, gp100_mc_new }, .mmu = gp100_mmu_new, .therm = gp100_therm_new, .pci = gp100_pci_new, @@ -2403,7 +2403,7 @@ nv13b_chipset = { .ibus = { 0x00000001, gp10b_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gp10b_ltc_new }, - .mc = gp10b_mc_new, + .mc = { 0x00000001, gp10b_mc_new }, .mmu = gp10b_mmu_new, .pmu = gp10b_pmu_new, .timer = gk20a_timer_new, @@ -2432,7 +2432,7 @@ nv140_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = gp100_mc_new, + .mc = { 0x00000001, gp100_mc_new }, .mmu = gv100_mmu_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2476,7 +2476,7 @@ nv162_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = tu102_mc_new, + .mc = { 0x00000001, tu102_mc_new }, .mmu = tu102_mmu_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2514,7 +2514,7 @@ nv164_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = tu102_mc_new, + .mc = { 0x00000001, tu102_mc_new }, .mmu = tu102_mmu_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2553,7 +2553,7 @@ nv166_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = tu102_mc_new, + .mc = { 0x00000001, tu102_mc_new }, .mmu = tu102_mmu_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2593,7 +2593,7 @@ nv167_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = tu102_mc_new, + .mc = { 0x00000001, tu102_mc_new }, .mmu = tu102_mmu_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2631,7 +2631,7 @@ nv168_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, - .mc = tu102_mc_new, + .mc = { 0x00000001, tu102_mc_new }, .mmu = tu102_mmu_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2663,7 +2663,7 @@ nv170_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = ga100_mc_new, + .mc = { 0x00000001, ga100_mc_new }, .mmu = tu102_mmu_new, .pci = gp100_pci_new, .timer = gk20a_timer_new, @@ -2680,7 +2680,7 @@ nv172_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = ga100_mc_new, + .mc = { 0x00000001, ga100_mc_new }, .mmu = tu102_mmu_new, .pci = gp100_pci_new, .timer = gk20a_timer_new, @@ -2699,7 +2699,7 @@ nv174_chipset = { .i2c = { 0x00000001, gm200_i2c_new }, .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, - .mc = ga100_mc_new, + .mc = { 0x00000001, ga100_mc_new }, .mmu = tu102_mmu_new, .pci = gp100_pci_new, .timer = gk20a_timer_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_MC , mc); _(NVKM_SUBDEV_MMU , mmu); _(NVKM_SUBDEV_MXM , mxm); _(NVKM_SUBDEV_PCI , pci); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c index 43bf0324a82e..a1fcb81b06f3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c @@ -203,19 +203,19 @@ nvkm_mc = { void nvkm_mc_ctor(const struct nvkm_mc_func *func, struct nvkm_device *device, - int index, struct nvkm_mc *mc) + enum nvkm_subdev_type type, int inst, struct nvkm_mc *mc) { - nvkm_subdev_ctor(&nvkm_mc, device, index, &mc->subdev); + nvkm_subdev_ctor(&nvkm_mc, device, type, inst, &mc->subdev); mc->func = func; } int nvkm_mc_new_(const struct nvkm_mc_func *func, struct nvkm_device *device, - int index, struct nvkm_mc **pmc) + enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { struct nvkm_mc *mc; if (!(mc = *pmc = kzalloc(sizeof(*mc), GFP_KERNEL))) return -ENOMEM; - nvkm_mc_ctor(func, device, index, *pmc); + nvkm_mc_ctor(func, device, type, inst, *pmc); return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.c index 430a61c3df44..4cfc1c984006 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.c @@ -62,7 +62,7 @@ g84_mc = { }; int -g84_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +g84_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&g84_mc, device, index, pmc); + return nvkm_mc_new_(&g84_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c index 93ad4982ce5f..b7e58d75d894 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c @@ -62,7 +62,7 @@ g98_mc = { }; int -g98_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +g98_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&g98_mc, device, index, pmc); + return nvkm_mc_new_(&g98_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.c index 967eb3af11eb..4105175dfccd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.c @@ -68,7 +68,7 @@ ga100_mc = { }; int -ga100_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +ga100_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&ga100_mc, device, index, pmc); + return nvkm_mc_new_(&ga100_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c index f93766418056..7e7b16327b51 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c @@ -112,7 +112,7 @@ gf100_mc = { }; int -gf100_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +gf100_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&gf100_mc, device, index, pmc); + return nvkm_mc_new_(&gf100_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c index 7b8c6ecad1a5..69634fdf26d8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c @@ -60,7 +60,7 @@ gk104_mc = { }; int -gk104_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +gk104_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&gk104_mc, device, index, pmc); + return nvkm_mc_new_(&gk104_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.c index ca1bf3279dbe..03590292749a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.c @@ -35,7 +35,7 @@ gk20a_mc = { }; int -gk20a_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +gk20a_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&gk20a_mc, device, index, pmc); + return nvkm_mc_new_(&gk20a_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.c index 43db245eec9a..00e8c73f64d3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.c @@ -106,13 +106,13 @@ gp100_mc = { int gp100_mc_new_(const struct nvkm_mc_func *func, struct nvkm_device *device, - int index, struct nvkm_mc **pmc) + enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { struct gp100_mc *mc; if (!(mc = kzalloc(sizeof(*mc), GFP_KERNEL))) return -ENOMEM; - nvkm_mc_ctor(func, device, index, &mc->base); + nvkm_mc_ctor(func, device, type, inst, &mc->base); *pmc = &mc->base; spin_lock_init(&mc->lock); @@ -122,7 +122,7 @@ gp100_mc_new_(const struct nvkm_mc_func *func, struct nvkm_device *device, } int -gp100_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +gp100_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return gp100_mc_new_(&gp100_mc, device, index, pmc); + return gp100_mc_new_(&gp100_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.c index 45c62f5ef782..dd581d030ced 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.c @@ -43,7 +43,7 @@ gp10b_mc = { }; int -gp10b_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +gp10b_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return gp100_mc_new_(&gp10b_mc, device, index, pmc); + return gp100_mc_new_(&gp10b_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c index 99d50a3d956f..6c40aa4f341f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c @@ -71,7 +71,7 @@ gt215_mc = { }; int -gt215_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +gt215_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(>215_mc, device, index, pmc); + return nvkm_mc_new_(>215_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.c index 6509defd1460..bc0d09bafa99 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.c @@ -80,7 +80,7 @@ nv04_mc = { }; int -nv04_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +nv04_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&nv04_mc, device, index, pmc); + return nvkm_mc_new_(&nv04_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.c index 9213107901e6..ab59ca1ee068 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.c @@ -44,7 +44,7 @@ nv11_mc = { }; int -nv11_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +nv11_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&nv11_mc, device, index, pmc); + return nvkm_mc_new_(&nv11_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.c index 64bf5bbf8146..03d756e26e57 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.c @@ -53,7 +53,7 @@ nv17_mc = { }; int -nv17_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +nv17_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&nv17_mc, device, index, pmc); + return nvkm_mc_new_(&nv17_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.c index 65fa44a64b98..95f65766e8b0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.c @@ -48,7 +48,7 @@ nv44_mc = { }; int -nv44_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +nv44_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&nv44_mc, device, index, pmc); + return nvkm_mc_new_(&nv44_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.c index fe93b4fd7100..fce3613cdfa5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.c @@ -55,7 +55,7 @@ nv50_mc = { }; int -nv50_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +nv50_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return nvkm_mc_new_(&nv50_mc, device, index, pmc); + return nvkm_mc_new_(&nv50_mc, device, type, inst, pmc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h index 0d01b2c419ff..6118aa27c815 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h @@ -4,10 +4,10 @@ #define nvkm_mc(p) container_of((p), struct nvkm_mc, subdev) #include -void nvkm_mc_ctor(const struct nvkm_mc_func *, struct nvkm_device *, - int index, struct nvkm_mc *); -int nvkm_mc_new_(const struct nvkm_mc_func *, struct nvkm_device *, - int index, struct nvkm_mc **); +void nvkm_mc_ctor(const struct nvkm_mc_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_mc *); +int nvkm_mc_new_(const struct nvkm_mc_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_mc **); struct nvkm_mc_map { u32 stat; @@ -52,7 +52,7 @@ void gf100_mc_unk260(struct nvkm_mc *, u32); void gp100_mc_intr_unarm(struct nvkm_mc *); void gp100_mc_intr_rearm(struct nvkm_mc *); void gp100_mc_intr_mask(struct nvkm_mc *, u32, u32); -int gp100_mc_new_(const struct nvkm_mc_func *, struct nvkm_device *, int, +int gp100_mc_new_(const struct nvkm_mc_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_mc **); extern const struct nvkm_mc_map gk104_mc_intr[]; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/tu102.c index af0afd1ad6ee..58db83ebadc5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/tu102.c @@ -112,15 +112,15 @@ tu102_mc = { .reset = gk104_mc_reset, }; -int +static int tu102_mc_new_(const struct nvkm_mc_func *func, struct nvkm_device *device, - int index, struct nvkm_mc **pmc) + enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { struct tu102_mc *mc; if (!(mc = kzalloc(sizeof(*mc), GFP_KERNEL))) return -ENOMEM; - nvkm_mc_ctor(func, device, index, &mc->base); + nvkm_mc_ctor(func, device, type, inst, &mc->base); *pmc = &mc->base; spin_lock_init(&mc->lock); @@ -130,7 +130,7 @@ tu102_mc_new_(const struct nvkm_mc_func *func, struct nvkm_device *device, } int -tu102_mc_new(struct nvkm_device *device, int index, struct nvkm_mc **pmc) +tu102_mc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_mc **pmc) { - return tu102_mc_new_(&tu102_mc, device, index, pmc); + return tu102_mc_new_(&tu102_mc, device, type, inst, pmc); } From c653ab8383bfc4b26c83a6094ca795dc6eb422d4 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 17:59:28 +1000 Subject: [PATCH 36/87] drm/nouveau/mc: lookup subdev interrupt handlers with split type+inst Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c | 6 +++--- drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c | 10 +++++----- drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h | 3 ++- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c index a1fcb81b06f3..a9e7d09c3fbb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c @@ -42,7 +42,7 @@ nvkm_mc_intr_mask(struct nvkm_device *device, enum nvkm_devidx devidx, bool en) if (likely(mc) && mc->func->intr_mask) { u32 mask = nvkm_top_intr_mask(device, devidx); for (map = mc->func->intr; !mask && map->stat; map++) { - if (map->unit == devidx) + if (map->type + map->inst == devidx) mask = map->stat; } mc->func->intr_mask(mc, mask, en ? mask : 0); @@ -98,7 +98,7 @@ nvkm_mc_intr(struct nvkm_device *device, bool *handled) for (map = mc->func->intr; map->stat; map++) { if (intr & map->stat) { - subdev = nvkm_device_subdev(device, map->unit, 0); + subdev = nvkm_device_subdev(device, map->type, map->inst); if (subdev) nvkm_subdev_intr(subdev); stat &= ~map->stat; @@ -121,7 +121,7 @@ nvkm_mc_reset_mask(struct nvkm_device *device, bool isauto, if (!(pmc_enable = nvkm_top_reset(device, devidx))) { for (map = mc->func->reset; map && map->stat; map++) { if (!isauto || !map->noauto) { - if (map->unit == devidx) { + if (map->type + map->inst == devidx) { pmc_enable = map->stat; break; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c index 7e7b16327b51..9e27356bb506 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c @@ -27,11 +27,11 @@ static const struct nvkm_mc_map gf100_mc_reset[] = { { 0x00020000, NVKM_ENGINE_MSPDEC }, { 0x00008000, NVKM_ENGINE_MSVLD }, - { 0x00002000, NVKM_SUBDEV_PMU, true }, + { 0x00002000, NVKM_SUBDEV_PMU, 0, true }, { 0x00001000, NVKM_ENGINE_GR }, { 0x00000100, NVKM_ENGINE_FIFO }, - { 0x00000080, NVKM_ENGINE_CE1 }, - { 0x00000040, NVKM_ENGINE_CE0 }, + { 0x00000080, NVKM_ENGINE_CE, 1 }, + { 0x00000040, NVKM_ENGINE_CE, 0 }, { 0x00000002, NVKM_ENGINE_MSPPP }, {} }; @@ -43,8 +43,8 @@ gf100_mc_intr[] = { { 0x00008000, NVKM_ENGINE_MSVLD }, { 0x00001000, NVKM_ENGINE_GR }, { 0x00000100, NVKM_ENGINE_FIFO }, - { 0x00000040, NVKM_ENGINE_CE1 }, - { 0x00000020, NVKM_ENGINE_CE0 }, + { 0x00000040, NVKM_ENGINE_CE, 1 }, + { 0x00000020, NVKM_ENGINE_CE, 0 }, { 0x00000001, NVKM_ENGINE_MSPPP }, { 0x40000000, NVKM_SUBDEV_IBUS }, { 0x10000000, NVKM_SUBDEV_BUS }, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c index 69634fdf26d8..afe0d1dbd1f6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c @@ -26,7 +26,7 @@ const struct nvkm_mc_map gk104_mc_reset[] = { { 0x00000100, NVKM_ENGINE_FIFO }, - { 0x00002000, NVKM_SUBDEV_PMU, true }, + { 0x00002000, NVKM_SUBDEV_PMU, 0, true }, {} }; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c index 6c40aa4f341f..1b4d43531dba 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.c @@ -27,7 +27,7 @@ static const struct nvkm_mc_map gt215_mc_reset[] = { { 0x04008000, NVKM_ENGINE_MSVLD }, { 0x01020000, NVKM_ENGINE_MSPDEC }, - { 0x00802000, NVKM_ENGINE_CE0 }, + { 0x00802000, NVKM_ENGINE_CE, 0 }, { 0x00400002, NVKM_ENGINE_MSPPP }, { 0x00201000, NVKM_ENGINE_GR }, { 0x00000100, NVKM_ENGINE_FIFO }, @@ -37,7 +37,7 @@ gt215_mc_reset[] = { static const struct nvkm_mc_map gt215_mc_intr[] = { { 0x04000000, NVKM_ENGINE_DISP }, - { 0x00400000, NVKM_ENGINE_CE0 }, + { 0x00400000, NVKM_ENGINE_CE, 0 }, { 0x00020000, NVKM_ENGINE_MSPDEC }, { 0x00008000, NVKM_ENGINE_MSVLD }, { 0x00001000, NVKM_ENGINE_GR }, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h index 6118aa27c815..c8bcabb98f99 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h @@ -11,7 +11,8 @@ int nvkm_mc_new_(const struct nvkm_mc_func *, struct nvkm_device *, enum nvkm_su struct nvkm_mc_map { u32 stat; - u32 unit; + enum nvkm_subdev_type type; + int inst; bool noauto; }; From 6997ea13120f948e9ab21e803b75bf647fea2876 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 10:44:15 +1000 Subject: [PATCH 37/87] drm/nouveau/mc: use split type+inst in device reset APIs Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/include/nvkm/subdev/mc.h | 8 +++---- .../gpu/drm/nouveau/include/nvkm/subdev/top.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/falcon.c | 2 +- .../gpu/drm/nouveau/nvkm/engine/fifo/base.c | 2 +- drivers/gpu/drm/nouveau/nvkm/falcon/base.c | 10 ++++---- drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c | 23 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c | 6 ++--- .../gpu/drm/nouveau/nvkm/subdev/top/base.c | 4 ++-- 9 files changed, 28 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h index 2d84b1bfc119..88970a737601 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h @@ -8,10 +8,10 @@ struct nvkm_mc { struct nvkm_subdev subdev; }; -void nvkm_mc_enable(struct nvkm_device *, enum nvkm_devidx); -void nvkm_mc_disable(struct nvkm_device *, enum nvkm_devidx); -bool nvkm_mc_enabled(struct nvkm_device *, enum nvkm_devidx); -void nvkm_mc_reset(struct nvkm_device *, enum nvkm_devidx); +void nvkm_mc_enable(struct nvkm_device *, enum nvkm_subdev_type, int); +void nvkm_mc_disable(struct nvkm_device *, enum nvkm_subdev_type, int); +bool nvkm_mc_enabled(struct nvkm_device *, enum nvkm_subdev_type, int); +void nvkm_mc_reset(struct nvkm_device *, enum nvkm_subdev_type, int); void nvkm_mc_intr(struct nvkm_device *, bool *handled); void nvkm_mc_intr_unarm(struct nvkm_device *); void nvkm_mc_intr_rearm(struct nvkm_device *); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index cf3c4fd8942d..f94cb24eb919 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -23,7 +23,7 @@ struct nvkm_top_device { }; u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_devidx); -u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_devidx); +u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_intr(struct nvkm_device *, u32 intr, u64 *subdevs); u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_devidx); int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_devidx); diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index fca876b6bc91..06f81c96b0ae 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -111,7 +111,7 @@ nvkm_subdev_fini(struct nvkm_subdev *subdev, bool suspend) } } - nvkm_mc_reset(device, subdev->index); + nvkm_mc_reset(device, subdev->type, subdev->inst); time = ktime_to_us(ktime_get()) - time; nvkm_trace(subdev, "%s completed in %lldus\n", action, time); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c index 8675613e142b..11937eb78fc9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c @@ -108,7 +108,7 @@ nvkm_falcon_fini(struct nvkm_engine *engine, bool suspend) } } - if (nvkm_mc_enabled(device, engine->subdev.index)) { + if (nvkm_mc_enabled(device, engine->subdev.type, engine->subdev.inst)) { nvkm_mask(device, base + 0x048, 0x00000003, 0x00000000); nvkm_wr32(device, base + 0x014, 0xffffffff); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c index d473c636e47e..8ab4937ea193 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c @@ -313,7 +313,7 @@ nvkm_fifo_oneinit(struct nvkm_engine *engine) static void nvkm_fifo_preinit(struct nvkm_engine *engine) { - nvkm_mc_reset(engine->subdev.device, NVKM_ENGINE_FIFO); + nvkm_mc_reset(engine->subdev.device, NVKM_ENGINE_FIFO, 0); } static int diff --git a/drivers/gpu/drm/nouveau/nvkm/falcon/base.c b/drivers/gpu/drm/nouveau/nvkm/falcon/base.c index adc7f4aa7e62..212e224ddda8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/falcon/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/falcon/base.c @@ -88,13 +88,12 @@ int nvkm_falcon_enable(struct nvkm_falcon *falcon) { struct nvkm_device *device = falcon->owner->device; - enum nvkm_devidx id = falcon->owner->index; int ret; - nvkm_mc_enable(device, id); + nvkm_mc_enable(device, falcon->owner->type, falcon->owner->inst); ret = falcon->func->enable(falcon); if (ret) { - nvkm_mc_disable(device, id); + nvkm_mc_disable(device, falcon->owner->type, falcon->owner->inst); return ret; } @@ -105,15 +104,14 @@ void nvkm_falcon_disable(struct nvkm_falcon *falcon) { struct nvkm_device *device = falcon->owner->device; - enum nvkm_devidx id = falcon->owner->index; /* already disabled, return or wait_idle will timeout */ - if (!nvkm_mc_enabled(device, id)) + if (!nvkm_mc_enabled(device, falcon->owner->type, falcon->owner->inst)) return; falcon->func->disable(falcon); - nvkm_mc_disable(device, id); + nvkm_mc_disable(device, falcon->owner->type, falcon->owner->inst); } int diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c index a9e7d09c3fbb..7bd92d0f0337 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c @@ -111,17 +111,16 @@ nvkm_mc_intr(struct nvkm_device *device, bool *handled) } static u32 -nvkm_mc_reset_mask(struct nvkm_device *device, bool isauto, - enum nvkm_devidx devidx) +nvkm_mc_reset_mask(struct nvkm_device *device, bool isauto, enum nvkm_subdev_type type, int inst) { struct nvkm_mc *mc = device->mc; const struct nvkm_mc_map *map; u64 pmc_enable = 0; if (likely(mc)) { - if (!(pmc_enable = nvkm_top_reset(device, devidx))) { + if (!(pmc_enable = nvkm_top_reset(device, type, inst))) { for (map = mc->func->reset; map && map->stat; map++) { if (!isauto || !map->noauto) { - if (map->type + map->inst == devidx) { + if (map->type == type && map->inst == inst) { pmc_enable = map->stat; break; } @@ -133,9 +132,9 @@ nvkm_mc_reset_mask(struct nvkm_device *device, bool isauto, } void -nvkm_mc_reset(struct nvkm_device *device, enum nvkm_devidx devidx) +nvkm_mc_reset(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) { - u64 pmc_enable = nvkm_mc_reset_mask(device, true, devidx); + u64 pmc_enable = nvkm_mc_reset_mask(device, true, type, inst); if (pmc_enable) { nvkm_mask(device, 0x000200, pmc_enable, 0x00000000); nvkm_mask(device, 0x000200, pmc_enable, pmc_enable); @@ -144,17 +143,17 @@ nvkm_mc_reset(struct nvkm_device *device, enum nvkm_devidx devidx) } void -nvkm_mc_disable(struct nvkm_device *device, enum nvkm_devidx devidx) +nvkm_mc_disable(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) { - u64 pmc_enable = nvkm_mc_reset_mask(device, false, devidx); + u64 pmc_enable = nvkm_mc_reset_mask(device, false, type, inst); if (pmc_enable) nvkm_mask(device, 0x000200, pmc_enable, 0x00000000); } void -nvkm_mc_enable(struct nvkm_device *device, enum nvkm_devidx devidx) +nvkm_mc_enable(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) { - u64 pmc_enable = nvkm_mc_reset_mask(device, false, devidx); + u64 pmc_enable = nvkm_mc_reset_mask(device, false, type, inst); if (pmc_enable) { nvkm_mask(device, 0x000200, pmc_enable, pmc_enable); nvkm_rd32(device, 0x000200); @@ -162,9 +161,9 @@ nvkm_mc_enable(struct nvkm_device *device, enum nvkm_devidx devidx) } bool -nvkm_mc_enabled(struct nvkm_device *device, enum nvkm_devidx devidx) +nvkm_mc_enabled(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) { - u64 pmc_enable = nvkm_mc_reset_mask(device, false, devidx); + u64 pmc_enable = nvkm_mc_reset_mask(device, false, type, inst); return (pmc_enable != 0) && ((nvkm_rd32(device, 0x000200) & pmc_enable) == pmc_enable); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c index 3ecb3d9cbcf2..589c375a677f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c @@ -30,14 +30,14 @@ void gf100_pmu_reset(struct nvkm_pmu *pmu) { struct nvkm_device *device = pmu->subdev.device; - nvkm_mc_disable(device, NVKM_SUBDEV_PMU); - nvkm_mc_enable(device, NVKM_SUBDEV_PMU); + nvkm_mc_disable(device, NVKM_SUBDEV_PMU, 0); + nvkm_mc_enable(device, NVKM_SUBDEV_PMU, 0); } bool gf100_pmu_enabled(struct nvkm_pmu *pmu) { - return nvkm_mc_enabled(pmu->subdev.device, NVKM_SUBDEV_PMU); + return nvkm_mc_enabled(pmu->subdev.device, NVKM_SUBDEV_PMU, 0); } static const struct nvkm_pmu_func diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index 7c56d4860978..1e556e88ecbb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -59,14 +59,14 @@ nvkm_top_addr(struct nvkm_device *device, enum nvkm_devidx index) } u32 -nvkm_top_reset(struct nvkm_device *device, enum nvkm_devidx index) +nvkm_top_reset(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) { struct nvkm_top *top = device->top; struct nvkm_top_device *info; if (top) { list_for_each_entry(info, &top->device, head) { - if (info->index == index && info->reset >= 0) + if (info->type == type && info->inst == inst && info->reset >= 0) return BIT(info->reset); } } From a35047ba771461c3acef174445db35d3613d3c41 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 10:47:48 +1000 Subject: [PATCH 38/87] drm/nouveau/mc: use split type+inst in interrupt masking API Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h | 2 +- drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c | 6 +++--- drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h index 88970a737601..cb86a56e68d4 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h @@ -15,7 +15,7 @@ void nvkm_mc_reset(struct nvkm_device *, enum nvkm_subdev_type, int); void nvkm_mc_intr(struct nvkm_device *, bool *handled); void nvkm_mc_intr_unarm(struct nvkm_device *); void nvkm_mc_intr_rearm(struct nvkm_device *); -void nvkm_mc_intr_mask(struct nvkm_device *, enum nvkm_devidx, bool enable); +void nvkm_mc_intr_mask(struct nvkm_device *, enum nvkm_subdev_type, int, bool enable); void nvkm_mc_unk260(struct nvkm_device *, u32 data); int nv04_mc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mc **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index f94cb24eb919..efab50f75ee2 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -25,7 +25,7 @@ struct nvkm_top_device { u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_devidx); u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_intr(struct nvkm_device *, u32 intr, u64 *subdevs); -u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_devidx); +u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_subdev_type, int); int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_devidx); enum nvkm_devidx nvkm_top_fault(struct nvkm_device *, int fault); enum nvkm_devidx nvkm_top_engine(struct nvkm_device *, int, int *runl, int *engn); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c index 8bff384a0bb7..cdb1ead26d84 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c @@ -262,7 +262,7 @@ gm200_acr_hsfw_boot(struct nvkm_acr *acr, struct nvkm_acr_hsf *hsf, hsf->func->bld(acr, hsf); /* Boot the falcon. */ - nvkm_mc_intr_mask(device, falcon->owner->index, false); + nvkm_mc_intr_mask(device, falcon->owner->type, falcon->owner->inst, false); nvkm_falcon_wr32(falcon, 0x040, 0xdeada5a5); nvkm_falcon_set_start_addr(falcon, hsf->imem_tag << 8); @@ -279,7 +279,7 @@ gm200_acr_hsfw_boot(struct nvkm_acr *acr, struct nvkm_acr_hsf *hsf, return -EIO; nvkm_falcon_clear_interrupt(falcon, intr_clear); - nvkm_mc_intr_mask(device, falcon->owner->index, true); + nvkm_mc_intr_mask(device, falcon->owner->type, falcon->owner->inst, true); return ret; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c index 20e271744a7a..6af7959e02ea 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.c @@ -30,7 +30,7 @@ void gp100_fault_buffer_intr(struct nvkm_fault_buffer *buffer, bool enable) { struct nvkm_device *device = buffer->fault->subdev.device; - nvkm_mc_intr_mask(device, NVKM_SUBDEV_FAULT, enable); + nvkm_mc_intr_mask(device, NVKM_SUBDEV_FAULT, 0, enable); } void diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c index 437cf323ee2f..91eb6729c84d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c @@ -37,7 +37,7 @@ tu102_fault_buffer_intr(struct nvkm_fault_buffer *buffer, bool enable) */ struct nvkm_device *device = buffer->fault->subdev.device; - nvkm_mc_intr_mask(device, NVKM_SUBDEV_FAULT, enable); + nvkm_mc_intr_mask(device, NVKM_SUBDEV_FAULT, 0, enable); } static void diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c index 7bd92d0f0337..92a6d23c6ae6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c @@ -35,14 +35,14 @@ nvkm_mc_unk260(struct nvkm_device *device, u32 data) } void -nvkm_mc_intr_mask(struct nvkm_device *device, enum nvkm_devidx devidx, bool en) +nvkm_mc_intr_mask(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, bool en) { struct nvkm_mc *mc = device->mc; const struct nvkm_mc_map *map; if (likely(mc) && mc->func->intr_mask) { - u32 mask = nvkm_top_intr_mask(device, devidx); + u32 mask = nvkm_top_intr_mask(device, type, inst); for (map = mc->func->intr; !mask && map->stat; map++) { - if (map->type + map->inst == devidx) + if (map->type == type && map->inst == inst) mask = map->stat; } mc->func->intr_mask(mc, mask, en ? mask : 0); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index 1e556e88ecbb..3c80a41f3ff6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -75,14 +75,14 @@ nvkm_top_reset(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) } u32 -nvkm_top_intr_mask(struct nvkm_device *device, enum nvkm_devidx devidx) +nvkm_top_intr_mask(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) { struct nvkm_top *top = device->top; struct nvkm_top_device *info; if (top) { list_for_each_entry(info, &top->device, head) { - if (info->index == devidx && info->intr >= 0) + if (info->type == type && info->inst == inst && info->intr >= 0) return BIT(info->intr); } } From 209ec1b8412971f84aa265cbf81672e01f28bbfc Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 10:54:34 +1000 Subject: [PATCH 39/87] drm/nouveau/mc: use split type+inst when handling dev_top interrupts Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/include/nvkm/subdev/top.h | 1 - drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c | 25 ++++++++++++------- .../gpu/drm/nouveau/nvkm/subdev/top/base.c | 23 ----------------- 3 files changed, 16 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index efab50f75ee2..74314d255a52 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -24,7 +24,6 @@ struct nvkm_top_device { u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_devidx); u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_subdev_type, int); -u32 nvkm_top_intr(struct nvkm_device *, u32 intr, u64 *subdevs); u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_subdev_type, int); int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_devidx); enum nvkm_devidx nvkm_top_fault(struct nvkm_device *, int fault); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c index 92a6d23c6ae6..21c4af3f81d5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c @@ -78,22 +78,29 @@ void nvkm_mc_intr(struct nvkm_device *device, bool *handled) { struct nvkm_mc *mc = device->mc; + struct nvkm_top *top = device->top; + struct nvkm_top_device *tdev; struct nvkm_subdev *subdev; const struct nvkm_mc_map *map; u32 stat, intr; - u64 subdevs; if (unlikely(!mc)) return; - intr = nvkm_mc_intr_stat(mc); - stat = nvkm_top_intr(device, intr, &subdevs); - while (subdevs) { - enum nvkm_devidx subidx = __ffs64(subdevs); - subdev = nvkm_device_subdev(device, subidx, 0); - if (subdev) - nvkm_subdev_intr(subdev); - subdevs &= ~BIT_ULL(subidx); + stat = intr = nvkm_mc_intr_stat(mc); + + if (top) { + list_for_each_entry(tdev, &top->device, head) { + if (tdev->intr >= 0 && (stat & BIT(tdev->intr))) { + subdev = nvkm_device_subdev(device, tdev->type, tdev->inst); + if (subdev) { + nvkm_subdev_intr(subdev); + stat &= ~BIT(tdev->intr); + if (!stat) + break; + } + } + } } for (map = mc->func->intr; map->stat; map++) { diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index 3c80a41f3ff6..1eda904367b8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -90,29 +90,6 @@ nvkm_top_intr_mask(struct nvkm_device *device, enum nvkm_subdev_type type, int i return 0; } -u32 -nvkm_top_intr(struct nvkm_device *device, u32 intr, u64 *psubdevs) -{ - struct nvkm_top *top = device->top; - struct nvkm_top_device *info; - u64 subdevs = 0; - u32 handled = 0; - - if (top) { - list_for_each_entry(info, &top->device, head) { - if (info->index != NVKM_SUBDEV_NR && info->intr >= 0) { - if (intr & BIT(info->intr)) { - subdevs |= BIT_ULL(info->index); - handled |= BIT(info->intr); - } - } - } - } - - *psubdevs = subdevs; - return intr & ~handled; -} - int nvkm_top_fault_id(struct nvkm_device *device, enum nvkm_devidx devidx) { From 6dd123ba8a8be762c294cee293783345ed6dfec5 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:34:27 +1000 Subject: [PATCH 40/87] drm/nouveau/mmu: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/mmu.h | 30 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 175 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/mmu/base.c | 8 +- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/gm200.c | 7 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.c | 7 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/gp100.c | 7 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.c | 7 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/gv100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/nv04.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/nv41.c | 7 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/nv44.c | 7 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/nv50.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/priv.h | 8 +- .../gpu/drm/nouveau/nvkm/subdev/mmu/tu102.c | 5 +- 22 files changed, 162 insertions(+), 150 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 75de60cf9577..2cd619e258ef 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_mmu *mmu; struct nvkm_subdev *mxm; struct nvkm_pci *pci; struct nvkm_pmu *pmu; @@ -131,7 +130,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*mmu )(struct nvkm_device *, int idx, struct nvkm_mmu **); int (*mxm )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*pci )(struct nvkm_device *, int idx, struct nvkm_pci **); int (*pmu )(struct nvkm_device *, int idx, struct nvkm_pmu **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index f4d1112094aa..199bd8efd08f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -10,6 +10,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_INSTMEM , struct nvkm_instmem , imem) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_LTC , struct nvkm_ltc , ltc) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_MMU , struct nvkm_mmu , mmu) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h index f0a537319247..0911e73f7424 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mmu.h @@ -122,19 +122,19 @@ struct nvkm_mmu { struct nvkm_device_oclass user; }; -int nv04_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int nv41_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int nv44_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int nv50_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int g84_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int mcp77_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int gf100_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int gk104_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int gk20a_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int gm200_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int gm20b_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int gp100_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int gp10b_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int gv100_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); -int tu102_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); +int nv04_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int nv41_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int nv44_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int nv50_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int g84_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int mcp77_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int gf100_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int gk104_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int gk20a_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int gm200_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int gm20b_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int gp100_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int gp10b_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int gv100_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); +int tu102_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 06f81c96b0ae..3f1fa104de67 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_MMU ] = "mmu", [NVKM_SUBDEV_MXM ] = "mxm", [NVKM_SUBDEV_PCI ] = "pci", [NVKM_SUBDEV_PMU ] = "pmu", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 437b7557b64b..a531b1a7cb44 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -85,7 +85,7 @@ nv4_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -106,7 +106,7 @@ nv5_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -128,7 +128,7 @@ nv10_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -148,7 +148,7 @@ nv11_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv11_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -170,7 +170,7 @@ nv15_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -192,7 +192,7 @@ nv17_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -214,7 +214,7 @@ nv18_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -236,7 +236,7 @@ nv1a_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -258,7 +258,7 @@ nv1f_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -280,7 +280,7 @@ nv20_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -302,7 +302,7 @@ nv25_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -324,7 +324,7 @@ nv28_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -346,7 +346,7 @@ nv2a_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -368,7 +368,7 @@ nv30_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -390,7 +390,7 @@ nv31_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -413,7 +413,7 @@ nv34_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -436,7 +436,7 @@ nv35_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -458,7 +458,7 @@ nv36_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv04_pci_new, .timer = nv04_timer_new, .disp = nv04_disp_new, @@ -481,7 +481,7 @@ nv40_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv40_timer_new, @@ -507,7 +507,7 @@ nv41_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv41_mmu_new, + .mmu = { 0x00000001, nv41_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -533,7 +533,7 @@ nv42_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv41_mmu_new, + .mmu = { 0x00000001, nv41_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -559,7 +559,7 @@ nv43_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv41_mmu_new, + .mmu = { 0x00000001, nv41_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -585,7 +585,7 @@ nv44_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, - .mmu = nv44_mmu_new, + .mmu = { 0x00000001, nv44_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -611,7 +611,7 @@ nv45_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -637,7 +637,7 @@ nv46_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, - .mmu = nv44_mmu_new, + .mmu = { 0x00000001, nv44_mmu_new }, .pci = nv46_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -663,7 +663,7 @@ nv47_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv41_mmu_new, + .mmu = { 0x00000001, nv41_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -689,7 +689,7 @@ nv49_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv41_mmu_new, + .mmu = { 0x00000001, nv41_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -715,7 +715,7 @@ nv4a_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, - .mmu = nv04_mmu_new, + .mmu = { 0x00000001, nv04_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -741,7 +741,7 @@ nv4b_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, - .mmu = nv41_mmu_new, + .mmu = { 0x00000001, nv41_mmu_new }, .pci = nv40_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -767,7 +767,7 @@ nv4c_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, - .mmu = nv44_mmu_new, + .mmu = { 0x00000001, nv44_mmu_new }, .pci = nv4c_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -793,7 +793,7 @@ nv4e_chipset = { .i2c = { 0x00000001, nv4e_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, - .mmu = nv44_mmu_new, + .mmu = { 0x00000001, nv44_mmu_new }, .pci = nv4c_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -821,7 +821,7 @@ nv50_chipset = { .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, nv50_mc_new }, - .mmu = nv50_mmu_new, + .mmu = { 0x00000001, nv50_mmu_new }, .mxm = nv50_mxm_new, .pci = nv46_pci_new, .therm = nv50_therm_new, @@ -848,7 +848,7 @@ nv63_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, - .mmu = nv44_mmu_new, + .mmu = { 0x00000001, nv44_mmu_new }, .pci = nv4c_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -874,7 +874,7 @@ nv67_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, - .mmu = nv44_mmu_new, + .mmu = { 0x00000001, nv44_mmu_new }, .pci = nv4c_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -900,7 +900,7 @@ nv68_chipset = { .i2c = { 0x00000001, nv04_i2c_new }, .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, - .mmu = nv44_mmu_new, + .mmu = { 0x00000001, nv44_mmu_new }, .pci = nv4c_pci_new, .therm = nv40_therm_new, .timer = nv41_timer_new, @@ -928,7 +928,7 @@ nv84_chipset = { .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g84_pci_new, .therm = g84_therm_new, @@ -960,7 +960,7 @@ nv86_chipset = { .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g84_pci_new, .therm = g84_therm_new, @@ -992,7 +992,7 @@ nv92_chipset = { .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g92_pci_new, .therm = g84_therm_new, @@ -1024,7 +1024,7 @@ nv94_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .therm = g84_therm_new, @@ -1056,7 +1056,7 @@ nv96_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .therm = g84_therm_new, @@ -1088,7 +1088,7 @@ nv98_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g98_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .therm = g84_therm_new, @@ -1120,7 +1120,7 @@ nva0_chipset = { .i2c = { 0x00000001, nv50_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .therm = g84_therm_new, @@ -1152,7 +1152,7 @@ nva3_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, gt215_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .pmu = gt215_pmu_new, @@ -1186,7 +1186,7 @@ nva5_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, gt215_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .pmu = gt215_pmu_new, @@ -1219,7 +1219,7 @@ nva8_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, gt215_mc_new }, - .mmu = g84_mmu_new, + .mmu = { 0x00000001, g84_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .pmu = gt215_pmu_new, @@ -1252,7 +1252,7 @@ nvaa_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g98_mc_new }, - .mmu = mcp77_mmu_new, + .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .therm = g84_therm_new, @@ -1284,7 +1284,7 @@ nvac_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g98_mc_new }, - .mmu = mcp77_mmu_new, + .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .therm = g84_therm_new, @@ -1316,7 +1316,7 @@ nvaf_chipset = { .i2c = { 0x00000001, g94_i2c_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, gt215_mc_new }, - .mmu = mcp77_mmu_new, + .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = nv50_mxm_new, .pci = g94_pci_new, .pmu = gt215_pmu_new, @@ -1352,7 +1352,7 @@ nvc0_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf100_pci_new, .pmu = gf100_pmu_new, @@ -1389,7 +1389,7 @@ nvc1_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf106_pci_new, .pmu = gf100_pmu_new, @@ -1425,7 +1425,7 @@ nvc3_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf106_pci_new, .pmu = gf100_pmu_new, @@ -1461,7 +1461,7 @@ nvc4_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf100_pci_new, .pmu = gf100_pmu_new, @@ -1498,7 +1498,7 @@ nvc8_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf100_pci_new, .pmu = gf100_pmu_new, @@ -1535,7 +1535,7 @@ nvce_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf100_pci_new, .pmu = gf100_pmu_new, @@ -1572,7 +1572,7 @@ nvcf_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf106_pci_new, .pmu = gf100_pmu_new, @@ -1608,7 +1608,7 @@ nvd7_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf106_pci_new, .therm = gf119_therm_new, @@ -1643,7 +1643,7 @@ nvd9_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, - .mmu = gf100_mmu_new, + .mmu = { 0x00000001, gf100_mmu_new }, .mxm = nv50_mxm_new, .pci = gf106_pci_new, .pmu = gf119_pmu_new, @@ -1679,7 +1679,7 @@ nve4_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gk104_pmu_new, @@ -1718,7 +1718,7 @@ nve6_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gk104_pmu_new, @@ -1757,7 +1757,7 @@ nve7_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gk104_pmu_new, @@ -1791,7 +1791,7 @@ nvea_chipset = { .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gk20a_mmu_new, + .mmu = { 0x00000001, gk20a_mmu_new }, .pmu = gk20a_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -1821,7 +1821,7 @@ nvf0_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gk110_pmu_new, @@ -1859,7 +1859,7 @@ nvf1_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gk110_pmu_new, @@ -1897,7 +1897,7 @@ nv106_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gk208_pmu_new, @@ -1935,7 +1935,7 @@ nv108_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gk208_pmu_new, @@ -1973,7 +1973,7 @@ nv117_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm107_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gm107_pmu_new, @@ -2009,7 +2009,7 @@ nv118_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm107_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gk104_mmu_new, + .mmu = { 0x00000001, gk104_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gm107_pmu_new, @@ -2043,7 +2043,7 @@ nv120_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gm200_mmu_new, + .mmu = { 0x00000001, gm200_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gm200_pmu_new, @@ -2081,7 +2081,7 @@ nv124_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gm200_mmu_new, + .mmu = { 0x00000001, gm200_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gm200_pmu_new, @@ -2119,7 +2119,7 @@ nv126_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gm200_mmu_new, + .mmu = { 0x00000001, gm200_mmu_new }, .mxm = nv50_mxm_new, .pci = gk104_pci_new, .pmu = gm200_pmu_new, @@ -2152,7 +2152,7 @@ nv12b_chipset = { .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, - .mmu = gm20b_mmu_new, + .mmu = { 0x00000001, gm20b_mmu_new }, .pmu = gm20b_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2181,7 +2181,7 @@ nv130_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp100_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, - .mmu = gp100_mmu_new, + .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = gp100_pci_new, .pmu = gm200_pmu_new, @@ -2221,7 +2221,7 @@ nv132_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, - .mmu = gp100_mmu_new, + .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2259,7 +2259,7 @@ nv134_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, - .mmu = gp100_mmu_new, + .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2297,7 +2297,7 @@ nv136_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, - .mmu = gp100_mmu_new, + .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2334,7 +2334,7 @@ nv137_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, - .mmu = gp100_mmu_new, + .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2372,7 +2372,7 @@ nv138_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, - .mmu = gp100_mmu_new, + .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = gp100_pci_new, .pmu = gp102_pmu_new, @@ -2404,7 +2404,7 @@ nv13b_chipset = { .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gp10b_ltc_new }, .mc = { 0x00000001, gp10b_mc_new }, - .mmu = gp10b_mmu_new, + .mmu = { 0x00000001, gp10b_mmu_new }, .pmu = gp10b_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2433,7 +2433,7 @@ nv140_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, - .mmu = gv100_mmu_new, + .mmu = { 0x00000001, gv100_mmu_new }, .pci = gp100_pci_new, .pmu = gp102_pmu_new, .therm = gp100_therm_new, @@ -2477,7 +2477,7 @@ nv162_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, - .mmu = tu102_mmu_new, + .mmu = { 0x00000001, tu102_mmu_new }, .pci = gp100_pci_new, .pmu = gp102_pmu_new, .therm = gp100_therm_new, @@ -2515,7 +2515,7 @@ nv164_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, - .mmu = tu102_mmu_new, + .mmu = { 0x00000001, tu102_mmu_new }, .pci = gp100_pci_new, .pmu = gp102_pmu_new, .therm = gp100_therm_new, @@ -2554,7 +2554,7 @@ nv166_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, - .mmu = tu102_mmu_new, + .mmu = { 0x00000001, tu102_mmu_new }, .pci = gp100_pci_new, .pmu = gp102_pmu_new, .therm = gp100_therm_new, @@ -2594,7 +2594,7 @@ nv167_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, - .mmu = tu102_mmu_new, + .mmu = { 0x00000001, tu102_mmu_new }, .pci = gp100_pci_new, .pmu = gp102_pmu_new, .therm = gp100_therm_new, @@ -2632,7 +2632,7 @@ nv168_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, - .mmu = tu102_mmu_new, + .mmu = { 0x00000001, tu102_mmu_new }, .pci = gp100_pci_new, .pmu = gp102_pmu_new, .therm = gp100_therm_new, @@ -2664,7 +2664,7 @@ nv170_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, - .mmu = tu102_mmu_new, + .mmu = { 0x00000001, tu102_mmu_new }, .pci = gp100_pci_new, .timer = gk20a_timer_new, }; @@ -2681,7 +2681,7 @@ nv172_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, - .mmu = tu102_mmu_new, + .mmu = { 0x00000001, tu102_mmu_new }, .pci = gp100_pci_new, .timer = gk20a_timer_new, .disp = ga102_disp_new, @@ -2700,7 +2700,7 @@ nv174_chipset = { .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, - .mmu = tu102_mmu_new, + .mmu = { 0x00000001, tu102_mmu_new }, .pci = gp100_pci_new, .timer = gk20a_timer_new, .disp = ga102_disp_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_MMU , mmu); _(NVKM_SUBDEV_MXM , mxm); _(NVKM_SUBDEV_PCI , pci); _(NVKM_SUBDEV_PMU , pmu); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c index a01191d6bef8..ad3b44a9e0e7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c @@ -415,9 +415,9 @@ nvkm_mmu = { void nvkm_mmu_ctor(const struct nvkm_mmu_func *func, struct nvkm_device *device, - int index, struct nvkm_mmu *mmu) + enum nvkm_subdev_type type, int inst, struct nvkm_mmu *mmu) { - nvkm_subdev_ctor(&nvkm_mmu, device, index, &mmu->subdev); + nvkm_subdev_ctor(&nvkm_mmu, device, type, inst, &mmu->subdev); mmu->func = func; mmu->dma_bits = func->dma_bits; nvkm_mmu_ptc_init(mmu); @@ -428,10 +428,10 @@ nvkm_mmu_ctor(const struct nvkm_mmu_func *func, struct nvkm_device *device, int nvkm_mmu_new_(const struct nvkm_mmu_func *func, struct nvkm_device *device, - int index, struct nvkm_mmu **pmmu) + enum nvkm_subdev_type type, int inst, struct nvkm_mmu **pmmu) { if (!(*pmmu = kzalloc(sizeof(**pmmu), GFP_KERNEL))) return -ENOMEM; - nvkm_mmu_ctor(func, device, index, *pmmu); + nvkm_mmu_ctor(func, device, type, inst, *pmmu); return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.c index 8accda5a772b..ce47a3b97be9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.c @@ -35,7 +35,8 @@ g84_mmu = { }; int -g84_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +g84_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&g84_mmu, device, index, pmmu); + return nvkm_mmu_new_(&g84_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.c index 2cd5ec81c0d0..7a28b1d49f7c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.c @@ -84,7 +84,8 @@ gf100_mmu = { }; int -gf100_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +gf100_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&gf100_mmu, device, index, pmmu); + return nvkm_mmu_new_(&gf100_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk104.c index 3d7d1eb1cff9..34c9b2b821f6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk104.c @@ -35,7 +35,8 @@ gk104_mmu = { }; int -gk104_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +gk104_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&gk104_mmu, device, index, pmmu); + return nvkm_mmu_new_(&gk104_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.c index ac74965a60d4..a7db29c429ee 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.c @@ -35,7 +35,8 @@ gk20a_mmu = { }; int -gk20a_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +gk20a_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&gk20a_mmu, device, index, pmmu); + return nvkm_mmu_new_(&gk20a_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.c index 83990c83f9f8..e1696f637a68 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.c @@ -90,9 +90,10 @@ gm200_mmu_fixed = { }; int -gm200_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +gm200_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { if (device->fb->page) - return nvkm_mmu_new_(&gm200_mmu_fixed, device, index, pmmu); - return nvkm_mmu_new_(&gm200_mmu, device, index, pmmu); + return nvkm_mmu_new_(&gm200_mmu_fixed, device, type, inst, pmmu); + return nvkm_mmu_new_(&gm200_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.c index 7353a94b4091..e6e1a8ad701e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.c @@ -47,9 +47,10 @@ gm20b_mmu_fixed = { }; int -gm20b_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +gm20b_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { if (device->fb->page) - return nvkm_mmu_new_(&gm20b_mmu_fixed, device, index, pmmu); - return nvkm_mmu_new_(&gm20b_mmu, device, index, pmmu); + return nvkm_mmu_new_(&gm20b_mmu_fixed, device, type, inst, pmmu); + return nvkm_mmu_new_(&gm20b_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.c index 65cb9d28e60e..daa5ab0f8711 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.c @@ -37,9 +37,10 @@ gp100_mmu = { }; int -gp100_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +gp100_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { if (!nvkm_boolopt(device->cfgopt, "GP100MmuLayout", true)) - return gm200_mmu_new(device, index, pmmu); - return nvkm_mmu_new_(&gp100_mmu, device, index, pmmu); + return gm200_mmu_new(device, type, inst, pmmu); + return nvkm_mmu_new_(&gp100_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.c index 0a50be9a785a..edd0bf9a5cd8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.c @@ -37,9 +37,10 @@ gp10b_mmu = { }; int -gp10b_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +gp10b_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { if (!nvkm_boolopt(device->cfgopt, "GP100MmuLayout", true)) - return gm20b_mmu_new(device, index, pmmu); - return nvkm_mmu_new_(&gp10b_mmu, device, index, pmmu); + return gm20b_mmu_new(device, type, inst, pmmu); + return nvkm_mmu_new_(&gp10b_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.c index e0997eedd6d9..fb8bdc88d566 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.c @@ -37,7 +37,8 @@ gv100_mmu = { }; int -gv100_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +gv100_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&gv100_mmu, device, index, pmmu); + return nvkm_mmu_new_(&gv100_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.c index 0527b50730d9..514876d6411b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.c @@ -35,7 +35,8 @@ mcp77_mmu = { }; int -mcp77_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +mcp77_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&mcp77_mmu, device, index, pmmu); + return nvkm_mmu_new_(&mcp77_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.c index d201c887c2cd..0674aa8f68c8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.c @@ -35,7 +35,8 @@ nv04_mmu = { }; int -nv04_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +nv04_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&nv04_mmu, device, index, pmmu); + return nvkm_mmu_new_(&nv04_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.c index adca81895c09..909f92b72847 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.c @@ -47,11 +47,12 @@ nv41_mmu = { }; int -nv41_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +nv41_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { if (device->type == NVKM_DEVICE_AGP || !nvkm_boolopt(device->cfgopt, "NvPCIE", true)) - return nv04_mmu_new(device, index, pmmu); + return nv04_mmu_new(device, type, inst, pmmu); - return nvkm_mmu_new_(&nv41_mmu, device, index, pmmu); + return nvkm_mmu_new_(&nv41_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.c index 598c53a27bde..dd2a8d461da3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.c @@ -62,11 +62,12 @@ nv44_mmu = { }; int -nv44_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +nv44_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { if (device->type == NVKM_DEVICE_AGP || !nvkm_boolopt(device->cfgopt, "NvPCIE", true)) - return nv04_mmu_new(device, index, pmmu); + return nv04_mmu_new(device, type, inst, pmmu); - return nvkm_mmu_new_(&nv44_mmu, device, index, pmmu); + return nvkm_mmu_new_(&nv44_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv50.c index c0083ddda65a..78d46e35d0a9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv50.c @@ -71,7 +71,8 @@ nv50_mmu = { }; int -nv50_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +nv50_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&nv50_mmu, device, index, pmmu); + return nvkm_mmu_new_(&nv50_mmu, device, type, inst, pmmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/priv.h index 479b02344271..5265bf4d8366 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/priv.h @@ -4,10 +4,10 @@ #define nvkm_mmu(p) container_of((p), struct nvkm_mmu, subdev) #include -void nvkm_mmu_ctor(const struct nvkm_mmu_func *, struct nvkm_device *, - int index, struct nvkm_mmu *); -int nvkm_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *, - int index, struct nvkm_mmu **); +void nvkm_mmu_ctor(const struct nvkm_mmu_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_mmu *); +int nvkm_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_mmu **); struct nvkm_mmu_func { void (*init)(struct nvkm_mmu *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.c index 94081f35f967..8d060ce47f86 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.c @@ -51,7 +51,8 @@ tu102_mmu = { }; int -tu102_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) +tu102_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mmu **pmmu) { - return nvkm_mmu_new_(&tu102_mmu, device, index, pmmu); + return nvkm_mmu_new_(&tu102_mmu, device, type, inst, pmmu); } From 353108a49fc8464a6ce23ff3724662910ace7687 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 21:43:22 +1000 Subject: [PATCH 41/87] drm/nouveau/mmu: index engref by subdev type None of the chipsets we use this on have instanced engines, so this is fine. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c index 0409c69daacb..cc05c91798ff 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c @@ -118,7 +118,7 @@ nvkm_fifo_chan_child_del(struct nvkm_oproxy *base) chan->func->engine_dtor(chan, engine); nvkm_object_del(&engn->object); if (chan->vmm) - atomic_dec(&chan->vmm->engref[engine->subdev.index]); + atomic_dec(&chan->vmm->engref[engine->subdev.type]); } } @@ -152,7 +152,7 @@ nvkm_fifo_chan_child_new(const struct nvkm_oclass *oclass, void *data, u32 size, }; if (chan->vmm) - atomic_inc(&chan->vmm->engref[engine->subdev.index]); + atomic_inc(&chan->vmm->engref[engine->subdev.type]); if (engine->func->fifo.cclass) { ret = engine->func->fifo.cclass(chan, &cclass, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c index 5800cda68e0c..b7548dcd72c7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.c @@ -207,7 +207,7 @@ nv50_vmm_flush(struct nvkm_vmm *vmm, int level) case NVKM_ENGINE_MSVLD : id = 0x09; break; case NVKM_ENGINE_CIPHER: case NVKM_ENGINE_SEC : id = 0x0a; break; - case NVKM_ENGINE_CE0 : id = 0x0d; break; + case NVKM_ENGINE_CE : id = 0x0d; break; default: continue; } From 0a7bff10aed6231a0a5ad9cfc19eab51d4ce1d0a Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:36:38 +1000 Subject: [PATCH 42/87] drm/nouveau/mxm: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/mxm.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 71 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/mxm/base.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/mxm/priv.h | 2 +- 8 files changed, 44 insertions(+), 45 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 2cd619e258ef..48d832c6f64f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_subdev *mxm; struct nvkm_pci *pci; struct nvkm_pmu *pmu; struct nvkm_therm *therm; @@ -130,7 +129,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*mxm )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*pci )(struct nvkm_device *, int idx, struct nvkm_pci **); int (*pmu )(struct nvkm_device *, int idx, struct nvkm_pmu **); int (*therm )(struct nvkm_device *, int idx, struct nvkm_therm **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 199bd8efd08f..782ec223756f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -5,6 +5,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_IBUS , struct nvkm_subdev , ibus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GPIO , struct nvkm_gpio , gpio) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_I2C , struct nvkm_i2c , i2c) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_MXM , struct nvkm_subdev , mxm) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_MC , struct nvkm_mc , mc) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_INSTMEM , struct nvkm_instmem , imem) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mxm.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mxm.h index 78df1e9def05..7d4132a17d0f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/mxm.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/mxm.h @@ -3,5 +3,5 @@ #define __NVKM_MXM_H__ #include -int nv50_mxm_new(struct nvkm_device *, int, struct nvkm_subdev **); +int nv50_mxm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 3f1fa104de67..c6f198eb624c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_MXM ] = "mxm", [NVKM_SUBDEV_PCI ] = "pci", [NVKM_SUBDEV_PMU ] = "pmu", [NVKM_SUBDEV_THERM ] = "therm", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index a531b1a7cb44..8c127bd0780e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -822,7 +822,7 @@ nv50_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, nv50_mc_new }, .mmu = { 0x00000001, nv50_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = nv46_pci_new, .therm = nv50_therm_new, .timer = nv41_timer_new, @@ -929,7 +929,7 @@ nv84_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g84_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -961,7 +961,7 @@ nv86_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g84_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -993,7 +993,7 @@ nv92_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g92_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -1025,7 +1025,7 @@ nv94_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -1057,7 +1057,7 @@ nv96_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -1089,7 +1089,7 @@ nv98_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g98_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -1121,7 +1121,7 @@ nva0_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -1153,7 +1153,7 @@ nva3_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, gt215_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .pmu = gt215_pmu_new, .therm = gt215_therm_new, @@ -1187,7 +1187,7 @@ nva5_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, gt215_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .pmu = gt215_pmu_new, .therm = gt215_therm_new, @@ -1220,7 +1220,7 @@ nva8_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, gt215_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .pmu = gt215_pmu_new, .therm = gt215_therm_new, @@ -1253,7 +1253,7 @@ nvaa_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g98_mc_new }, .mmu = { 0x00000001, mcp77_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -1285,7 +1285,7 @@ nvac_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, g98_mc_new }, .mmu = { 0x00000001, mcp77_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .therm = g84_therm_new, .timer = nv41_timer_new, @@ -1317,7 +1317,7 @@ nvaf_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, gt215_mc_new }, .mmu = { 0x00000001, mcp77_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = g94_pci_new, .pmu = gt215_pmu_new, .therm = gt215_therm_new, @@ -1353,7 +1353,7 @@ nvc0_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf100_pci_new, .pmu = gf100_pmu_new, .therm = gt215_therm_new, @@ -1390,7 +1390,7 @@ nvc1_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf106_pci_new, .pmu = gf100_pmu_new, .therm = gt215_therm_new, @@ -1426,7 +1426,7 @@ nvc3_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf106_pci_new, .pmu = gf100_pmu_new, .therm = gt215_therm_new, @@ -1462,7 +1462,7 @@ nvc4_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf100_pci_new, .pmu = gf100_pmu_new, .therm = gt215_therm_new, @@ -1499,7 +1499,7 @@ nvc8_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf100_pci_new, .pmu = gf100_pmu_new, .therm = gt215_therm_new, @@ -1536,7 +1536,7 @@ nvce_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf100_pci_new, .pmu = gf100_pmu_new, .therm = gt215_therm_new, @@ -1573,7 +1573,7 @@ nvcf_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf106_pci_new, .pmu = gf100_pmu_new, .therm = gt215_therm_new, @@ -1609,7 +1609,7 @@ nvd7_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf106_pci_new, .therm = gf119_therm_new, .timer = nv41_timer_new, @@ -1644,7 +1644,7 @@ nvd9_chipset = { .ltc = { 0x00000001, gf100_ltc_new }, .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gf106_pci_new, .pmu = gf119_pmu_new, .therm = gf119_therm_new, @@ -1680,7 +1680,7 @@ nve4_chipset = { .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gk104_pmu_new, .therm = gk104_therm_new, @@ -1719,7 +1719,7 @@ nve6_chipset = { .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gk104_pmu_new, .therm = gk104_therm_new, @@ -1758,7 +1758,7 @@ nve7_chipset = { .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gk104_pmu_new, .therm = gk104_therm_new, @@ -1822,7 +1822,7 @@ nvf0_chipset = { .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gk110_pmu_new, .therm = gk104_therm_new, @@ -1860,7 +1860,7 @@ nvf1_chipset = { .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gk110_pmu_new, .therm = gk104_therm_new, @@ -1898,7 +1898,7 @@ nv106_chipset = { .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gk208_pmu_new, .therm = gk104_therm_new, @@ -1936,7 +1936,7 @@ nv108_chipset = { .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gk208_pmu_new, .therm = gk104_therm_new, @@ -1974,7 +1974,7 @@ nv117_chipset = { .ltc = { 0x00000001, gm107_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gm107_pmu_new, .therm = gm107_therm_new, @@ -2010,7 +2010,7 @@ nv118_chipset = { .ltc = { 0x00000001, gm107_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gm107_pmu_new, .therm = gm107_therm_new, @@ -2044,7 +2044,7 @@ nv120_chipset = { .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm200_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gm200_pmu_new, .therm = gm200_therm_new, @@ -2082,7 +2082,7 @@ nv124_chipset = { .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm200_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gm200_pmu_new, .therm = gm200_therm_new, @@ -2120,7 +2120,7 @@ nv126_chipset = { .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm200_mmu_new }, - .mxm = nv50_mxm_new, + .mxm = { 0x00000001, nv50_mxm_new }, .pci = gk104_pci_new, .pmu = gm200_pmu_new, .therm = gm200_therm_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_MXM , mxm); _(NVKM_SUBDEV_PCI , pci); _(NVKM_SUBDEV_PMU , pmu); _(NVKM_SUBDEV_THERM , therm); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c index f44682d62f75..c1acfe642da3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c @@ -230,7 +230,8 @@ nvkm_mxm = { }; int -nvkm_mxm_new_(struct nvkm_device *device, int index, struct nvkm_mxm **pmxm) +nvkm_mxm_new_(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_mxm **pmxm) { struct nvkm_bios *bios = device->bios; struct nvkm_mxm *mxm; @@ -240,7 +241,7 @@ nvkm_mxm_new_(struct nvkm_device *device, int index, struct nvkm_mxm **pmxm) if (!(mxm = *pmxm = kzalloc(sizeof(*mxm), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_mxm, device, index, &mxm->subdev); + nvkm_subdev_ctor(&nvkm_mxm, device, type, inst, &mxm->subdev); data = mxm_table(bios, &ver, &len); if (!data || !(ver = nvbios_rd08(bios, data))) { diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c index 70e2c414bb7b..f3167904dcb0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c @@ -201,12 +201,13 @@ mxm_dcb_sanitise(struct nvkm_mxm *mxm) } int -nv50_mxm_new(struct nvkm_device *device, int index, struct nvkm_subdev **pmxm) +nv50_mxm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_subdev **pmxm) { struct nvkm_mxm *mxm; int ret; - ret = nvkm_mxm_new_(device, index, &mxm); + ret = nvkm_mxm_new_(device, type, inst, &mxm); if (mxm) *pmxm = &mxm->subdev; if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/priv.h index fc8f69e6fc64..fcacb6c6a7f7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/priv.h @@ -12,5 +12,5 @@ struct nvkm_mxm { u8 *mxms; }; -int nvkm_mxm_new_(struct nvkm_device *, int index, struct nvkm_mxm **); +int nvkm_mxm_new_(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_mxm **); #endif From 9b70cd54a13e626ae830ab2972c1dadcd6347fb2 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:40:10 +1000 Subject: [PATCH 43/87] drm/nouveau/pci: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/pci.h | 22 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 169 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/pci/base.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c | 5 +- drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c | 5 +- drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/gf106.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/gp100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/nv04.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/nv40.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/nv46.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pci/priv.h | 4 +- 18 files changed, 133 insertions(+), 125 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 48d832c6f64f..a240d2c6ad9a 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_pci *pci; struct nvkm_pmu *pmu; struct nvkm_therm *therm; struct nvkm_timer *timer; @@ -129,7 +128,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*pci )(struct nvkm_device *, int idx, struct nvkm_pci **); int (*pmu )(struct nvkm_device *, int idx, struct nvkm_pmu **); int (*therm )(struct nvkm_device *, int idx, struct nvkm_therm **); int (*timer )(struct nvkm_device *, int idx, struct nvkm_timer **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 782ec223756f..895f6afa51b4 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -1,4 +1,5 @@ /* SPDX-License-Identifier: MIT */ +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_PCI , struct nvkm_pci , pci) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_IBUS , struct nvkm_subdev , ibus) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h index 4803a4fad4a2..74c19bdfb757 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h @@ -39,17 +39,17 @@ void nvkm_pci_wr32(struct nvkm_pci *, u16 addr, u32 data); u32 nvkm_pci_mask(struct nvkm_pci *, u16 addr, u32 mask, u32 value); void nvkm_pci_rom_shadow(struct nvkm_pci *, bool shadow); -int nv04_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int nv40_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int nv46_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int nv4c_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int g84_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int g92_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int g94_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int gf100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int gf106_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int gk104_pci_new(struct nvkm_device *, int, struct nvkm_pci **); -int gp100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); +int nv04_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int nv40_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int nv46_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int nv4c_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int g84_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int g92_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int g94_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int gf100_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int gf106_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int gk104_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); +int gp100_pci_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pci **); /* pcie functions */ int nvkm_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8 width); diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index c6f198eb624c..0bf43df88eaa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_PCI ] = "pci", [NVKM_SUBDEV_PMU ] = "pmu", [NVKM_SUBDEV_THERM ] = "therm", [NVKM_SUBDEV_TIMER ] = "tmr", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 8c127bd0780e..a08e9300aee6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -86,7 +86,7 @@ nv4_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -107,7 +107,7 @@ nv5_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -129,7 +129,7 @@ nv10_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -149,7 +149,7 @@ nv11_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv11_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -171,7 +171,7 @@ nv15_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -193,7 +193,7 @@ nv17_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -215,7 +215,7 @@ nv18_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -237,7 +237,7 @@ nv1a_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -259,7 +259,7 @@ nv1f_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -281,7 +281,7 @@ nv20_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -303,7 +303,7 @@ nv25_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -325,7 +325,7 @@ nv28_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -347,7 +347,7 @@ nv2a_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -369,7 +369,7 @@ nv30_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -391,7 +391,7 @@ nv31_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -414,7 +414,7 @@ nv34_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -437,7 +437,7 @@ nv35_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -459,7 +459,7 @@ nv36_chipset = { .imem = { 0x00000001, nv04_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv04_pci_new, + .pci = { 0x00000001, nv04_pci_new }, .timer = nv04_timer_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -482,7 +482,7 @@ nv40_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv40_timer_new, .volt = nv40_volt_new, @@ -508,7 +508,7 @@ nv41_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -534,7 +534,7 @@ nv42_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -560,7 +560,7 @@ nv43_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -586,7 +586,7 @@ nv44_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -612,7 +612,7 @@ nv45_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -638,7 +638,7 @@ nv46_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, - .pci = nv46_pci_new, + .pci = { 0x00000001, nv46_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -664,7 +664,7 @@ nv47_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -690,7 +690,7 @@ nv49_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -716,7 +716,7 @@ nv4a_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -742,7 +742,7 @@ nv4b_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, - .pci = nv40_pci_new, + .pci = { 0x00000001, nv40_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -768,7 +768,7 @@ nv4c_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, - .pci = nv4c_pci_new, + .pci = { 0x00000001, nv4c_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -794,7 +794,7 @@ nv4e_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, - .pci = nv4c_pci_new, + .pci = { 0x00000001, nv4c_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -823,7 +823,7 @@ nv50_chipset = { .mc = { 0x00000001, nv50_mc_new }, .mmu = { 0x00000001, nv50_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = nv46_pci_new, + .pci = { 0x00000001, nv46_pci_new }, .therm = nv50_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -849,7 +849,7 @@ nv63_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, - .pci = nv4c_pci_new, + .pci = { 0x00000001, nv4c_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -875,7 +875,7 @@ nv67_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, - .pci = nv4c_pci_new, + .pci = { 0x00000001, nv4c_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -901,7 +901,7 @@ nv68_chipset = { .imem = { 0x00000001, nv40_instmem_new }, .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, - .pci = nv4c_pci_new, + .pci = { 0x00000001, nv4c_pci_new }, .therm = nv40_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -930,7 +930,7 @@ nv84_chipset = { .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g84_pci_new, + .pci = { 0x00000001, g84_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -962,7 +962,7 @@ nv86_chipset = { .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g84_pci_new, + .pci = { 0x00000001, g84_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -994,7 +994,7 @@ nv92_chipset = { .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g92_pci_new, + .pci = { 0x00000001, g92_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1026,7 +1026,7 @@ nv94_chipset = { .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1058,7 +1058,7 @@ nv96_chipset = { .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1090,7 +1090,7 @@ nv98_chipset = { .mc = { 0x00000001, g98_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1122,7 +1122,7 @@ nva0_chipset = { .mc = { 0x00000001, g84_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1154,7 +1154,7 @@ nva3_chipset = { .mc = { 0x00000001, gt215_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .pmu = gt215_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1188,7 +1188,7 @@ nva5_chipset = { .mc = { 0x00000001, gt215_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .pmu = gt215_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1221,7 +1221,7 @@ nva8_chipset = { .mc = { 0x00000001, gt215_mc_new }, .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .pmu = gt215_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1254,7 +1254,7 @@ nvaa_chipset = { .mc = { 0x00000001, g98_mc_new }, .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1286,7 +1286,7 @@ nvac_chipset = { .mc = { 0x00000001, g98_mc_new }, .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .therm = g84_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1318,7 +1318,7 @@ nvaf_chipset = { .mc = { 0x00000001, gt215_mc_new }, .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = g94_pci_new, + .pci = { 0x00000001, g94_pci_new }, .pmu = gt215_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1354,7 +1354,7 @@ nvc0_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf100_pci_new, + .pci = { 0x00000001, gf100_pci_new }, .pmu = gf100_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1391,7 +1391,7 @@ nvc1_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf106_pci_new, + .pci = { 0x00000001, gf106_pci_new }, .pmu = gf100_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1427,7 +1427,7 @@ nvc3_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf106_pci_new, + .pci = { 0x00000001, gf106_pci_new }, .pmu = gf100_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1463,7 +1463,7 @@ nvc4_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf100_pci_new, + .pci = { 0x00000001, gf100_pci_new }, .pmu = gf100_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1500,7 +1500,7 @@ nvc8_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf100_pci_new, + .pci = { 0x00000001, gf100_pci_new }, .pmu = gf100_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1537,7 +1537,7 @@ nvce_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf100_pci_new, + .pci = { 0x00000001, gf100_pci_new }, .pmu = gf100_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1574,7 +1574,7 @@ nvcf_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf106_pci_new, + .pci = { 0x00000001, gf106_pci_new }, .pmu = gf100_pmu_new, .therm = gt215_therm_new, .timer = nv41_timer_new, @@ -1610,7 +1610,7 @@ nvd7_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf106_pci_new, + .pci = { 0x00000001, gf106_pci_new }, .therm = gf119_therm_new, .timer = nv41_timer_new, .volt = gf117_volt_new, @@ -1645,7 +1645,7 @@ nvd9_chipset = { .mc = { 0x00000001, gf100_mc_new }, .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gf106_pci_new, + .pci = { 0x00000001, gf106_pci_new }, .pmu = gf119_pmu_new, .therm = gf119_therm_new, .timer = nv41_timer_new, @@ -1681,7 +1681,7 @@ nve4_chipset = { .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gk104_pmu_new, .therm = gk104_therm_new, .timer = nv41_timer_new, @@ -1720,7 +1720,7 @@ nve6_chipset = { .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gk104_pmu_new, .therm = gk104_therm_new, .timer = nv41_timer_new, @@ -1759,7 +1759,7 @@ nve7_chipset = { .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gk104_pmu_new, .therm = gk104_therm_new, .timer = nv41_timer_new, @@ -1823,7 +1823,7 @@ nvf0_chipset = { .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gk110_pmu_new, .therm = gk104_therm_new, .timer = nv41_timer_new, @@ -1861,7 +1861,7 @@ nvf1_chipset = { .mc = { 0x00000001, gk104_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gk110_pmu_new, .therm = gk104_therm_new, .timer = nv41_timer_new, @@ -1899,7 +1899,7 @@ nv106_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gk208_pmu_new, .therm = gk104_therm_new, .timer = nv41_timer_new, @@ -1937,7 +1937,7 @@ nv108_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gk208_pmu_new, .therm = gk104_therm_new, .timer = nv41_timer_new, @@ -1975,7 +1975,7 @@ nv117_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gm107_pmu_new, .therm = gm107_therm_new, .timer = gk20a_timer_new, @@ -2011,7 +2011,7 @@ nv118_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gm107_pmu_new, .therm = gm107_therm_new, .timer = gk20a_timer_new, @@ -2045,7 +2045,7 @@ nv120_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm200_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gm200_pmu_new, .therm = gm200_therm_new, .timer = gk20a_timer_new, @@ -2083,7 +2083,7 @@ nv124_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm200_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gm200_pmu_new, .therm = gm200_therm_new, .timer = gk20a_timer_new, @@ -2121,7 +2121,7 @@ nv126_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm200_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, - .pci = gk104_pci_new, + .pci = { 0x00000001, gk104_pci_new }, .pmu = gm200_pmu_new, .therm = gm200_therm_new, .timer = gk20a_timer_new, @@ -2183,7 +2183,7 @@ nv130_chipset = { .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gm200_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2223,7 +2223,7 @@ nv132_chipset = { .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2261,7 +2261,7 @@ nv134_chipset = { .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2299,7 +2299,7 @@ nv136_chipset = { .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2336,7 +2336,7 @@ nv137_chipset = { .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2374,7 +2374,7 @@ nv138_chipset = { .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2434,7 +2434,7 @@ nv140_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gv100_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .therm = gp100_therm_new, .timer = gk20a_timer_new, @@ -2478,7 +2478,7 @@ nv162_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .therm = gp100_therm_new, .timer = gk20a_timer_new, @@ -2516,7 +2516,7 @@ nv164_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .therm = gp100_therm_new, .timer = gk20a_timer_new, @@ -2555,7 +2555,7 @@ nv166_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .therm = gp100_therm_new, .timer = gk20a_timer_new, @@ -2595,7 +2595,7 @@ nv167_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .therm = gp100_therm_new, .timer = gk20a_timer_new, @@ -2633,7 +2633,7 @@ nv168_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .pmu = gp102_pmu_new, .therm = gp100_therm_new, .timer = gk20a_timer_new, @@ -2665,7 +2665,7 @@ nv170_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .timer = gk20a_timer_new, }; @@ -2682,7 +2682,7 @@ nv172_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .timer = gk20a_timer_new, .disp = ga102_disp_new, .dma = gv100_dma_new, @@ -2701,7 +2701,7 @@ nv174_chipset = { .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, - .pci = gp100_pci_new, + .pci = { 0x00000001, gp100_pci_new }, .timer = gk20a_timer_new, .disp = ga102_disp_new, .dma = gv100_dma_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_PCI , pci); _(NVKM_SUBDEV_PMU , pmu); _(NVKM_SUBDEV_THERM , therm); _(NVKM_SUBDEV_TIMER , timer); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c index ee2431a7804e..a7d42ea8ba28 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c @@ -183,13 +183,13 @@ nvkm_pci_func = { int nvkm_pci_new_(const struct nvkm_pci_func *func, struct nvkm_device *device, - int index, struct nvkm_pci **ppci) + enum nvkm_subdev_type type, int inst, struct nvkm_pci **ppci) { struct nvkm_pci *pci; if (!(pci = *ppci = kzalloc(sizeof(**ppci), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_pci_func, device, index, &pci->subdev); + nvkm_subdev_ctor(&nvkm_pci_func, device, type, inst, &pci->subdev); pci->func = func; pci->pdev = device->func->pci(device)->pdev; pci->irq = -1; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c index 62438d892f42..5b29aacedef3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c @@ -150,7 +150,8 @@ g84_pci_func = { }; int -g84_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +g84_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&g84_pci_func, device, index, ppci); + return nvkm_pci_new_(&g84_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c index 48874359d5f6..a9e0674009c6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c @@ -51,7 +51,8 @@ g92_pci_func = { }; int -g92_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +g92_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&g92_pci_func, device, index, ppci); + return nvkm_pci_new_(&g92_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c index 09adb37a5664..7bacd0693283 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c @@ -43,7 +43,8 @@ g94_pci_func = { }; int -g94_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +g94_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&g94_pci_func, device, index, ppci); + return nvkm_pci_new_(&g94_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c index 00a5e7d3ee9d..099906092fe1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c @@ -96,7 +96,8 @@ gf100_pci_func = { }; int -gf100_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +gf100_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&gf100_pci_func, device, index, ppci); + return nvkm_pci_new_(&gf100_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c index 11bf419afe3f..bcde609ba866 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c @@ -43,7 +43,8 @@ gf106_pci_func = { }; int -gf106_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +gf106_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&gf106_pci_func, device, index, ppci); + return nvkm_pci_new_(&gf106_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c index e68030507d88..6be87ecffc89 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c @@ -222,7 +222,8 @@ gk104_pci_func = { }; int -gk104_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +gk104_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&gk104_pci_func, device, index, ppci); + return nvkm_pci_new_(&gk104_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c index 82c5234a06ff..a5fafda0014d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c @@ -38,7 +38,8 @@ gp100_pci_func = { }; int -gp100_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +gp100_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&gp100_pci_func, device, index, ppci); + return nvkm_pci_new_(&gp100_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.c index 5b1ed42cb90b..9ab64194b185 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.c @@ -52,7 +52,8 @@ nv04_pci_func = { }; int -nv04_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +nv04_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&nv04_pci_func, device, index, ppci); + return nvkm_pci_new_(&nv04_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.c index 6eb417765802..6a3c31cf0200 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.c @@ -59,7 +59,8 @@ nv40_pci_func = { }; int -nv40_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +nv40_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&nv40_pci_func, device, index, ppci); + return nvkm_pci_new_(&nv40_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.c index fc617e4c0ab6..9cad17f178ec 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.c @@ -45,7 +45,8 @@ nv46_pci_func = { }; int -nv46_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +nv46_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&nv46_pci_func, device, index, ppci); + return nvkm_pci_new_(&nv46_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c index 1f1b26b5fa72..741e34bf307c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c @@ -31,7 +31,8 @@ nv4c_pci_func = { }; int -nv4c_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) +nv4c_pci_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pci **ppci) { - return nvkm_pci_new_(&nv4c_pci_func, device, index, ppci); + return nvkm_pci_new_(&nv4c_pci_func, device, type, inst, ppci); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h index 7009aad86b6e..9b7583532962 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h @@ -4,8 +4,8 @@ #define nvkm_pci(p) container_of((p), struct nvkm_pci, subdev) #include -int nvkm_pci_new_(const struct nvkm_pci_func *, struct nvkm_device *, - int index, struct nvkm_pci **); +int nvkm_pci_new_(const struct nvkm_pci_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_pci **); struct nvkm_pci_func { void (*init)(struct nvkm_pci *); From e4b15b4ca08198b20eccf4f5f49e1dd9913eebd0 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:45:01 +1000 Subject: [PATCH 44/87] drm/nouveau/pmu: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/pmu.h | 24 +++--- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 79 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/pmu/base.c | 8 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gf119.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gm107.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gm200.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/pmu/priv.h | 8 +- 19 files changed, 96 insertions(+), 87 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index a240d2c6ad9a..dcbeac2304b9 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_pmu *pmu; struct nvkm_therm *therm; struct nvkm_timer *timer; struct nvkm_top *top; @@ -128,7 +127,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*pmu )(struct nvkm_device *, int idx, struct nvkm_pmu **); int (*therm )(struct nvkm_device *, int idx, struct nvkm_therm **); int (*timer )(struct nvkm_device *, int idx, struct nvkm_timer **); int (*top )(struct nvkm_device *, int idx, struct nvkm_top **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 895f6afa51b4..7363fa47460e 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -16,6 +16,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_MMU , struct nvkm_mmu , mmu) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_PMU , struct nvkm_pmu , pmu) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ICCSENSE, struct nvkm_iccsense, iccsense) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h index bc3327395ec9..f57a3a5a288d 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h @@ -40,18 +40,18 @@ int nvkm_pmu_send(struct nvkm_pmu *, u32 reply[2], u32 process, void nvkm_pmu_pgob(struct nvkm_pmu *, bool enable); bool nvkm_pmu_fan_controlled(struct nvkm_device *); -int gt215_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gf100_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gf119_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gk104_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gk110_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gk208_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gk20a_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gm107_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gm200_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gm20b_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gp102_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); -int gp10b_pmu_new(struct nvkm_device *, int, struct nvkm_pmu **); +int gt215_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gf100_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gf119_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gk104_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gk110_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gk208_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gk20a_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gm107_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gm200_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gm20b_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gp102_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); +int gp10b_pmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pmu **); /* interface to MEMX process running on PMU */ struct nvkm_memx; diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 0bf43df88eaa..30720aa37745 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_PMU ] = "pmu", [NVKM_SUBDEV_THERM ] = "therm", [NVKM_SUBDEV_TIMER ] = "tmr", [NVKM_SUBDEV_TOP ] = "top", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index a08e9300aee6..8651815e5ee4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1155,7 +1155,7 @@ nva3_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .pmu = gt215_pmu_new, + .pmu = { 0x00000001, gt215_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1189,7 +1189,7 @@ nva5_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .pmu = gt215_pmu_new, + .pmu = { 0x00000001, gt215_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1222,7 +1222,7 @@ nva8_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .pmu = gt215_pmu_new, + .pmu = { 0x00000001, gt215_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1319,7 +1319,7 @@ nvaf_chipset = { .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .pmu = gt215_pmu_new, + .pmu = { 0x00000001, gt215_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = nv40_volt_new, @@ -1355,7 +1355,7 @@ nvc0_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, - .pmu = gf100_pmu_new, + .pmu = { 0x00000001, gf100_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = gf100_volt_new, @@ -1392,7 +1392,7 @@ nvc1_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, - .pmu = gf100_pmu_new, + .pmu = { 0x00000001, gf100_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = gf100_volt_new, @@ -1428,7 +1428,7 @@ nvc3_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, - .pmu = gf100_pmu_new, + .pmu = { 0x00000001, gf100_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = gf100_volt_new, @@ -1464,7 +1464,7 @@ nvc4_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, - .pmu = gf100_pmu_new, + .pmu = { 0x00000001, gf100_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = gf100_volt_new, @@ -1501,7 +1501,7 @@ nvc8_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, - .pmu = gf100_pmu_new, + .pmu = { 0x00000001, gf100_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = gf100_volt_new, @@ -1538,7 +1538,7 @@ nvce_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, - .pmu = gf100_pmu_new, + .pmu = { 0x00000001, gf100_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = gf100_volt_new, @@ -1575,7 +1575,7 @@ nvcf_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, - .pmu = gf100_pmu_new, + .pmu = { 0x00000001, gf100_pmu_new }, .therm = gt215_therm_new, .timer = nv41_timer_new, .volt = gf100_volt_new, @@ -1646,7 +1646,7 @@ nvd9_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, - .pmu = gf119_pmu_new, + .pmu = { 0x00000001, gf119_pmu_new }, .therm = gf119_therm_new, .timer = nv41_timer_new, .volt = gf100_volt_new, @@ -1682,7 +1682,7 @@ nve4_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gk104_pmu_new, + .pmu = { 0x00000001, gk104_pmu_new }, .therm = gk104_therm_new, .timer = nv41_timer_new, .top = gk104_top_new, @@ -1721,7 +1721,7 @@ nve6_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gk104_pmu_new, + .pmu = { 0x00000001, gk104_pmu_new }, .therm = gk104_therm_new, .timer = nv41_timer_new, .top = gk104_top_new, @@ -1760,7 +1760,7 @@ nve7_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gk104_pmu_new, + .pmu = { 0x00000001, gk104_pmu_new }, .therm = gk104_therm_new, .timer = nv41_timer_new, .top = gk104_top_new, @@ -1792,7 +1792,7 @@ nvea_chipset = { .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk20a_mmu_new }, - .pmu = gk20a_pmu_new, + .pmu = { 0x00000001, gk20a_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .volt = gk20a_volt_new, @@ -1824,7 +1824,7 @@ nvf0_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gk110_pmu_new, + .pmu = { 0x00000001, gk110_pmu_new }, .therm = gk104_therm_new, .timer = nv41_timer_new, .top = gk104_top_new, @@ -1862,7 +1862,7 @@ nvf1_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gk110_pmu_new, + .pmu = { 0x00000001, gk110_pmu_new }, .therm = gk104_therm_new, .timer = nv41_timer_new, .top = gk104_top_new, @@ -1900,7 +1900,7 @@ nv106_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gk208_pmu_new, + .pmu = { 0x00000001, gk208_pmu_new }, .therm = gk104_therm_new, .timer = nv41_timer_new, .top = gk104_top_new, @@ -1938,7 +1938,7 @@ nv108_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gk208_pmu_new, + .pmu = { 0x00000001, gk208_pmu_new }, .therm = gk104_therm_new, .timer = nv41_timer_new, .top = gk104_top_new, @@ -1976,7 +1976,7 @@ nv117_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gm107_pmu_new, + .pmu = { 0x00000001, gm107_pmu_new }, .therm = gm107_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2012,7 +2012,7 @@ nv118_chipset = { .mmu = { 0x00000001, gk104_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gm107_pmu_new, + .pmu = { 0x00000001, gm107_pmu_new }, .therm = gm107_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2046,7 +2046,7 @@ nv120_chipset = { .mmu = { 0x00000001, gm200_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gm200_pmu_new, + .pmu = { 0x00000001, gm200_pmu_new }, .therm = gm200_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2084,7 +2084,7 @@ nv124_chipset = { .mmu = { 0x00000001, gm200_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gm200_pmu_new, + .pmu = { 0x00000001, gm200_pmu_new }, .therm = gm200_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2122,7 +2122,7 @@ nv126_chipset = { .mmu = { 0x00000001, gm200_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, - .pmu = gm200_pmu_new, + .pmu = { 0x00000001, gm200_pmu_new }, .therm = gm200_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2153,7 +2153,7 @@ nv12b_chipset = { .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm20b_mmu_new }, - .pmu = gm20b_pmu_new, + .pmu = { 0x00000001, gm20b_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[2] = gm200_ce_new, @@ -2184,7 +2184,7 @@ nv130_chipset = { .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gm200_pmu_new, + .pmu = { 0x00000001, gm200_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = gp100_ce_new, @@ -2224,7 +2224,7 @@ nv132_chipset = { .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = gp102_ce_new, @@ -2262,7 +2262,7 @@ nv134_chipset = { .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = gp102_ce_new, @@ -2300,7 +2300,7 @@ nv136_chipset = { .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = gp102_ce_new, @@ -2337,7 +2337,7 @@ nv137_chipset = { .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = gp102_ce_new, @@ -2375,7 +2375,7 @@ nv138_chipset = { .mmu = { 0x00000001, gp100_mmu_new }, .therm = gp100_therm_new, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = gp102_ce_new, @@ -2405,7 +2405,7 @@ nv13b_chipset = { .ltc = { 0x00000001, gp10b_ltc_new }, .mc = { 0x00000001, gp10b_mc_new }, .mmu = { 0x00000001, gp10b_mmu_new }, - .pmu = gp10b_pmu_new, + .pmu = { 0x00000001, gp10b_pmu_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = gp100_ce_new, @@ -2435,7 +2435,7 @@ nv140_chipset = { .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gv100_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .therm = gp100_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2479,7 +2479,7 @@ nv162_chipset = { .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .therm = gp100_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2517,7 +2517,7 @@ nv164_chipset = { .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .therm = gp100_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2556,7 +2556,7 @@ nv166_chipset = { .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .therm = gp100_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2596,7 +2596,7 @@ nv167_chipset = { .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .therm = gp100_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -2634,7 +2634,7 @@ nv168_chipset = { .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .pmu = gp102_pmu_new, + .pmu = { 0x00000001, gp102_pmu_new }, .therm = gp100_therm_new, .timer = gk20a_timer_new, .top = gk104_top_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_PMU , pmu); _(NVKM_SUBDEV_THERM , therm); _(NVKM_SUBDEV_TIMER , timer); _(NVKM_SUBDEV_TOP , top); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c index 63cecef7a113..24382875fb4f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c @@ -163,11 +163,11 @@ nvkm_pmu = { int nvkm_pmu_ctor(const struct nvkm_pmu_fwif *fwif, struct nvkm_device *device, - int index, struct nvkm_pmu *pmu) + enum nvkm_subdev_type type, int inst, struct nvkm_pmu *pmu) { int ret; - nvkm_subdev_ctor(&nvkm_pmu, device, index, &pmu->subdev); + nvkm_subdev_ctor(&nvkm_pmu, device, type, inst, &pmu->subdev); mutex_init(&pmu->send.mutex); @@ -197,10 +197,10 @@ nvkm_pmu_ctor(const struct nvkm_pmu_fwif *fwif, struct nvkm_device *device, int nvkm_pmu_new_(const struct nvkm_pmu_fwif *fwif, struct nvkm_device *device, - int index, struct nvkm_pmu **ppmu) + enum nvkm_subdev_type type, int inst, struct nvkm_pmu **ppmu) { struct nvkm_pmu *pmu; if (!(pmu = *ppmu = kzalloc(sizeof(*pmu), GFP_KERNEL))) return -ENOMEM; - return nvkm_pmu_ctor(fwif, device, index, *ppmu); + return nvkm_pmu_ctor(fwif, device, type, inst, *ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c index 589c375a677f..f725a3ec5479 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.c @@ -69,7 +69,8 @@ gf100_pmu_fwif[] = { }; int -gf100_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gf100_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gf100_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gf100_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf119.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf119.c index 8dd0271aaaee..0f4b6697a4e4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf119.c @@ -47,7 +47,8 @@ gf119_pmu_fwif[] = { }; int -gf119_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gf119_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gf119_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gf119_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk104.c index 8b70cc17a634..9e7631d7aa41 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk104.c @@ -127,7 +127,8 @@ gk104_pmu_fwif[] = { }; int -gk104_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gk104_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gk104_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gk104_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c index 0081f2141b10..dbaefee53e1f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c @@ -106,7 +106,8 @@ gk110_pmu_fwif[] = { }; int -gk110_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gk110_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gk110_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gk110_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c index b227c701a5e7..a08fb049e6d6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c @@ -48,7 +48,8 @@ gk208_pmu_fwif[] = { }; int -gk208_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gk208_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gk208_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gk208_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c index 26c1adf8f44c..a67a42e73f08 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c @@ -210,7 +210,8 @@ gk20a_pmu_fwif[] = { }; int -gk20a_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gk20a_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { struct gk20a_pmu *pmu; int ret; @@ -219,7 +220,7 @@ gk20a_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) return -ENOMEM; *ppmu = &pmu->base; - ret = nvkm_pmu_ctor(gk20a_pmu_fwif, device, index, &pmu->base); + ret = nvkm_pmu_ctor(gk20a_pmu_fwif, device, type, inst, &pmu->base); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.c index 5afb55e58b51..622ee637f97b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.c @@ -49,7 +49,8 @@ gm107_pmu_fwif[] = { }; int -gm107_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gm107_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gm107_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gm107_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.c index 383376addb41..5968c7696596 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.c @@ -45,7 +45,8 @@ gm200_pmu_fwif[] = { }; int -gm200_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gm200_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gm200_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gm200_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c index 8f6ed5373ea1..148706977eec 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c @@ -240,7 +240,8 @@ gm20b_pmu_fwif[] = { }; int -gm20b_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gm20b_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gm20b_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gm20b_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c index 3d8ce14dba7b..00da1b873ce8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.c @@ -51,7 +51,8 @@ gp102_pmu_fwif[] = { }; int -gp102_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gp102_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gp102_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gp102_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c index 9c237c426599..461f722656e2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.c @@ -99,7 +99,8 @@ gp10b_pmu_fwif[] = { }; int -gp10b_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gp10b_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gp10b_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gp10b_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c index a5761415900b..b0407b86bc10 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.c @@ -282,7 +282,8 @@ gt215_pmu_fwif[] = { }; int -gt215_pmu_new(struct nvkm_device *device, int index, struct nvkm_pmu **ppmu) +gt215_pmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_pmu **ppmu) { - return nvkm_pmu_new_(gt215_pmu_fwif, device, index, ppmu); + return nvkm_pmu_new_(gt215_pmu_fwif, device, type, inst, ppmu); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h index 276b6d778e53..e7860d177353 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h @@ -62,8 +62,8 @@ int gf100_pmu_nofw(struct nvkm_pmu *, int, const struct nvkm_pmu_fwif *); int gm200_pmu_nofw(struct nvkm_pmu *, int, const struct nvkm_pmu_fwif *); int gm20b_pmu_load(struct nvkm_pmu *, int, const struct nvkm_pmu_fwif *); -int nvkm_pmu_ctor(const struct nvkm_pmu_fwif *, struct nvkm_device *, - int index, struct nvkm_pmu *); -int nvkm_pmu_new_(const struct nvkm_pmu_fwif *, struct nvkm_device *, - int index, struct nvkm_pmu **); +int nvkm_pmu_ctor(const struct nvkm_pmu_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_pmu *); +int nvkm_pmu_new_(const struct nvkm_pmu_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_pmu **); #endif From 0aec69c76ec9e20bdefcd6a8eca4277372abef13 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:49:36 +1000 Subject: [PATCH 45/87] drm/nouveau/therm: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/therm.h | 18 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 127 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/therm/base.c | 10 +- .../gpu/drm/nouveau/nvkm/subdev/therm/g84.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/therm/gf119.c | 6 +- .../gpu/drm/nouveau/nvkm/subdev/therm/gk104.c | 13 +- .../gpu/drm/nouveau/nvkm/subdev/therm/gm107.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/therm/gm200.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/therm/gp100.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/therm/gt215.c | 6 +- .../gpu/drm/nouveau/nvkm/subdev/therm/nv40.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/therm/nv50.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/therm/priv.h | 8 +- 16 files changed, 106 insertions(+), 111 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index dcbeac2304b9..8141095c7d55 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_therm *therm; struct nvkm_timer *timer; struct nvkm_top *top; struct nvkm_volt *volt; @@ -127,7 +126,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*therm )(struct nvkm_device *, int idx, struct nvkm_therm **); int (*timer )(struct nvkm_device *, int idx, struct nvkm_timer **); int (*top )(struct nvkm_device *, int idx, struct nvkm_top **); int (*volt )(struct nvkm_device *, int idx, struct nvkm_volt **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 7363fa47460e..9f72dd124796 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -18,5 +18,6 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_PMU , struct nvkm_pmu , pmu) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ICCSENSE, struct nvkm_iccsense, iccsense) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_THERM , struct nvkm_therm , therm) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/therm.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/therm.h index 62c34f98c930..bd04f49272a6 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/therm.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/therm.h @@ -107,13 +107,13 @@ void nvkm_therm_clkgate_init(struct nvkm_therm *, void nvkm_therm_clkgate_enable(struct nvkm_therm *); void nvkm_therm_clkgate_fini(struct nvkm_therm *, bool); -int nv40_therm_new(struct nvkm_device *, int, struct nvkm_therm **); -int nv50_therm_new(struct nvkm_device *, int, struct nvkm_therm **); -int g84_therm_new(struct nvkm_device *, int, struct nvkm_therm **); -int gt215_therm_new(struct nvkm_device *, int, struct nvkm_therm **); -int gf119_therm_new(struct nvkm_device *, int, struct nvkm_therm **); -int gk104_therm_new(struct nvkm_device *, int, struct nvkm_therm **); -int gm107_therm_new(struct nvkm_device *, int, struct nvkm_therm **); -int gm200_therm_new(struct nvkm_device *, int, struct nvkm_therm **); -int gp100_therm_new(struct nvkm_device *, int, struct nvkm_therm **); +int nv40_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); +int nv50_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); +int g84_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); +int gt215_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); +int gf119_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); +int gk104_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); +int gm107_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); +int gm200_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); +int gp100_therm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_therm **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 30720aa37745..bbc48a845ed4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_THERM ] = "therm", [NVKM_SUBDEV_TIMER ] = "tmr", [NVKM_SUBDEV_TOP ] = "top", [NVKM_SUBDEV_VOLT ] = "volt", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 8651815e5ee4..b87552dad1a6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -483,7 +483,7 @@ nv40_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv40_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -509,7 +509,7 @@ nv41_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -535,7 +535,7 @@ nv42_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -561,7 +561,7 @@ nv43_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -587,7 +587,7 @@ nv44_chipset = { .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -613,7 +613,7 @@ nv45_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -639,7 +639,7 @@ nv46_chipset = { .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv46_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -665,7 +665,7 @@ nv47_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -691,7 +691,7 @@ nv49_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -717,7 +717,7 @@ nv4a_chipset = { .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -743,7 +743,7 @@ nv4b_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -769,7 +769,7 @@ nv4c_chipset = { .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -795,7 +795,7 @@ nv4e_chipset = { .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -824,7 +824,7 @@ nv50_chipset = { .mmu = { 0x00000001, nv50_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, nv46_pci_new }, - .therm = nv50_therm_new, + .therm = { 0x00000001, nv50_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv50_disp_new, @@ -850,7 +850,7 @@ nv63_chipset = { .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -876,7 +876,7 @@ nv67_chipset = { .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -902,7 +902,7 @@ nv68_chipset = { .mc = { 0x00000001, nv44_mc_new }, .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, - .therm = nv40_therm_new, + .therm = { 0x00000001, nv40_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = nv04_disp_new, @@ -931,7 +931,7 @@ nv84_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g84_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .bsp = g84_bsp_new, @@ -963,7 +963,7 @@ nv86_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g84_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .bsp = g84_bsp_new, @@ -995,7 +995,7 @@ nv92_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g92_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .bsp = g84_bsp_new, @@ -1027,7 +1027,7 @@ nv94_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .bsp = g84_bsp_new, @@ -1059,7 +1059,7 @@ nv96_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .bsp = g84_bsp_new, @@ -1091,7 +1091,7 @@ nv98_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = g94_disp_new, @@ -1123,7 +1123,7 @@ nva0_chipset = { .mmu = { 0x00000001, g84_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .bsp = g84_bsp_new, @@ -1156,7 +1156,7 @@ nva3_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .pmu = { 0x00000001, gt215_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .ce[0] = gt215_ce_new, @@ -1190,7 +1190,7 @@ nva5_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .pmu = { 0x00000001, gt215_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .ce[0] = gt215_ce_new, @@ -1223,7 +1223,7 @@ nva8_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .pmu = { 0x00000001, gt215_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .ce[0] = gt215_ce_new, @@ -1255,7 +1255,7 @@ nvaa_chipset = { .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = mcp77_disp_new, @@ -1287,7 +1287,7 @@ nvac_chipset = { .mmu = { 0x00000001, mcp77_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, - .therm = g84_therm_new, + .therm = { 0x00000001, g84_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .disp = mcp77_disp_new, @@ -1320,7 +1320,7 @@ nvaf_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .pmu = { 0x00000001, gt215_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = nv40_volt_new, .ce[0] = gt215_ce_new, @@ -1356,7 +1356,7 @@ nvc0_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, @@ -1393,7 +1393,7 @@ nvc1_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, @@ -1429,7 +1429,7 @@ nvc3_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, @@ -1465,7 +1465,7 @@ nvc4_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, @@ -1502,7 +1502,7 @@ nvc8_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, @@ -1539,7 +1539,7 @@ nvce_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, @@ -1576,7 +1576,7 @@ nvcf_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, - .therm = gt215_therm_new, + .therm = { 0x00000001, gt215_therm_new }, .timer = nv41_timer_new, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, @@ -1611,7 +1611,7 @@ nvd7_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, - .therm = gf119_therm_new, + .therm = { 0x00000001, gf119_therm_new }, .timer = nv41_timer_new, .volt = gf117_volt_new, .ce[0] = gf100_ce_new, @@ -1647,7 +1647,7 @@ nvd9_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf119_pmu_new }, - .therm = gf119_therm_new, + .therm = { 0x00000001, gf119_therm_new }, .timer = nv41_timer_new, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, @@ -1683,7 +1683,7 @@ nve4_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, - .therm = gk104_therm_new, + .therm = { 0x00000001, gk104_therm_new }, .timer = nv41_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -1722,7 +1722,7 @@ nve6_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, - .therm = gk104_therm_new, + .therm = { 0x00000001, gk104_therm_new }, .timer = nv41_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -1761,7 +1761,7 @@ nve7_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, - .therm = gk104_therm_new, + .therm = { 0x00000001, gk104_therm_new }, .timer = nv41_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -1825,7 +1825,7 @@ nvf0_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk110_pmu_new }, - .therm = gk104_therm_new, + .therm = { 0x00000001, gk104_therm_new }, .timer = nv41_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -1863,7 +1863,7 @@ nvf1_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk110_pmu_new }, - .therm = gk104_therm_new, + .therm = { 0x00000001, gk104_therm_new }, .timer = nv41_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -1901,7 +1901,7 @@ nv106_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk208_pmu_new }, - .therm = gk104_therm_new, + .therm = { 0x00000001, gk104_therm_new }, .timer = nv41_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -1939,7 +1939,7 @@ nv108_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk208_pmu_new }, - .therm = gk104_therm_new, + .therm = { 0x00000001, gk104_therm_new }, .timer = nv41_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -1977,7 +1977,7 @@ nv117_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm107_pmu_new }, - .therm = gm107_therm_new, + .therm = { 0x00000001, gm107_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -2013,7 +2013,7 @@ nv118_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm107_pmu_new }, - .therm = gm107_therm_new, + .therm = { 0x00000001, gm107_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -2047,7 +2047,7 @@ nv120_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, - .therm = gm200_therm_new, + .therm = { 0x00000001, gm200_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -2085,7 +2085,7 @@ nv124_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, - .therm = gm200_therm_new, + .therm = { 0x00000001, gm200_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -2123,7 +2123,7 @@ nv126_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, - .therm = gm200_therm_new, + .therm = { 0x00000001, gm200_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .volt = gk104_volt_new, @@ -2182,7 +2182,7 @@ nv130_chipset = { .ltc = { 0x00000001, gp100_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, .timer = gk20a_timer_new, @@ -2222,7 +2222,7 @@ nv132_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, @@ -2260,7 +2260,7 @@ nv134_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, @@ -2298,7 +2298,7 @@ nv136_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, @@ -2335,7 +2335,7 @@ nv137_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, @@ -2373,7 +2373,7 @@ nv138_chipset = { .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gp100_mmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = gk20a_timer_new, @@ -2436,7 +2436,7 @@ nv140_chipset = { .mmu = { 0x00000001, gv100_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .disp = gv100_disp_new, @@ -2480,7 +2480,7 @@ nv162_chipset = { .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = tu102_ce_new, @@ -2518,7 +2518,7 @@ nv164_chipset = { .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = tu102_ce_new, @@ -2557,7 +2557,7 @@ nv166_chipset = { .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = tu102_ce_new, @@ -2597,7 +2597,7 @@ nv167_chipset = { .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = tu102_ce_new, @@ -2635,7 +2635,7 @@ nv168_chipset = { .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .therm = gp100_therm_new, + .therm = { 0x00000001, gp100_therm_new }, .timer = gk20a_timer_new, .top = gk104_top_new, .ce[0] = tu102_ce_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_THERM , therm); _(NVKM_SUBDEV_TIMER , timer); _(NVKM_SUBDEV_TOP , top); _(NVKM_SUBDEV_VOLT , volt); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c index 4a4d1e224126..fc5ee118e910 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.c @@ -421,10 +421,10 @@ nvkm_therm = { }; void -nvkm_therm_ctor(struct nvkm_therm *therm, struct nvkm_device *device, - int index, const struct nvkm_therm_func *func) +nvkm_therm_ctor(struct nvkm_therm *therm, struct nvkm_device *device, enum nvkm_subdev_type type, + int inst, const struct nvkm_therm_func *func) { - nvkm_subdev_ctor(&nvkm_therm, device, index, &therm->subdev); + nvkm_subdev_ctor(&nvkm_therm, device, type, inst, &therm->subdev); therm->func = func; nvkm_alarm_init(&therm->alarm, nvkm_therm_alarm); @@ -443,13 +443,13 @@ nvkm_therm_ctor(struct nvkm_therm *therm, struct nvkm_device *device, int nvkm_therm_new_(const struct nvkm_therm_func *func, struct nvkm_device *device, - int index, struct nvkm_therm **ptherm) + enum nvkm_subdev_type type, int inst, struct nvkm_therm **ptherm) { struct nvkm_therm *therm; if (!(therm = *ptherm = kzalloc(sizeof(*therm), GFP_KERNEL))) return -ENOMEM; - nvkm_therm_ctor(therm, device, index, func); + nvkm_therm_ctor(therm, device, type, inst, func); return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.c index 96f8da40ac82..4af86f2d3e7e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.c @@ -223,12 +223,13 @@ g84_therm = { }; int -g84_therm_new(struct nvkm_device *device, int index, struct nvkm_therm **ptherm) +g84_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_therm **ptherm) { struct nvkm_therm *therm; int ret; - ret = nvkm_therm_new_(&g84_therm, device, index, &therm); + ret = nvkm_therm_new_(&g84_therm, device, type, inst, &therm); *ptherm = therm; if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.c index 0981b02790e2..2b031d4eaeb6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.c @@ -146,8 +146,8 @@ gf119_therm = { }; int -gf119_therm_new(struct nvkm_device *device, int index, - struct nvkm_therm **ptherm) +gf119_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_therm **ptherm) { - return nvkm_therm_new_(&gf119_therm, device, index, ptherm); + return nvkm_therm_new_(&gf119_therm, device, type, inst, ptherm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c index f6f7db2a3db7..a3a1e3593da0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c @@ -106,9 +106,8 @@ gk104_therm_func = { }; static int -gk104_therm_new_(const struct nvkm_therm_func *func, - struct nvkm_device *device, - int index, +gk104_therm_new_(const struct nvkm_therm_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, const struct gk104_clkgate_engine_info *clkgate_order, const struct gf100_idle_filter *idle_filter, struct nvkm_therm **ptherm) @@ -118,19 +117,17 @@ gk104_therm_new_(const struct nvkm_therm_func *func, if (!therm) return -ENOMEM; - nvkm_therm_ctor(&therm->base, device, index, func); + nvkm_therm_ctor(&therm->base, device, type, inst, func); *ptherm = &therm->base; therm->clkgate_order = clkgate_order; therm->idle_filter = idle_filter; - return 0; } int -gk104_therm_new(struct nvkm_device *device, - int index, struct nvkm_therm **ptherm) +gk104_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_therm **ptherm) { - return gk104_therm_new_(&gk104_therm_func, device, index, + return gk104_therm_new_(&gk104_therm_func, device, type, inst, gk104_clkgate_engine_info, &gk104_idle_filter, ptherm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.c index 86848ece4d89..c845fd392f58 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.c @@ -68,8 +68,8 @@ gm107_therm = { }; int -gm107_therm_new(struct nvkm_device *device, int index, +gm107_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_therm **ptherm) { - return nvkm_therm_new_(&gm107_therm, device, index, ptherm); + return nvkm_therm_new_(&gm107_therm, device, type, inst, ptherm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.c index 73dc78093d5d..e0cdd12463ec 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.c @@ -32,8 +32,8 @@ gm200_therm = { }; int -gm200_therm_new(struct nvkm_device *device, int index, +gm200_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_therm **ptherm) { - return nvkm_therm_new_(&gm200_therm, device, index, ptherm); + return nvkm_therm_new_(&gm200_therm, device, type, inst, ptherm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.c index 9f0dea3f61dc..44f021392b95 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.c @@ -49,8 +49,8 @@ gp100_therm = { }; int -gp100_therm_new(struct nvkm_device *device, int index, +gp100_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_therm **ptherm) { - return nvkm_therm_new_(&gp100_therm, device, index, ptherm); + return nvkm_therm_new_(&gp100_therm, device, type, inst, ptherm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.c index c08097f2aff5..9e451bd9395c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.c @@ -68,8 +68,8 @@ gt215_therm = { }; int -gt215_therm_new(struct nvkm_device *device, int index, - struct nvkm_therm **ptherm) +gt215_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_therm **ptherm) { - return nvkm_therm_new_(>215_therm, device, index, ptherm); + return nvkm_therm_new_(>215_therm, device, type, inst, ptherm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.c index 2c92ffb5f9d0..c13fee9734df 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.c @@ -197,8 +197,8 @@ nv40_therm = { }; int -nv40_therm_new(struct nvkm_device *device, int index, +nv40_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_therm **ptherm) { - return nvkm_therm_new_(&nv40_therm, device, index, ptherm); + return nvkm_therm_new_(&nv40_therm, device, type, inst, ptherm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.c index 9b57b433d4cf..9cf16a75a3cd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.c @@ -169,8 +169,8 @@ nv50_therm = { }; int -nv50_therm_new(struct nvkm_device *device, int index, +nv50_therm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_therm **ptherm) { - return nvkm_therm_new_(&nv50_therm, device, index, ptherm); + return nvkm_therm_new_(&nv50_therm, device, type, inst, ptherm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/priv.h index 21659daf1864..54e960589411 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/priv.h @@ -30,10 +30,10 @@ #include #include -int nvkm_therm_new_(const struct nvkm_therm_func *, struct nvkm_device *, - int index, struct nvkm_therm **); -void nvkm_therm_ctor(struct nvkm_therm *therm, struct nvkm_device *device, - int index, const struct nvkm_therm_func *func); +int nvkm_therm_new_(const struct nvkm_therm_func *, struct nvkm_device *, enum nvkm_subdev_type, + int, struct nvkm_therm **); +void nvkm_therm_ctor(struct nvkm_therm *, struct nvkm_device *, enum nvkm_subdev_type, int, + const struct nvkm_therm_func *); struct nvkm_fan { struct nvkm_therm *parent; From 93834cb92d5ef1ac0f99e87160a4c6e9fc65b913 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 14:26:38 +1000 Subject: [PATCH 46/87] drm/nouveau/therm/gk104: use split subdev type+inst in cg engine lists Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/nvkm/subdev/therm/gk104.c | 30 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/therm/gk104.h | 3 +- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c index a3a1e3593da0..45e295c271fb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.c @@ -35,8 +35,8 @@ gk104_clkgate_enable(struct nvkm_therm *base) int i; /* Program ENG_MANT, ENG_FILTER */ - for (i = 0; order[i].engine != NVKM_SUBDEV_NR; i++) { - if (!nvkm_device_subdev(dev, order[i].engine, 0)) + for (i = 0; order[i].type != NVKM_SUBDEV_NR; i++) { + if (!nvkm_device_subdev(dev, order[i].type, order[i].inst)) continue; nvkm_mask(dev, 0x20200 + order[i].offset, 0xff00, 0x4500); @@ -47,8 +47,8 @@ gk104_clkgate_enable(struct nvkm_therm *base) nvkm_wr32(dev, 0x02028c, therm->idle_filter->hubmmu); /* Enable clockgating (ENG_CLK = RUN->AUTO) */ - for (i = 0; order[i].engine != NVKM_SUBDEV_NR; i++) { - if (!nvkm_device_subdev(dev, order[i].engine, 0)) + for (i = 0; order[i].type != NVKM_SUBDEV_NR; i++) { + if (!nvkm_device_subdev(dev, order[i].type, order[i].inst)) continue; nvkm_mask(dev, 0x20200 + order[i].offset, 0x00ff, 0x0045); @@ -64,8 +64,8 @@ gk104_clkgate_fini(struct nvkm_therm *base, bool suspend) int i; /* ENG_CLK = AUTO->RUN, ENG_PWR = RUN->AUTO */ - for (i = 0; order[i].engine != NVKM_SUBDEV_NR; i++) { - if (!nvkm_device_subdev(dev, order[i].engine, 0)) + for (i = 0; order[i].type != NVKM_SUBDEV_NR; i++) { + if (!nvkm_device_subdev(dev, order[i].type, order[i].inst)) continue; nvkm_mask(dev, 0x20200 + order[i].offset, 0xff, 0x54); @@ -73,15 +73,15 @@ gk104_clkgate_fini(struct nvkm_therm *base, bool suspend) } const struct gk104_clkgate_engine_info gk104_clkgate_engine_info[] = { - { NVKM_ENGINE_GR, 0x00 }, - { NVKM_ENGINE_MSPDEC, 0x04 }, - { NVKM_ENGINE_MSPPP, 0x08 }, - { NVKM_ENGINE_MSVLD, 0x0c }, - { NVKM_ENGINE_CE0, 0x10 }, - { NVKM_ENGINE_CE1, 0x14 }, - { NVKM_ENGINE_MSENC, 0x18 }, - { NVKM_ENGINE_CE2, 0x1c }, - { NVKM_SUBDEV_NR, 0 }, + { NVKM_ENGINE_GR, 0, 0x00 }, + { NVKM_ENGINE_MSPDEC, 0, 0x04 }, + { NVKM_ENGINE_MSPPP, 0, 0x08 }, + { NVKM_ENGINE_MSVLD, 0, 0x0c }, + { NVKM_ENGINE_CE, 0, 0x10 }, + { NVKM_ENGINE_CE, 1, 0x14 }, + { NVKM_ENGINE_MSENC, 0, 0x18 }, + { NVKM_ENGINE_CE, 2, 0x1c }, + { NVKM_SUBDEV_NR }, }; const struct gf100_idle_filter gk104_idle_filter = { diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.h b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.h index 293e7743b19b..9a8641421038 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.h @@ -31,7 +31,8 @@ #include "gf100.h" struct gk104_clkgate_engine_info { - enum nvkm_devidx engine; + enum nvkm_subdev_type type; + int inst; u8 offset; }; From 9aad54d5c7ae9c0b24ba28d367f5b3b00e751cc5 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:51:53 +1000 Subject: [PATCH 47/87] drm/nouveau/tmr: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/timer.h | 8 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 175 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/timer/base.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/timer/gk20a.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/timer/nv04.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/timer/nv40.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/timer/nv41.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/timer/priv.h | 4 +- 11 files changed, 108 insertions(+), 107 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 8141095c7d55..f0b9de0f289f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_timer *timer; struct nvkm_top *top; struct nvkm_volt *volt; @@ -126,7 +125,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*timer )(struct nvkm_device *, int idx, struct nvkm_timer **); int (*top )(struct nvkm_device *, int idx, struct nvkm_top **); int (*volt )(struct nvkm_device *, int idx, struct nvkm_volt **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 9f72dd124796..248376cb552c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -9,6 +9,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_MXM , struct nvkm_subdev , mxm) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_MC , struct nvkm_mc , mc) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_TIMER , struct nvkm_timer , timer) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_INSTMEM , struct nvkm_instmem , imem) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_LTC , struct nvkm_ltc , ltc) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h index d06dcbe1faa6..439a3f72b0d7 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/timer.h @@ -76,8 +76,8 @@ s64 nvkm_timer_wait_test(struct nvkm_timer_wait *); #define nvkm_wait_msec(d,m,addr,mask,data) \ nvkm_wait_usec((d), (m) * 1000, (addr), (mask), (data)) -int nv04_timer_new(struct nvkm_device *, int, struct nvkm_timer **); -int nv40_timer_new(struct nvkm_device *, int, struct nvkm_timer **); -int nv41_timer_new(struct nvkm_device *, int, struct nvkm_timer **); -int gk20a_timer_new(struct nvkm_device *, int, struct nvkm_timer **); +int nv04_timer_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_timer **); +int nv40_timer_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_timer **); +int nv41_timer_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_timer **); +int gk20a_timer_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_timer **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index bbc48a845ed4..723d1773108d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_TIMER ] = "tmr", [NVKM_SUBDEV_TOP ] = "top", [NVKM_SUBDEV_VOLT ] = "volt", [NVKM_ENGINE_BSP ] = "bsp", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index b87552dad1a6..1b112c424f4e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -87,7 +87,7 @@ nv4_chipset = { .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv04_fifo_new, @@ -108,7 +108,7 @@ nv5_chipset = { .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv04_fifo_new, @@ -130,7 +130,7 @@ nv10_chipset = { .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .gr = nv10_gr_new, @@ -150,7 +150,7 @@ nv11_chipset = { .mc = { 0x00000001, nv11_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv10_fifo_new, @@ -172,7 +172,7 @@ nv15_chipset = { .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv10_fifo_new, @@ -194,7 +194,7 @@ nv17_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -216,7 +216,7 @@ nv18_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -238,7 +238,7 @@ nv1a_chipset = { .mc = { 0x00000001, nv04_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv10_fifo_new, @@ -260,7 +260,7 @@ nv1f_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -282,7 +282,7 @@ nv20_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -304,7 +304,7 @@ nv25_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -326,7 +326,7 @@ nv28_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -348,7 +348,7 @@ nv2a_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -370,7 +370,7 @@ nv30_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -392,7 +392,7 @@ nv31_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -415,7 +415,7 @@ nv34_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -438,7 +438,7 @@ nv35_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -460,7 +460,7 @@ nv36_chipset = { .mc = { 0x00000001, nv17_mc_new }, .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, - .timer = nv04_timer_new, + .timer = { 0x00000001, nv04_timer_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv17_fifo_new, @@ -484,7 +484,7 @@ nv40_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv40_timer_new, + .timer = { 0x00000001, nv40_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -510,7 +510,7 @@ nv41_chipset = { .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -536,7 +536,7 @@ nv42_chipset = { .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -562,7 +562,7 @@ nv43_chipset = { .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -588,7 +588,7 @@ nv44_chipset = { .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -614,7 +614,7 @@ nv45_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -640,7 +640,7 @@ nv46_chipset = { .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv46_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -666,7 +666,7 @@ nv47_chipset = { .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -692,7 +692,7 @@ nv49_chipset = { .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -718,7 +718,7 @@ nv4a_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -744,7 +744,7 @@ nv4b_chipset = { .mmu = { 0x00000001, nv41_mmu_new }, .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -770,7 +770,7 @@ nv4c_chipset = { .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -796,7 +796,7 @@ nv4e_chipset = { .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -825,7 +825,7 @@ nv50_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, nv46_pci_new }, .therm = { 0x00000001, nv50_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv50_disp_new, .dma = nv50_dma_new, @@ -851,7 +851,7 @@ nv63_chipset = { .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -877,7 +877,7 @@ nv67_chipset = { .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -903,7 +903,7 @@ nv68_chipset = { .mmu = { 0x00000001, nv44_mmu_new }, .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = nv04_disp_new, .dma = nv04_dma_new, @@ -932,7 +932,7 @@ nv84_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g84_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .bsp = g84_bsp_new, .cipher = g84_cipher_new, @@ -964,7 +964,7 @@ nv86_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g84_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .bsp = g84_bsp_new, .cipher = g84_cipher_new, @@ -996,7 +996,7 @@ nv92_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g92_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .bsp = g84_bsp_new, .cipher = g84_cipher_new, @@ -1028,7 +1028,7 @@ nv94_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .bsp = g84_bsp_new, .cipher = g84_cipher_new, @@ -1060,7 +1060,7 @@ nv96_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .bsp = g84_bsp_new, .cipher = g84_cipher_new, @@ -1092,7 +1092,7 @@ nv98_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = g94_disp_new, .dma = nv50_dma_new, @@ -1124,7 +1124,7 @@ nva0_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .bsp = g84_bsp_new, .cipher = g84_cipher_new, @@ -1157,7 +1157,7 @@ nva3_chipset = { .pci = { 0x00000001, g94_pci_new }, .pmu = { 0x00000001, gt215_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .ce[0] = gt215_ce_new, .disp = gt215_disp_new, @@ -1191,7 +1191,7 @@ nva5_chipset = { .pci = { 0x00000001, g94_pci_new }, .pmu = { 0x00000001, gt215_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .ce[0] = gt215_ce_new, .disp = gt215_disp_new, @@ -1224,7 +1224,7 @@ nva8_chipset = { .pci = { 0x00000001, g94_pci_new }, .pmu = { 0x00000001, gt215_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .ce[0] = gt215_ce_new, .disp = gt215_disp_new, @@ -1256,7 +1256,7 @@ nvaa_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = mcp77_disp_new, .dma = nv50_dma_new, @@ -1288,7 +1288,7 @@ nvac_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .disp = mcp77_disp_new, .dma = nv50_dma_new, @@ -1321,7 +1321,7 @@ nvaf_chipset = { .pci = { 0x00000001, g94_pci_new }, .pmu = { 0x00000001, gt215_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = nv40_volt_new, .ce[0] = gt215_ce_new, .disp = mcp89_disp_new, @@ -1357,7 +1357,7 @@ nvc0_chipset = { .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, .ce[1] = gf100_ce_new, @@ -1394,7 +1394,7 @@ nvc1_chipset = { .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, .disp = gt215_disp_new, @@ -1430,7 +1430,7 @@ nvc3_chipset = { .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, .disp = gt215_disp_new, @@ -1466,7 +1466,7 @@ nvc4_chipset = { .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, .ce[1] = gf100_ce_new, @@ -1503,7 +1503,7 @@ nvc8_chipset = { .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, .ce[1] = gf100_ce_new, @@ -1540,7 +1540,7 @@ nvce_chipset = { .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, .ce[1] = gf100_ce_new, @@ -1577,7 +1577,7 @@ nvcf_chipset = { .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, .disp = gt215_disp_new, @@ -1612,7 +1612,7 @@ nvd7_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .therm = { 0x00000001, gf119_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf117_volt_new, .ce[0] = gf100_ce_new, .disp = gf119_disp_new, @@ -1648,7 +1648,7 @@ nvd9_chipset = { .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf119_pmu_new }, .therm = { 0x00000001, gf119_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .volt = gf100_volt_new, .ce[0] = gf100_ce_new, .disp = gf119_disp_new, @@ -1684,7 +1684,7 @@ nve4_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, @@ -1723,7 +1723,7 @@ nve6_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, @@ -1762,7 +1762,7 @@ nve7_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, @@ -1793,7 +1793,7 @@ nvea_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk20a_mmu_new }, .pmu = { 0x00000001, gk20a_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .volt = gk20a_volt_new, .ce[2] = gk104_ce_new, @@ -1826,7 +1826,7 @@ nvf0_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk110_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, @@ -1864,7 +1864,7 @@ nvf1_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk110_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, @@ -1902,7 +1902,7 @@ nv106_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk208_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, @@ -1940,7 +1940,7 @@ nv108_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk208_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, - .timer = nv41_timer_new, + .timer = { 0x00000001, nv41_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, @@ -1978,7 +1978,7 @@ nv117_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm107_pmu_new }, .therm = { 0x00000001, gm107_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gm107_ce_new, @@ -2014,7 +2014,7 @@ nv118_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm107_pmu_new }, .therm = { 0x00000001, gm107_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gm107_ce_new, @@ -2048,7 +2048,7 @@ nv120_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, .therm = { 0x00000001, gm200_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gm200_ce_new, @@ -2086,7 +2086,7 @@ nv124_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, .therm = { 0x00000001, gm200_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gm200_ce_new, @@ -2124,7 +2124,7 @@ nv126_chipset = { .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, .therm = { 0x00000001, gm200_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .volt = gk104_volt_new, .ce[0] = gm200_ce_new, @@ -2154,7 +2154,7 @@ nv12b_chipset = { .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm20b_mmu_new }, .pmu = { 0x00000001, gm20b_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[2] = gm200_ce_new, .volt = gm20b_volt_new, @@ -2185,7 +2185,7 @@ nv130_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = gp100_ce_new, .ce[1] = gp100_ce_new, @@ -2225,7 +2225,7 @@ nv132_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, @@ -2263,7 +2263,7 @@ nv134_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, @@ -2301,7 +2301,7 @@ nv136_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, @@ -2338,7 +2338,7 @@ nv137_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, @@ -2376,7 +2376,7 @@ nv138_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, @@ -2406,7 +2406,7 @@ nv13b_chipset = { .mc = { 0x00000001, gp10b_mc_new }, .mmu = { 0x00000001, gp10b_mmu_new }, .pmu = { 0x00000001, gp10b_pmu_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = gp100_ce_new, .dma = gf119_dma_new, @@ -2437,7 +2437,7 @@ nv140_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .disp = gv100_disp_new, .ce[0] = gv100_ce_new, @@ -2481,7 +2481,7 @@ nv162_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, @@ -2519,7 +2519,7 @@ nv164_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, @@ -2558,7 +2558,7 @@ nv166_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, @@ -2598,7 +2598,7 @@ nv167_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, @@ -2636,7 +2636,7 @@ nv168_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .top = gk104_top_new, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, @@ -2666,7 +2666,7 @@ nv170_chipset = { .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, }; static const struct nvkm_device_chip @@ -2683,7 +2683,7 @@ nv172_chipset = { .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .disp = ga102_disp_new, .dma = gv100_dma_new, }; @@ -2702,7 +2702,7 @@ nv174_chipset = { .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, - .timer = gk20a_timer_new, + .timer = { 0x00000001, gk20a_timer_new }, .disp = ga102_disp_new, .dma = gv100_dma_new, }; @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_TIMER , timer); _(NVKM_SUBDEV_TOP , top); _(NVKM_SUBDEV_VOLT , volt); _(NVKM_ENGINE_BSP , bsp); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c index dd922033628c..8b0da0c06268 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c @@ -183,14 +183,14 @@ nvkm_timer = { int nvkm_timer_new_(const struct nvkm_timer_func *func, struct nvkm_device *device, - int index, struct nvkm_timer **ptmr) + enum nvkm_subdev_type type, int inst, struct nvkm_timer **ptmr) { struct nvkm_timer *tmr; if (!(tmr = *ptmr = kzalloc(sizeof(*tmr), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_timer, device, index, &tmr->subdev); + nvkm_subdev_ctor(&nvkm_timer, device, type, inst, &tmr->subdev); tmr->func = func; INIT_LIST_HEAD(&tmr->alarms); spin_lock_init(&tmr->lock); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.c index 9ed5f64912d0..73c3776b6b83 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.c @@ -33,7 +33,8 @@ gk20a_timer = { }; int -gk20a_timer_new(struct nvkm_device *device, int index, struct nvkm_timer **ptmr) +gk20a_timer_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_timer **ptmr) { - return nvkm_timer_new_(&gk20a_timer, device, index, ptmr); + return nvkm_timer_new_(&gk20a_timer, device, type, inst, ptmr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.c index 7f48249f41de..0058e856b378 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.c @@ -145,7 +145,8 @@ nv04_timer = { }; int -nv04_timer_new(struct nvkm_device *device, int index, struct nvkm_timer **ptmr) +nv04_timer_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_timer **ptmr) { - return nvkm_timer_new_(&nv04_timer, device, index, ptmr); + return nvkm_timer_new_(&nv04_timer, device, type, inst, ptmr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.c index bb99a152f26e..7e1f8c22f2a8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.c @@ -82,7 +82,8 @@ nv40_timer = { }; int -nv40_timer_new(struct nvkm_device *device, int index, struct nvkm_timer **ptmr) +nv40_timer_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_timer **ptmr) { - return nvkm_timer_new_(&nv40_timer, device, index, ptmr); + return nvkm_timer_new_(&nv40_timer, device, type, inst, ptmr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.c index 3cf9ec1b1b57..c2b263721f10 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.c @@ -79,7 +79,8 @@ nv41_timer = { }; int -nv41_timer_new(struct nvkm_device *device, int index, struct nvkm_timer **ptmr) +nv41_timer_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_timer **ptmr) { - return nvkm_timer_new_(&nv41_timer, device, index, ptmr); + return nvkm_timer_new_(&nv41_timer, device, type, inst, ptmr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/priv.h index 89e97294b182..e6debe7e2fa9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/priv.h @@ -4,8 +4,8 @@ #define nvkm_timer(p) container_of((p), struct nvkm_timer, subdev) #include -int nvkm_timer_new_(const struct nvkm_timer_func *, struct nvkm_device *, - int index, struct nvkm_timer **); +int nvkm_timer_new_(const struct nvkm_timer_func *, struct nvkm_device *, enum nvkm_subdev_type, + int, struct nvkm_timer **); struct nvkm_timer_func { void (*init)(struct nvkm_timer *); From 601c2a06d2a6e1ec8549f57c13103ab88efe7a20 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:53:38 +1000 Subject: [PATCH 48/87] drm/nouveau/top: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/subdev/top.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 55 +++++++++---------- .../gpu/drm/nouveau/nvkm/subdev/top/base.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/top/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/top/priv.h | 4 +- 8 files changed, 36 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index f0b9de0f289f..032a38b0604f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_top *top; struct nvkm_volt *volt; struct nvkm_engine *bsp; @@ -125,7 +124,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*top )(struct nvkm_device *, int idx, struct nvkm_top **); int (*volt )(struct nvkm_device *, int idx, struct nvkm_volt **); int (*bsp )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 248376cb552c..4160716d7c60 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -2,6 +2,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_PCI , struct nvkm_pci , pci) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_TOP , struct nvkm_top , top) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_IBUS , struct nvkm_subdev , ibus) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GPIO , struct nvkm_gpio , gpio) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_I2C , struct nvkm_i2c , i2c) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index 74314d255a52..fa449aa058c6 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -29,5 +29,5 @@ int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_devidx); enum nvkm_devidx nvkm_top_fault(struct nvkm_device *, int fault); enum nvkm_devidx nvkm_top_engine(struct nvkm_device *, int, int *runl, int *engn); -int gk104_top_new(struct nvkm_device *, int, struct nvkm_top **); +int gk104_top_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_top **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 723d1773108d..db5e75d78154 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_TOP ] = "top", [NVKM_SUBDEV_VOLT ] = "volt", [NVKM_ENGINE_BSP ] = "bsp", [NVKM_ENGINE_CE0 ] = "ce0", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 1b112c424f4e..49057c4fd3e4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1685,7 +1685,7 @@ nve4_chipset = { .pmu = { 0x00000001, gk104_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, @@ -1724,7 +1724,7 @@ nve6_chipset = { .pmu = { 0x00000001, gk104_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, @@ -1763,7 +1763,7 @@ nve7_chipset = { .pmu = { 0x00000001, gk104_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, @@ -1794,7 +1794,7 @@ nvea_chipset = { .mmu = { 0x00000001, gk20a_mmu_new }, .pmu = { 0x00000001, gk20a_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk20a_volt_new, .ce[2] = gk104_ce_new, .dma = gf119_dma_new, @@ -1827,7 +1827,7 @@ nvf0_chipset = { .pmu = { 0x00000001, gk110_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, @@ -1865,7 +1865,7 @@ nvf1_chipset = { .pmu = { 0x00000001, gk110_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, @@ -1903,7 +1903,7 @@ nv106_chipset = { .pmu = { 0x00000001, gk208_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, @@ -1941,7 +1941,7 @@ nv108_chipset = { .pmu = { 0x00000001, gk208_pmu_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, @@ -1979,7 +1979,7 @@ nv117_chipset = { .pmu = { 0x00000001, gm107_pmu_new }, .therm = { 0x00000001, gm107_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gm107_ce_new, .ce[2] = gm107_ce_new, @@ -2015,7 +2015,7 @@ nv118_chipset = { .pmu = { 0x00000001, gm107_pmu_new }, .therm = { 0x00000001, gm107_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gm107_ce_new, .ce[2] = gm107_ce_new, @@ -2049,7 +2049,7 @@ nv120_chipset = { .pmu = { 0x00000001, gm200_pmu_new }, .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gm200_ce_new, .ce[1] = gm200_ce_new, @@ -2087,7 +2087,7 @@ nv124_chipset = { .pmu = { 0x00000001, gm200_pmu_new }, .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gm200_ce_new, .ce[1] = gm200_ce_new, @@ -2125,7 +2125,7 @@ nv126_chipset = { .pmu = { 0x00000001, gm200_pmu_new }, .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .volt = gk104_volt_new, .ce[0] = gm200_ce_new, .ce[1] = gm200_ce_new, @@ -2155,7 +2155,7 @@ nv12b_chipset = { .mmu = { 0x00000001, gm20b_mmu_new }, .pmu = { 0x00000001, gm20b_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[2] = gm200_ce_new, .volt = gm20b_volt_new, .dma = gf119_dma_new, @@ -2186,7 +2186,7 @@ nv130_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = gp100_ce_new, .ce[1] = gp100_ce_new, .ce[2] = gp100_ce_new, @@ -2226,7 +2226,7 @@ nv132_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, .ce[2] = gp102_ce_new, @@ -2264,7 +2264,7 @@ nv134_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, .ce[2] = gp102_ce_new, @@ -2302,7 +2302,7 @@ nv136_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, .ce[2] = gp102_ce_new, @@ -2339,7 +2339,7 @@ nv137_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, .ce[2] = gp102_ce_new, @@ -2377,7 +2377,7 @@ nv138_chipset = { .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = gp102_ce_new, .ce[1] = gp102_ce_new, .ce[2] = gp102_ce_new, @@ -2407,7 +2407,7 @@ nv13b_chipset = { .mmu = { 0x00000001, gp10b_mmu_new }, .pmu = { 0x00000001, gp10b_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = gp100_ce_new, .dma = gf119_dma_new, .fifo = gp10b_fifo_new, @@ -2438,7 +2438,7 @@ nv140_chipset = { .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .disp = gv100_disp_new, .ce[0] = gv100_ce_new, .ce[1] = gv100_ce_new, @@ -2482,7 +2482,7 @@ nv162_chipset = { .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, .ce[2] = tu102_ce_new, @@ -2520,7 +2520,7 @@ nv164_chipset = { .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, .ce[2] = tu102_ce_new, @@ -2559,7 +2559,7 @@ nv166_chipset = { .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, .ce[2] = tu102_ce_new, @@ -2599,7 +2599,7 @@ nv167_chipset = { .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, .ce[2] = tu102_ce_new, @@ -2637,7 +2637,7 @@ nv168_chipset = { .pmu = { 0x00000001, gp102_pmu_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, - .top = gk104_top_new, + .top = { 0x00000001, gk104_top_new }, .ce[0] = tu102_ce_new, .ce[1] = tu102_ce_new, .ce[2] = tu102_ce_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_TOP , top); _(NVKM_SUBDEV_VOLT , volt); _(NVKM_ENGINE_BSP , bsp); _(NVKM_ENGINE_CE0 , ce[0]); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index 1eda904367b8..139f8d5b72d8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -165,12 +165,12 @@ nvkm_top = { int nvkm_top_new_(const struct nvkm_top_func *func, struct nvkm_device *device, - int index, struct nvkm_top **ptop) + enum nvkm_subdev_type type, int inst, struct nvkm_top **ptop) { struct nvkm_top *top; if (!(top = *ptop = kzalloc(sizeof(*top), GFP_KERNEL))) return -ENOMEM; - nvkm_subdev_ctor(&nvkm_top, device, index, &top->subdev); + nvkm_subdev_ctor(&nvkm_top, device, type, inst, &top->subdev); top->func = func; INIT_LIST_HEAD(&top->device); return 0; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c index 29f47e2db972..4bf0740293cd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c @@ -110,7 +110,8 @@ gk104_top = { }; int -gk104_top_new(struct nvkm_device *device, int index, struct nvkm_top **ptop) +gk104_top_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_top **ptop) { - return nvkm_top_new_(&gk104_top, device, index, ptop); + return nvkm_top_new_(&gk104_top, device, type, inst, ptop); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h index 37187691bfb4..8e103a836705 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/priv.h @@ -8,8 +8,8 @@ struct nvkm_top_func { int (*oneinit)(struct nvkm_top *); }; -int nvkm_top_new_(const struct nvkm_top_func *, struct nvkm_device *, - int, struct nvkm_top **); +int nvkm_top_new_(const struct nvkm_top_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_top **); struct nvkm_top_device *nvkm_top_device_new(struct nvkm_top *); #endif From d07be5d788624a14607177dedbd563cda3363141 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 12:58:05 +1000 Subject: [PATCH 49/87] drm/nouveau/volt: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 3 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/volt.h | 12 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 107 +++++++++--------- .../gpu/drm/nouveau/nvkm/subdev/volt/base.c | 8 +- .../gpu/drm/nouveau/nvkm/subdev/volt/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/volt/gf117.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/volt/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c | 8 +- .../gpu/drm/nouveau/nvkm/subdev/volt/gk20a.h | 2 +- .../gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c | 11 +- .../gpu/drm/nouveau/nvkm/subdev/volt/nv40.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/volt/priv.h | 8 +- 14 files changed, 91 insertions(+), 90 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 032a38b0604f..9ffec226dcee 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,8 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_volt *volt; - struct nvkm_engine *bsp; struct nvkm_engine *ce[9]; struct nvkm_engine *cipher; @@ -124,7 +122,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*volt )(struct nvkm_device *, int idx, struct nvkm_volt **); int (*bsp )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*ce[9] )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 4160716d7c60..39bc036d2c59 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -19,6 +19,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_PMU , struct nvkm_pmu , pmu) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VOLT , struct nvkm_volt , volt) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ICCSENSE, struct nvkm_iccsense, iccsense) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_THERM , struct nvkm_therm , therm) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/volt.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/volt.h index 45053a280930..0be86d5f0158 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/volt.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/volt.h @@ -36,10 +36,10 @@ int nvkm_volt_get(struct nvkm_volt *); int nvkm_volt_set_id(struct nvkm_volt *, u8 id, u8 min_id, u8 temp, int condition); -int nv40_volt_new(struct nvkm_device *, int, struct nvkm_volt **); -int gf100_volt_new(struct nvkm_device *, int, struct nvkm_volt **); -int gf117_volt_new(struct nvkm_device *, int, struct nvkm_volt **); -int gk104_volt_new(struct nvkm_device *, int, struct nvkm_volt **); -int gk20a_volt_new(struct nvkm_device *, int, struct nvkm_volt **); -int gm20b_volt_new(struct nvkm_device *, int, struct nvkm_volt **); +int nv40_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **); +int gf100_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **); +int gf117_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **); +int gk104_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **); +int gk20a_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **); +int gm20b_volt_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_volt **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index db5e75d78154..e91b1c3b3ffa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_SUBDEV_VOLT ] = "volt", [NVKM_ENGINE_BSP ] = "bsp", [NVKM_ENGINE_CE0 ] = "ce0", [NVKM_ENGINE_CE1 ] = "ce1", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 49057c4fd3e4..e605ea5df5f6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -485,7 +485,7 @@ nv40_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv40_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -511,7 +511,7 @@ nv41_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -537,7 +537,7 @@ nv42_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -563,7 +563,7 @@ nv43_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -589,7 +589,7 @@ nv44_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -615,7 +615,7 @@ nv45_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -641,7 +641,7 @@ nv46_chipset = { .pci = { 0x00000001, nv46_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -667,7 +667,7 @@ nv47_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -693,7 +693,7 @@ nv49_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -719,7 +719,7 @@ nv4a_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -745,7 +745,7 @@ nv4b_chipset = { .pci = { 0x00000001, nv40_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -771,7 +771,7 @@ nv4c_chipset = { .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -797,7 +797,7 @@ nv4e_chipset = { .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -826,7 +826,7 @@ nv50_chipset = { .pci = { 0x00000001, nv46_pci_new }, .therm = { 0x00000001, nv50_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv50_disp_new, .dma = nv50_dma_new, .fifo = nv50_fifo_new, @@ -852,7 +852,7 @@ nv63_chipset = { .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -878,7 +878,7 @@ nv67_chipset = { .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -904,7 +904,7 @@ nv68_chipset = { .pci = { 0x00000001, nv4c_pci_new }, .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = nv04_disp_new, .dma = nv04_dma_new, .fifo = nv40_fifo_new, @@ -933,7 +933,7 @@ nv84_chipset = { .pci = { 0x00000001, g84_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .bsp = g84_bsp_new, .cipher = g84_cipher_new, .disp = g84_disp_new, @@ -965,7 +965,7 @@ nv86_chipset = { .pci = { 0x00000001, g84_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .bsp = g84_bsp_new, .cipher = g84_cipher_new, .disp = g84_disp_new, @@ -997,7 +997,7 @@ nv92_chipset = { .pci = { 0x00000001, g92_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .bsp = g84_bsp_new, .cipher = g84_cipher_new, .disp = g84_disp_new, @@ -1029,7 +1029,7 @@ nv94_chipset = { .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .bsp = g84_bsp_new, .cipher = g84_cipher_new, .disp = g94_disp_new, @@ -1061,7 +1061,7 @@ nv96_chipset = { .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .bsp = g84_bsp_new, .cipher = g84_cipher_new, .disp = g94_disp_new, @@ -1093,7 +1093,7 @@ nv98_chipset = { .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = g94_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -1125,7 +1125,7 @@ nva0_chipset = { .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .bsp = g84_bsp_new, .cipher = g84_cipher_new, .disp = gt200_disp_new, @@ -1158,7 +1158,7 @@ nva3_chipset = { .pmu = { 0x00000001, gt215_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .ce[0] = gt215_ce_new, .disp = gt215_disp_new, .dma = nv50_dma_new, @@ -1192,7 +1192,7 @@ nva5_chipset = { .pmu = { 0x00000001, gt215_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .ce[0] = gt215_ce_new, .disp = gt215_disp_new, .dma = nv50_dma_new, @@ -1225,7 +1225,7 @@ nva8_chipset = { .pmu = { 0x00000001, gt215_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .ce[0] = gt215_ce_new, .disp = gt215_disp_new, .dma = nv50_dma_new, @@ -1257,7 +1257,7 @@ nvaa_chipset = { .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = mcp77_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -1289,7 +1289,7 @@ nvac_chipset = { .pci = { 0x00000001, g94_pci_new }, .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .disp = mcp77_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -1322,7 +1322,7 @@ nvaf_chipset = { .pmu = { 0x00000001, gt215_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = nv40_volt_new, + .volt = { 0x00000001, nv40_volt_new }, .ce[0] = gt215_ce_new, .disp = mcp89_disp_new, .dma = nv50_dma_new, @@ -1358,7 +1358,7 @@ nvc0_chipset = { .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf100_volt_new, + .volt = { 0x00000001, gf100_volt_new }, .ce[0] = gf100_ce_new, .ce[1] = gf100_ce_new, .disp = gt215_disp_new, @@ -1395,7 +1395,7 @@ nvc1_chipset = { .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf100_volt_new, + .volt = { 0x00000001, gf100_volt_new }, .ce[0] = gf100_ce_new, .disp = gt215_disp_new, .dma = gf100_dma_new, @@ -1431,7 +1431,7 @@ nvc3_chipset = { .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf100_volt_new, + .volt = { 0x00000001, gf100_volt_new }, .ce[0] = gf100_ce_new, .disp = gt215_disp_new, .dma = gf100_dma_new, @@ -1467,7 +1467,7 @@ nvc4_chipset = { .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf100_volt_new, + .volt = { 0x00000001, gf100_volt_new }, .ce[0] = gf100_ce_new, .ce[1] = gf100_ce_new, .disp = gt215_disp_new, @@ -1504,7 +1504,7 @@ nvc8_chipset = { .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf100_volt_new, + .volt = { 0x00000001, gf100_volt_new }, .ce[0] = gf100_ce_new, .ce[1] = gf100_ce_new, .disp = gt215_disp_new, @@ -1541,7 +1541,7 @@ nvce_chipset = { .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf100_volt_new, + .volt = { 0x00000001, gf100_volt_new }, .ce[0] = gf100_ce_new, .ce[1] = gf100_ce_new, .disp = gt215_disp_new, @@ -1578,7 +1578,7 @@ nvcf_chipset = { .pmu = { 0x00000001, gf100_pmu_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf100_volt_new, + .volt = { 0x00000001, gf100_volt_new }, .ce[0] = gf100_ce_new, .disp = gt215_disp_new, .dma = gf100_dma_new, @@ -1613,7 +1613,7 @@ nvd7_chipset = { .pci = { 0x00000001, gf106_pci_new }, .therm = { 0x00000001, gf119_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf117_volt_new, + .volt = { 0x00000001, gf117_volt_new }, .ce[0] = gf100_ce_new, .disp = gf119_disp_new, .dma = gf119_dma_new, @@ -1649,7 +1649,7 @@ nvd9_chipset = { .pmu = { 0x00000001, gf119_pmu_new }, .therm = { 0x00000001, gf119_therm_new }, .timer = { 0x00000001, nv41_timer_new }, - .volt = gf100_volt_new, + .volt = { 0x00000001, gf100_volt_new }, .ce[0] = gf100_ce_new, .disp = gf119_disp_new, .dma = gf119_dma_new, @@ -1686,7 +1686,7 @@ nve4_chipset = { .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, .ce[2] = gk104_ce_new, @@ -1725,7 +1725,7 @@ nve6_chipset = { .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, .ce[2] = gk104_ce_new, @@ -1764,7 +1764,7 @@ nve7_chipset = { .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, .ce[2] = gk104_ce_new, @@ -1795,7 +1795,7 @@ nvea_chipset = { .pmu = { 0x00000001, gk20a_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk20a_volt_new, + .volt = { 0x00000001, gk20a_volt_new }, .ce[2] = gk104_ce_new, .dma = gf119_dma_new, .fifo = gk20a_fifo_new, @@ -1828,7 +1828,7 @@ nvf0_chipset = { .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, .ce[2] = gk104_ce_new, @@ -1866,7 +1866,7 @@ nvf1_chipset = { .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, .ce[2] = gk104_ce_new, @@ -1904,7 +1904,7 @@ nv106_chipset = { .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, .ce[2] = gk104_ce_new, @@ -1942,7 +1942,7 @@ nv108_chipset = { .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gk104_ce_new, .ce[1] = gk104_ce_new, .ce[2] = gk104_ce_new, @@ -1980,7 +1980,7 @@ nv117_chipset = { .therm = { 0x00000001, gm107_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gm107_ce_new, .ce[2] = gm107_ce_new, .disp = gm107_disp_new, @@ -2016,7 +2016,7 @@ nv118_chipset = { .therm = { 0x00000001, gm107_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gm107_ce_new, .ce[2] = gm107_ce_new, .disp = gm107_disp_new, @@ -2050,7 +2050,7 @@ nv120_chipset = { .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gm200_ce_new, .ce[1] = gm200_ce_new, .ce[2] = gm200_ce_new, @@ -2088,7 +2088,7 @@ nv124_chipset = { .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gm200_ce_new, .ce[1] = gm200_ce_new, .ce[2] = gm200_ce_new, @@ -2126,7 +2126,7 @@ nv126_chipset = { .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, - .volt = gk104_volt_new, + .volt = { 0x00000001, gk104_volt_new }, .ce[0] = gm200_ce_new, .ce[1] = gm200_ce_new, .ce[2] = gm200_ce_new, @@ -2156,8 +2156,8 @@ nv12b_chipset = { .pmu = { 0x00000001, gm20b_pmu_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, + .volt = { 0x00000001, gm20b_volt_new }, .ce[2] = gm200_ce_new, - .volt = gm20b_volt_new, .dma = gf119_dma_new, .fifo = gm20b_fifo_new, .gr = gm20b_gr_new, @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_SUBDEV_VOLT , volt); _(NVKM_ENGINE_BSP , bsp); _(NVKM_ENGINE_CE0 , ce[0]); _(NVKM_ENGINE_CE1 , ce[1]); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c index e344901cfdc7..a17a6dd8d3de 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.c @@ -281,12 +281,12 @@ nvkm_volt = { void nvkm_volt_ctor(const struct nvkm_volt_func *func, struct nvkm_device *device, - int index, struct nvkm_volt *volt) + enum nvkm_subdev_type type, int inst, struct nvkm_volt *volt) { struct nvkm_bios *bios = device->bios; int i; - nvkm_subdev_ctor(&nvkm_volt, device, index, &volt->subdev); + nvkm_subdev_ctor(&nvkm_volt, device, type, inst, &volt->subdev); volt->func = func; /* Assuming the non-bios device should build the voltage table later */ @@ -319,10 +319,10 @@ nvkm_volt_ctor(const struct nvkm_volt_func *func, struct nvkm_device *device, int nvkm_volt_new_(const struct nvkm_volt_func *func, struct nvkm_device *device, - int index, struct nvkm_volt **pvolt) + enum nvkm_subdev_type type, int inst, struct nvkm_volt **pvolt) { if (!(*pvolt = kzalloc(sizeof(**pvolt), GFP_KERNEL))) return -ENOMEM; - nvkm_volt_ctor(func, device, index, *pvolt); + nvkm_volt_ctor(func, device, type, inst, *pvolt); return 0; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.c index d9ed6925ca64..b47a1c0817be 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.c @@ -56,12 +56,13 @@ gf100_volt = { }; int -gf100_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) +gf100_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_volt **pvolt) { struct nvkm_volt *volt; int ret; - ret = nvkm_volt_new_(&gf100_volt, device, index, &volt); + ret = nvkm_volt_new_(&gf100_volt, device, type, inst, &volt); *pvolt = volt; if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.c index 547a58f0aeac..03c8a2c2916c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.c @@ -46,12 +46,13 @@ gf117_volt = { }; int -gf117_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) +gf117_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_volt **pvolt) { struct nvkm_volt *volt; int ret; - ret = nvkm_volt_new_(&gf117_volt, device, index, &volt); + ret = nvkm_volt_new_(&gf117_volt, device, type, inst, &volt); *pvolt = volt; if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.c index 1c744e029454..d1ce4309cfb8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.c @@ -95,7 +95,8 @@ gk104_volt_pwm = { }; int -gk104_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) +gk104_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_volt **pvolt) { const struct nvkm_volt_func *volt_func = &gk104_volt_gpio; struct dcb_gpio_func gpio; @@ -114,7 +115,7 @@ gk104_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) if (!(volt = kzalloc(sizeof(*volt), GFP_KERNEL))) return -ENOMEM; - nvkm_volt_ctor(volt_func, device, index, &volt->base); + nvkm_volt_ctor(volt_func, device, type, inst, &volt->base); *pvolt = &volt->base; volt->bios = bios; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c index ce5d83cdc7cf..8c2faa964511 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c @@ -144,14 +144,14 @@ gk20a_volt = { }; int -gk20a_volt_ctor(struct nvkm_device *device, int index, +gk20a_volt_ctor(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, const struct cvb_coef *coefs, int nb_coefs, int vmin, struct gk20a_volt *volt) { struct nvkm_device_tegra *tdev = device->func->tegra(device); int i, uv; - nvkm_volt_ctor(&gk20a_volt, device, index, &volt->base); + nvkm_volt_ctor(&gk20a_volt, device, type, inst, &volt->base); uv = regulator_get_voltage(tdev->vdd); nvkm_debug(&volt->base.subdev, "the default voltage is %duV\n", uv); @@ -172,7 +172,7 @@ gk20a_volt_ctor(struct nvkm_device *device, int index, } int -gk20a_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) +gk20a_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_volt **pvolt) { struct gk20a_volt *volt; @@ -181,6 +181,6 @@ gk20a_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) return -ENOMEM; *pvolt = &volt->base; - return gk20a_volt_ctor(device, index, gk20a_cvb_coef, + return gk20a_volt_ctor(device, type, inst, gk20a_cvb_coef, ARRAY_SIZE(gk20a_cvb_coef), 0, volt); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.h b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.h index 6a6c97f9684e..01f8a5fcf496 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.h @@ -37,7 +37,7 @@ struct gk20a_volt { struct regulator *vdd; }; -int gk20a_volt_ctor(struct nvkm_device *device, int index, +int gk20a_volt_ctor(struct nvkm_device *device, enum nvkm_subdev_type, int, const struct cvb_coef *coefs, int nb_coefs, int vmin, struct gk20a_volt *volt); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c index 2925b9cae681..c2e9694d333f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.c @@ -64,7 +64,8 @@ static const u32 speedo_to_vmin[] = { }; int -gm20b_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) +gm20b_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_volt **pvolt) { struct nvkm_device_tegra *tdev = device->func->tegra(device); struct gk20a_volt *volt; @@ -84,9 +85,9 @@ gm20b_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) vmin = speedo_to_vmin[tdev->gpu_speedo_id]; if (tdev->gpu_speedo_id >= 1) - return gk20a_volt_ctor(device, index, gm20b_na_cvb_coef, - ARRAY_SIZE(gm20b_na_cvb_coef), vmin, volt); + return gk20a_volt_ctor(device, type, inst, gm20b_na_cvb_coef, + ARRAY_SIZE(gm20b_na_cvb_coef), vmin, volt); else - return gk20a_volt_ctor(device, index, gm20b_cvb_coef, - ARRAY_SIZE(gm20b_cvb_coef), vmin, volt); + return gk20a_volt_ctor(device, type, inst, gm20b_cvb_coef, + ARRAY_SIZE(gm20b_cvb_coef), vmin, volt); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.c index 23409387abb5..d6a587d6082d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.c @@ -30,12 +30,13 @@ nv40_volt = { }; int -nv40_volt_new(struct nvkm_device *device, int index, struct nvkm_volt **pvolt) +nv40_volt_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_volt **pvolt) { struct nvkm_volt *volt; int ret; - ret = nvkm_volt_new_(&nv40_volt, device, index, &volt); + ret = nvkm_volt_new_(&nv40_volt, device, type, inst, &volt); *pvolt = volt; if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/priv.h index 75f13a34671f..24e2d16d1913 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/volt/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/volt/priv.h @@ -4,10 +4,10 @@ #define nvkm_volt(p) container_of((p), struct nvkm_volt, subdev) #include -void nvkm_volt_ctor(const struct nvkm_volt_func *, struct nvkm_device *, - int index, struct nvkm_volt *); -int nvkm_volt_new_(const struct nvkm_volt_func *, struct nvkm_device *, - int index, struct nvkm_volt **); +void nvkm_volt_ctor(const struct nvkm_volt_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_volt *); +int nvkm_volt_new_(const struct nvkm_volt_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_volt **); struct nvkm_volt_func { int (*oneinit)(struct nvkm_volt *); From fcc08a7c0ded8c75b00e67c3d14907389a568a57 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:33:53 +1000 Subject: [PATCH 50/87] drm/nouveau/bsp,vp: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 4 --- .../drm/nouveau/include/nvkm/core/engine.h | 8 ++++-- .../drm/nouveau/include/nvkm/core/layout.h | 3 +++ .../gpu/drm/nouveau/include/nvkm/engine/bsp.h | 2 +- .../gpu/drm/nouveau/include/nvkm/engine/vp.h | 2 +- .../drm/nouveau/include/nvkm/engine/xtensa.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/engine.c | 7 +++-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 2 -- drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c | 5 ++-- .../gpu/drm/nouveau/nvkm/engine/device/base.c | 26 +++++++++---------- drivers/gpu/drm/nouveau/nvkm/engine/vp/g84.c | 6 ++--- drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c | 9 +++---- .../gpu/drm/nouveau/nvkm/subdev/devinit/g84.c | 6 ++--- 13 files changed, 40 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 9ffec226dcee..29947b3c2e4f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *bsp; struct nvkm_engine *ce[9]; struct nvkm_engine *cipher; struct nvkm_disp *disp; @@ -81,7 +80,6 @@ struct nvkm_device { struct nvkm_sec2 *sec2; struct nvkm_sw *sw; struct nvkm_engine *vic; - struct nvkm_engine *vp; #define NVKM_LAYOUT_ONCE(type,data,ptr) data *ptr; #define NVKM_LAYOUT_INST(type,data,ptr,cnt) data *ptr[cnt]; @@ -123,7 +121,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*bsp )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*ce[9] )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*cipher )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*disp )(struct nvkm_device *, int idx, struct nvkm_disp **); @@ -144,7 +141,6 @@ struct nvkm_device_chip { int (*sec2 )(struct nvkm_device *, int idx, struct nvkm_sec2 **); int (*sw )(struct nvkm_device *, int idx, struct nvkm_sw **); int (*vic )(struct nvkm_device *, int idx, struct nvkm_engine **); - int (*vp )(struct nvkm_device *, int idx, struct nvkm_engine **); }; struct nvkm_device *nvkm_device_find(u64 name); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h index 580d3d72fc13..d36895650180 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h @@ -47,8 +47,12 @@ struct nvkm_engine_func { struct nvkm_sclass sclass[]; }; -int nvkm_engine_ctor(const struct nvkm_engine_func *, struct nvkm_device *, - int index, bool enable, struct nvkm_engine *); +int nvkm_engine_ctor_(const struct nvkm_engine_func *, bool old, struct nvkm_device *, + enum nvkm_subdev_type, int inst, bool enable, struct nvkm_engine *); +#define nvkm_engine_ctor_o(f,d,i, e,s) nvkm_engine_ctor_((f), true, (d), (i), -1 , (e), (s)) +#define nvkm_engine_ctor_n(f,d,t,i,e,s) nvkm_engine_ctor_((f), false, (d), (t), (i), (e), (s)) +#define nvkm_engine_ctor__(_1,_2,_3,_4,_5,_6,IMPL,...) IMPL +#define nvkm_engine_ctor(A...) nvkm_engine_ctor__(A, nvkm_engine_ctor_n, nvkm_engine_ctor_o)(A) int nvkm_engine_new_(const struct nvkm_engine_func *, struct nvkm_device *, int index, bool enable, struct nvkm_engine **); struct nvkm_engine *nvkm_engine_ref(struct nvkm_engine *); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 39bc036d2c59..f2a4162da5ef 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -24,3 +24,6 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ICCSENSE, struct nvkm_iccsense, iccsense) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_THERM , struct nvkm_therm , therm) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) + +NVKM_LAYOUT_ONCE(NVKM_ENGINE_BSP , struct nvkm_engine , bsp) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/bsp.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/bsp.h index f938f024db81..d5530faf025e 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/bsp.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/bsp.h @@ -2,5 +2,5 @@ #ifndef __NVKM_BSP_H__ #define __NVKM_BSP_H__ #include -int g84_bsp_new(struct nvkm_device *, int, struct nvkm_engine **); +int g84_bsp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/vp.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/vp.h index 8984415b2a3d..1bab26858538 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/vp.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/vp.h @@ -2,5 +2,5 @@ #ifndef __NVKM_VP_H__ #define __NVKM_VP_H__ #include -int g84_vp_new(struct nvkm_device *, int, struct nvkm_engine **); +int g84_vp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/xtensa.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/xtensa.h index fbf27b2293a9..3083a5866a55 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/xtensa.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/xtensa.h @@ -13,7 +13,7 @@ struct nvkm_xtensa { }; int nvkm_xtensa_new_(const struct nvkm_xtensa_func *, struct nvkm_device *, - int index, bool enable, u32 addr, struct nvkm_engine **); + enum nvkm_subdev_type, int, bool enable, u32 addr, struct nvkm_engine **); struct nvkm_xtensa_func { u32 fifo_val; diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c index 774270ae9e24..ca99cb218516 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c @@ -176,11 +176,10 @@ nvkm_engine = { }; int -nvkm_engine_ctor(const struct nvkm_engine_func *func, - struct nvkm_device *device, int index, bool enable, - struct nvkm_engine *engine) +nvkm_engine_ctor_(const struct nvkm_engine_func *func, bool old, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, bool enable, struct nvkm_engine *engine) { - nvkm_subdev_ctor(&nvkm_engine, device, index, &engine->subdev); + nvkm_subdev_ctor_(&nvkm_engine, old, device, type, inst, &engine->subdev); engine->func = func; refcount_set(&engine->use.refcount, 0); mutex_init(&engine->use.mutex); diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index e91b1c3b3ffa..d81d1f716de3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_BSP ] = "bsp", [NVKM_ENGINE_CE0 ] = "ce0", [NVKM_ENGINE_CE1 ] = "ce1", [NVKM_ENGINE_CE2 ] = "ce2", @@ -66,7 +65,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { [NVKM_ENGINE_SEC2 ] = "sec2", [NVKM_ENGINE_SW ] = "sw", [NVKM_ENGINE_VIC ] = "vic", - [NVKM_ENGINE_VP ] = "vp", }; void diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c index 44e116f7880d..39f6db269c7a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c @@ -36,8 +36,9 @@ g84_bsp = { }; int -g84_bsp_new(struct nvkm_device *device, int index, struct nvkm_engine **pengine) +g84_bsp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pengine) { - return nvkm_xtensa_new_(&g84_bsp, device, index, + return nvkm_xtensa_new_(&g84_bsp, device, type, inst, device->chipset != 0x92, 0x103000, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index e605ea5df5f6..e86bff94a0f4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -934,7 +934,7 @@ nv84_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .bsp = g84_bsp_new, + .bsp = { 0x00000001, g84_bsp_new }, .cipher = g84_cipher_new, .disp = g84_disp_new, .dma = nv50_dma_new, @@ -943,7 +943,7 @@ nv84_chipset = { .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, - .vp = g84_vp_new, + .vp = { 0x00000001, g84_vp_new }, }; static const struct nvkm_device_chip @@ -966,7 +966,7 @@ nv86_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .bsp = g84_bsp_new, + .bsp = { 0x00000001, g84_bsp_new }, .cipher = g84_cipher_new, .disp = g84_disp_new, .dma = nv50_dma_new, @@ -975,7 +975,7 @@ nv86_chipset = { .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, - .vp = g84_vp_new, + .vp = { 0x00000001, g84_vp_new }, }; static const struct nvkm_device_chip @@ -998,7 +998,7 @@ nv92_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .bsp = g84_bsp_new, + .bsp = { 0x00000001, g84_bsp_new }, .cipher = g84_cipher_new, .disp = g84_disp_new, .dma = nv50_dma_new, @@ -1007,7 +1007,7 @@ nv92_chipset = { .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, - .vp = g84_vp_new, + .vp = { 0x00000001, g84_vp_new }, }; static const struct nvkm_device_chip @@ -1030,7 +1030,7 @@ nv94_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .bsp = g84_bsp_new, + .bsp = { 0x00000001, g84_bsp_new }, .cipher = g84_cipher_new, .disp = g94_disp_new, .dma = nv50_dma_new, @@ -1039,7 +1039,7 @@ nv94_chipset = { .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, - .vp = g84_vp_new, + .vp = { 0x00000001, g84_vp_new }, }; static const struct nvkm_device_chip @@ -1062,7 +1062,7 @@ nv96_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .bsp = g84_bsp_new, + .bsp = { 0x00000001, g84_bsp_new }, .cipher = g84_cipher_new, .disp = g94_disp_new, .dma = nv50_dma_new, @@ -1071,7 +1071,7 @@ nv96_chipset = { .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, - .vp = g84_vp_new, + .vp = { 0x00000001, g84_vp_new }, }; static const struct nvkm_device_chip @@ -1126,7 +1126,7 @@ nva0_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .bsp = g84_bsp_new, + .bsp = { 0x00000001, g84_bsp_new }, .cipher = g84_cipher_new, .disp = gt200_disp_new, .dma = nv50_dma_new, @@ -1135,7 +1135,7 @@ nva0_chipset = { .mpeg = g84_mpeg_new, .pm = gt200_pm_new, .sw = nv50_sw_new, - .vp = g84_vp_new, + .vp = { 0x00000001, g84_vp_new }, }; static const struct nvkm_device_chip @@ -3248,7 +3248,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_BSP , bsp); _(NVKM_ENGINE_CE0 , ce[0]); _(NVKM_ENGINE_CE1 , ce[1]); _(NVKM_ENGINE_CE2 , ce[2]); @@ -3281,7 +3280,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, _(NVKM_ENGINE_SEC2 , sec2); _(NVKM_ENGINE_SW , sw); _(NVKM_ENGINE_VIC , vic); - _(NVKM_ENGINE_VP , vp); default: WARN_ON(1); continue; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/vp/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/vp/g84.c index 7a96178786c4..b502266c76fd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/vp/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/vp/g84.c @@ -36,8 +36,8 @@ g84_vp = { }; int -g84_vp_new(struct nvkm_device *device, int index, struct nvkm_engine **pengine) +g84_vp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pengine) { - return nvkm_xtensa_new_(&g84_vp, device, index, - true, 0x00f000, pengine); + return nvkm_xtensa_new_(&g84_vp, device, type, inst, true, 0x00f000, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c b/drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c index 70549381e082..f7d3ba0afb55 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c @@ -175,9 +175,9 @@ nvkm_xtensa = { }; int -nvkm_xtensa_new_(const struct nvkm_xtensa_func *func, - struct nvkm_device *device, int index, bool enable, - u32 addr, struct nvkm_engine **pengine) +nvkm_xtensa_new_(const struct nvkm_xtensa_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, bool enable, u32 addr, + struct nvkm_engine **pengine) { struct nvkm_xtensa *xtensa; @@ -187,6 +187,5 @@ nvkm_xtensa_new_(const struct nvkm_xtensa_func *func, xtensa->addr = addr; *pengine = &xtensa->engine; - return nvkm_engine_ctor(&nvkm_xtensa, device, index, - enable, &xtensa->engine); + return nvkm_engine_ctor(&nvkm_xtensa, device, type, inst, enable, &xtensa->engine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c index 44513a474f74..cd4a5b356472 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c @@ -36,15 +36,15 @@ g84_devinit_disable(struct nvkm_devinit *init) if (!(r001540 & 0x40000000)) { disable |= (1ULL << NVKM_ENGINE_MPEG); - disable |= (1ULL << NVKM_ENGINE_VP); - disable |= (1ULL << NVKM_ENGINE_BSP); + nvkm_subdev_disable(device, NVKM_ENGINE_VP, 0); + nvkm_subdev_disable(device, NVKM_ENGINE_BSP, 0); disable |= (1ULL << NVKM_ENGINE_CIPHER); } if (!(r00154c & 0x00000004)) disable |= (1ULL << NVKM_ENGINE_DISP); if (!(r00154c & 0x00000020)) - disable |= (1ULL << NVKM_ENGINE_BSP); + nvkm_subdev_disable(device, NVKM_ENGINE_BSP, 0); if (!(r00154c & 0x00000040)) disable |= (1ULL << NVKM_ENGINE_CIPHER); From b7da823a3e2ff91a8853b31d53afba437cc34508 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 11:06:50 +1000 Subject: [PATCH 51/87] drm/nouveau/falcon: use split type+inst when looking up PRI addr Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h | 2 +- drivers/gpu/drm/nouveau/nvkm/falcon/base.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index fa449aa058c6..0a8004ee8c13 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -22,7 +22,7 @@ struct nvkm_top_device { struct list_head head; }; -u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_devidx); +u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_subdev_type, int); int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_devidx); diff --git a/drivers/gpu/drm/nouveau/nvkm/falcon/base.c b/drivers/gpu/drm/nouveau/nvkm/falcon/base.c index 212e224ddda8..262641a014b0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/falcon/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/falcon/base.c @@ -141,7 +141,7 @@ nvkm_falcon_oneinit(struct nvkm_falcon *falcon) u32 reg; if (!falcon->addr) { - falcon->addr = nvkm_top_addr(subdev->device, subdev->index); + falcon->addr = nvkm_top_addr(subdev->device, subdev->type, subdev->inst); if (WARN_ON(!falcon->addr)) return -ENODEV; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index 139f8d5b72d8..9093e86865c7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -43,14 +43,14 @@ nvkm_top_device_new(struct nvkm_top *top) } u32 -nvkm_top_addr(struct nvkm_device *device, enum nvkm_devidx index) +nvkm_top_addr(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) { struct nvkm_top *top = device->top; struct nvkm_top_device *info; if (top) { list_for_each_entry(info, &top->device, head) { - if (info->index == index) + if (info->type == type && info->inst == inst) return info->addr; } } From 50551b15c760b3da8ad6284d0518013d1b4f437f Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:30:30 +1000 Subject: [PATCH 52/87] drm/nouveau/ce: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/engine.h | 9 +- .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/engine/ce.h | 18 +- .../drm/nouveau/include/nvkm/engine/falcon.h | 8 +- drivers/gpu/drm/nouveau/nvkm/core/engine.c | 6 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 13 -- .../gpu/drm/nouveau/nvkm/engine/ce/gf100.c | 13 +- .../gpu/drm/nouveau/nvkm/engine/ce/gk104.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/ce/gm107.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/ce/gm200.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/ce/gp100.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/ce/gp102.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/ce/gt215.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/ce/gv100.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/ce/tu102.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/device/base.c | 174 +++++------------- drivers/gpu/drm/nouveau/nvkm/engine/falcon.c | 9 +- .../drm/nouveau/nvkm/subdev/devinit/gf100.c | 4 +- .../drm/nouveau/nvkm/subdev/devinit/gm107.c | 4 +- .../drm/nouveau/nvkm/subdev/devinit/gt215.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/mcp89.c | 2 +- 22 files changed, 105 insertions(+), 192 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 29947b3c2e4f..902976fba46f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *ce[9]; struct nvkm_engine *cipher; struct nvkm_disp *disp; struct nvkm_dma *dma; @@ -121,7 +120,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*ce[9] )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*cipher )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*disp )(struct nvkm_device *, int idx, struct nvkm_disp **); int (*dma )(struct nvkm_device *, int idx, struct nvkm_dma **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h index d36895650180..1a131aaa3a25 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h @@ -53,8 +53,13 @@ int nvkm_engine_ctor_(const struct nvkm_engine_func *, bool old, struct nvkm_dev #define nvkm_engine_ctor_n(f,d,t,i,e,s) nvkm_engine_ctor_((f), false, (d), (t), (i), (e), (s)) #define nvkm_engine_ctor__(_1,_2,_3,_4,_5,_6,IMPL,...) IMPL #define nvkm_engine_ctor(A...) nvkm_engine_ctor__(A, nvkm_engine_ctor_n, nvkm_engine_ctor_o)(A) -int nvkm_engine_new_(const struct nvkm_engine_func *, struct nvkm_device *, - int index, bool enable, struct nvkm_engine **); +int nvkm_engine_new__(const struct nvkm_engine_func *, bool old, struct nvkm_device *, + enum nvkm_subdev_type, int, bool enable, struct nvkm_engine **); +#define nvkm_engine_new__o(f,d,i, e,s) nvkm_engine_new__((f), true, (d), (i), -1 , (e), (s)) +#define nvkm_engine_new__n(f,d,t,i,e,s) nvkm_engine_new__((f), false, (d), (t), (i), (e), (s)) +#define nvkm_engine_new___(_1,_2,_3,_4,_5,_6,IMPL,...) IMPL +#define nvkm_engine_new_(A...) nvkm_engine_new___(A, nvkm_engine_new__n, nvkm_engine_new__o)(A) + struct nvkm_engine *nvkm_engine_ref(struct nvkm_engine *); void nvkm_engine_unref(struct nvkm_engine **); void nvkm_engine_tile(struct nvkm_engine *, int region); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index f2a4162da5ef..72ba4d5feed9 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -26,4 +26,5 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_BSP , struct nvkm_engine , bsp) +NVKM_LAYOUT_INST(NVKM_ENGINE_CE , struct nvkm_engine , ce, 9) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/ce.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/ce.h index 86f420f4630b..cfd2da8e66fe 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/ce.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/ce.h @@ -3,13 +3,13 @@ #define __NVKM_CE_H__ #include -int gt215_ce_new(struct nvkm_device *, int, struct nvkm_engine **); -int gf100_ce_new(struct nvkm_device *, int, struct nvkm_engine **); -int gk104_ce_new(struct nvkm_device *, int, struct nvkm_engine **); -int gm107_ce_new(struct nvkm_device *, int, struct nvkm_engine **); -int gm200_ce_new(struct nvkm_device *, int, struct nvkm_engine **); -int gp100_ce_new(struct nvkm_device *, int, struct nvkm_engine **); -int gp102_ce_new(struct nvkm_device *, int, struct nvkm_engine **); -int gv100_ce_new(struct nvkm_device *, int, struct nvkm_engine **); -int tu102_ce_new(struct nvkm_device *, int, struct nvkm_engine **); +int gt215_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gf100_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gk104_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gm107_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gm200_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gp100_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gp102_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gv100_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int tu102_ce_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h index 27c1f868552c..8ab27a45b2c2 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h @@ -63,8 +63,12 @@ void nvkm_falcon_del(struct nvkm_falcon **); int nvkm_falcon_get(struct nvkm_falcon *, const struct nvkm_subdev *); void nvkm_falcon_put(struct nvkm_falcon *, const struct nvkm_subdev *); -int nvkm_falcon_new_(const struct nvkm_falcon_func *, struct nvkm_device *, - int index, bool enable, u32 addr, struct nvkm_engine **); +int nvkm_falcon_new__(const struct nvkm_falcon_func *, bool old, struct nvkm_device *, + enum nvkm_subdev_type, int inst, bool enable, u32 addr, struct nvkm_engine **); +#define nvkm_falcon_new__o(f,d,i, e,a,s) nvkm_falcon_new__((f), true, (d), (i), -1 , (e), (a), (s)) +#define nvkm_falcon_new__n(f,d,t,i,e,a,s) nvkm_falcon_new__((f), false, (d), (t), (i), (e), (a), (s)) +#define nvkm_falcon_new___(_1,_2,_3,_4,_5,_6,_7,IMPL,...) IMPL +#define nvkm_falcon_new_(A...) nvkm_falcon_new___(A, nvkm_falcon_new__n, nvkm_falcon_new__o)(A) struct nvkm_falcon_func { struct { diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c index ca99cb218516..293b6c3f24d6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c @@ -194,11 +194,11 @@ nvkm_engine_ctor_(const struct nvkm_engine_func *func, bool old, struct nvkm_dev } int -nvkm_engine_new_(const struct nvkm_engine_func *func, - struct nvkm_device *device, int index, bool enable, +nvkm_engine_new__(const struct nvkm_engine_func *func, bool old, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, bool enable, struct nvkm_engine **pengine) { if (!(*pengine = kzalloc(sizeof(**pengine), GFP_KERNEL))) return -ENOMEM; - return nvkm_engine_ctor(func, device, index, enable, *pengine); + return nvkm_engine_ctor_(func, old, device, type, inst, enable, *pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index d81d1f716de3..c0129aca8e72 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,15 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_CE0 ] = "ce0", - [NVKM_ENGINE_CE1 ] = "ce1", - [NVKM_ENGINE_CE2 ] = "ce2", - [NVKM_ENGINE_CE3 ] = "ce3", - [NVKM_ENGINE_CE4 ] = "ce4", - [NVKM_ENGINE_CE5 ] = "ce5", - [NVKM_ENGINE_CE6 ] = "ce6", - [NVKM_ENGINE_CE7 ] = "ce7", - [NVKM_ENGINE_CE8 ] = "ce8", [NVKM_ENGINE_CIPHER ] = "cipher", [NVKM_ENGINE_DISP ] = "disp", [NVKM_ENGINE_DMAOBJ ] = "dma", @@ -211,10 +202,6 @@ nvkm_subdev_ctor_(const struct nvkm_subdev_func *func, bool old, if (old) { switch (subdev->type) { - case NVKM_ENGINE_CE0 ... NVKM_ENGINE_CE_LAST: - subdev->type = NVKM_ENGINE_CE; - subdev->inst = subdev->index - NVKM_ENGINE_CE0; - break; case NVKM_ENGINE_NVENC0 ... NVKM_ENGINE_NVENC_LAST: subdev->type = NVKM_ENGINE_NVENC; subdev->inst = subdev->index - NVKM_ENGINE_NVENC0; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c index ad9f855c9a40..847b787dbc31 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c @@ -63,16 +63,9 @@ gf100_ce1 = { }; int -gf100_ce_new(struct nvkm_device *device, int index, +gf100_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - if (index == NVKM_ENGINE_CE0) { - return nvkm_falcon_new_(&gf100_ce0, device, index, true, - 0x104000, pengine); - } else - if (index == NVKM_ENGINE_CE1) { - return nvkm_falcon_new_(&gf100_ce1, device, index, true, - 0x105000, pengine); - } - return -ENODEV; + return nvkm_falcon_new_(inst ? &gf100_ce1 : &gf100_ce0, device, type, inst, true, + 0x104000 + (inst * 0x1000), pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c index 9e0b53a10f77..55075f3d80cc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c @@ -94,8 +94,8 @@ gk104_ce = { }; int -gk104_ce_new(struct nvkm_device *device, int index, +gk104_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_engine_new_(&gk104_ce, device, index, true, pengine); + return nvkm_engine_new_(&gk104_ce, device, type, inst, true, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm107.c index c0df7daa85e2..c3c476592c43 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm107.c @@ -36,8 +36,8 @@ gm107_ce = { }; int -gm107_ce_new(struct nvkm_device *device, int index, +gm107_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_engine_new_(&gm107_ce, device, index, true, pengine); + return nvkm_engine_new_(&gm107_ce, device, type, inst, true, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm200.c index c6fa8b20737e..d2db61865371 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm200.c @@ -35,8 +35,8 @@ gm200_ce = { }; int -gm200_ce_new(struct nvkm_device *device, int index, +gm200_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_engine_new_(&gm200_ce, device, index, true, pengine); + return nvkm_engine_new_(&gm200_ce, device, type, inst, true, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c index c7710456bc30..24130198fa62 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c @@ -95,8 +95,8 @@ gp100_ce = { }; int -gp100_ce_new(struct nvkm_device *device, int index, +gp100_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_engine_new_(&gp100_ce, device, index, true, pengine); + return nvkm_engine_new_(&gp100_ce, device, type, inst, true, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.c index 985c8f653874..180d497a95eb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.c @@ -37,8 +37,8 @@ gp102_ce = { }; int -gp102_ce_new(struct nvkm_device *device, int index, +gp102_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_engine_new_(&gp102_ce, device, index, true, pengine); + return nvkm_engine_new_(&gp102_ce, device, type, inst, true, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c index 63ac51a54fd3..20df04ba7f09 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c @@ -75,9 +75,9 @@ gt215_ce = { }; int -gt215_ce_new(struct nvkm_device *device, int index, +gt215_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_falcon_new_(>215_ce, device, index, + return nvkm_falcon_new_(>215_ce, device, type, inst, (device->chipset != 0xaf), 0x104000, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.c index fcda3de45857..cd5e9cdca1cf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.c @@ -33,8 +33,8 @@ gv100_ce = { }; int -gv100_ce_new(struct nvkm_device *device, int index, +gv100_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_engine_new_(&gv100_ce, device, index, true, pengine); + return nvkm_engine_new_(&gv100_ce, device, type, inst, true, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.c index b4308e2d8c75..e5ff92d9364c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.c @@ -33,8 +33,8 @@ tu102_ce = { }; int -tu102_ce_new(struct nvkm_device *device, int index, +tu102_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_engine_new_(&tu102_ce, device, index, true, pengine); + return nvkm_engine_new_(&tu102_ce, device, type, inst, true, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index e86bff94a0f4..14636df82630 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1159,7 +1159,7 @@ nva3_chipset = { .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, @@ -1193,7 +1193,7 @@ nva5_chipset = { .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, @@ -1226,7 +1226,7 @@ nva8_chipset = { .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, @@ -1323,7 +1323,7 @@ nvaf_chipset = { .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, @@ -1359,8 +1359,7 @@ nvc0_chipset = { .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, @@ -1396,7 +1395,7 @@ nvc1_chipset = { .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, @@ -1432,7 +1431,7 @@ nvc3_chipset = { .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, @@ -1468,8 +1467,7 @@ nvc4_chipset = { .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, @@ -1505,8 +1503,7 @@ nvc8_chipset = { .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, @@ -1542,8 +1539,7 @@ nvce_chipset = { .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, @@ -1579,7 +1575,7 @@ nvcf_chipset = { .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, @@ -1614,7 +1610,7 @@ nvd7_chipset = { .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, @@ -1650,7 +1646,7 @@ nvd9_chipset = { .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, @@ -1687,9 +1683,7 @@ nve4_chipset = { .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, @@ -1726,9 +1720,7 @@ nve6_chipset = { .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, @@ -1765,9 +1757,7 @@ nve7_chipset = { .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, @@ -1796,7 +1786,7 @@ nvea_chipset = { .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, @@ -1829,9 +1819,7 @@ nvf0_chipset = { .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, @@ -1867,9 +1855,7 @@ nvf1_chipset = { .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, @@ -1905,9 +1891,7 @@ nv106_chipset = { .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, @@ -1943,9 +1927,7 @@ nv108_chipset = { .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, @@ -1981,8 +1963,7 @@ nv117_chipset = { .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, @@ -2017,8 +1998,7 @@ nv118_chipset = { .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, @@ -2051,9 +2031,7 @@ nv120_chipset = { .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, @@ -2089,9 +2067,7 @@ nv124_chipset = { .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, @@ -2127,9 +2103,7 @@ nv126_chipset = { .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, @@ -2157,7 +2131,7 @@ nv12b_chipset = { .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, @@ -2187,12 +2161,7 @@ nv130_chipset = { .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, @@ -2227,10 +2196,7 @@ nv132_chipset = { .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, @@ -2265,10 +2231,7 @@ nv134_chipset = { .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, @@ -2303,10 +2266,7 @@ nv136_chipset = { .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, @@ -2340,10 +2300,7 @@ nv137_chipset = { .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, @@ -2378,10 +2335,7 @@ nv138_chipset = { .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, @@ -2408,7 +2362,7 @@ nv13b_chipset = { .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, @@ -2439,16 +2393,8 @@ nv140_chipset = { .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, @@ -2483,11 +2429,7 @@ nv162_chipset = { .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, @@ -2521,11 +2463,7 @@ nv164_chipset = { .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, @@ -2560,11 +2498,7 @@ nv166_chipset = { .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, @@ -2600,11 +2534,7 @@ nv167_chipset = { .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, @@ -2638,11 +2568,7 @@ nv168_chipset = { .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, @@ -2938,7 +2864,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; + int ret = -EEXIST, i, j; unsigned chipset; mutex_lock(&nv_devices_mutex); @@ -3248,15 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #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); @@ -3280,6 +3197,15 @@ nvkm_device_ctor(const struct nvkm_device_func *func, _(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; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c index 11937eb78fc9..e5a585ce0b87 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c @@ -335,9 +335,9 @@ nvkm_falcon = { }; int -nvkm_falcon_new_(const struct nvkm_falcon_func *func, - struct nvkm_device *device, int index, bool enable, - u32 addr, struct nvkm_engine **pengine) +nvkm_falcon_new__(const struct nvkm_falcon_func *func, bool old, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, bool enable, u32 addr, + struct nvkm_engine **pengine) { struct nvkm_falcon *falcon; @@ -351,6 +351,5 @@ nvkm_falcon_new_(const struct nvkm_falcon_func *func, falcon->data.size = func->data.size; *pengine = &falcon->engine; - return nvkm_engine_ctor(&nvkm_falcon, device, index, - enable, &falcon->engine); + return nvkm_engine_ctor_(&nvkm_falcon, old, device, type, inst, enable, &falcon->engine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c index 54735a6a01cb..c60af0060ec6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c @@ -83,9 +83,9 @@ gf100_devinit_disable(struct nvkm_devinit *init) if (r022500 & 0x00000008) disable |= (1ULL << NVKM_ENGINE_MSENC); if (r022500 & 0x00000100) - disable |= (1ULL << NVKM_ENGINE_CE0); + nvkm_subdev_disable(device, NVKM_ENGINE_CE, 0); if (r022500 & 0x00000200) - disable |= (1ULL << NVKM_ENGINE_CE1); + nvkm_subdev_disable(device, NVKM_ENGINE_CE, 1); return disable; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c index f5eb88bffe3b..0b567431d087 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c @@ -35,9 +35,9 @@ gm107_devinit_disable(struct nvkm_devinit *init) u64 disable = 0ULL; if (r021c00 & 0x00000001) - disable |= (1ULL << NVKM_ENGINE_CE0); + nvkm_subdev_disable(device, NVKM_ENGINE_CE, 0); if (r021c00 & 0x00000004) - disable |= (1ULL << NVKM_ENGINE_CE2); + nvkm_subdev_disable(device, NVKM_ENGINE_CE, 2); if (r021c04 & 0x00000001) disable |= (1ULL << NVKM_ENGINE_DISP); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c index f93ab872395f..d9189cfaa7d2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c @@ -80,7 +80,7 @@ gt215_devinit_disable(struct nvkm_devinit *init) if (!(r00154c & 0x00000020)) disable |= (1ULL << NVKM_ENGINE_MSVLD); if (!(r00154c & 0x00000200)) - disable |= (1ULL << NVKM_ENGINE_CE0); + nvkm_subdev_disable(device, NVKM_ENGINE_CE, 0); return disable; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c index cb74d433ade2..e7829eeaecc1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c @@ -46,7 +46,7 @@ mcp89_devinit_disable(struct nvkm_devinit *init) if (!(r00154c & 0x00000040)) disable |= (1ULL << NVKM_ENGINE_VIC); if (!(r00154c & 0x00000200)) - disable |= (1ULL << NVKM_ENGINE_CE0); + nvkm_subdev_disable(device, NVKM_ENGINE_CE, 0); return disable; } From 608a29c2cb5a735c7f6446ad5019eed10cdb1cd7 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:29:43 +1000 Subject: [PATCH 53/87] drm/nouveau/ce: make use of nvkm_subdev.inst Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c | 4 +--- drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c index 847b787dbc31..b9cc39565985 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.c @@ -29,9 +29,7 @@ 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 diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c index 55075f3d80cc..27f29eb0494d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c @@ -58,9 +58,9 @@ gk104_ce_intr_launcherr(struct nvkm_engine *ce, const u32 base) 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) { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c index 24130198fa62..a4f08a4472c9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.c @@ -59,9 +59,9 @@ gp100_ce_intr_launcherr(struct nvkm_engine *ce, const u32 base) 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 diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c index 20df04ba7f09..704df0f2d1f1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.c @@ -44,7 +44,7 @@ gt215_ce_intr(struct nvkm_falcon *ce, struct nvkm_fifo_chan *chan) { 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; From 0b26ca68c97d1673fe644092b05cdd64ad612711 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:34:38 +1000 Subject: [PATCH 54/87] drm/nouveau/cipher: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 2 -- drivers/gpu/drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/engine/cipher.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 13 ++++++------- drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c | 4 ++-- 7 files changed, 12 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 902976fba46f..bdf051566fc6 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *cipher; struct nvkm_disp *disp; struct nvkm_dma *dma; struct nvkm_fifo *fifo; @@ -120,7 +119,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*cipher )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*disp )(struct nvkm_device *, int idx, struct nvkm_disp **); int (*dma )(struct nvkm_device *, int idx, struct nvkm_dma **); int (*fifo )(struct nvkm_device *, int idx, struct nvkm_fifo **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 72ba4d5feed9..5bc38542b849 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -27,4 +27,5 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_BSP , struct nvkm_engine , bsp) NVKM_LAYOUT_INST(NVKM_ENGINE_CE , struct nvkm_engine , ce, 9) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_CIPHER , struct nvkm_engine , cipher) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/cipher.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/cipher.h index 66c5c5e27520..9da9176bbbbf 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/cipher.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/cipher.h @@ -2,5 +2,5 @@ #ifndef __NVKM_CIPHER_H__ #define __NVKM_CIPHER_H__ #include -int g84_cipher_new(struct nvkm_device *, int, struct nvkm_engine **); +int g84_cipher_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index c0129aca8e72..e9990235d1f8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_CIPHER ] = "cipher", [NVKM_ENGINE_DISP ] = "disp", [NVKM_ENGINE_DMAOBJ ] = "dma", [NVKM_ENGINE_FIFO ] = "fifo", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.c index 68ffb520531e..be2a7181dc15 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.c @@ -127,8 +127,8 @@ g84_cipher = { }; int -g84_cipher_new(struct nvkm_device *device, int index, +g84_cipher_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_engine_new_(&g84_cipher, device, index, true, pengine); + return nvkm_engine_new_(&g84_cipher, device, type, inst, true, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 14636df82630..159d048fd7a6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -935,7 +935,7 @@ nv84_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, - .cipher = g84_cipher_new, + .cipher = { 0x00000001, g84_cipher_new }, .disp = g84_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -967,7 +967,7 @@ nv86_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, - .cipher = g84_cipher_new, + .cipher = { 0x00000001, g84_cipher_new }, .disp = g84_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -999,7 +999,7 @@ nv92_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, - .cipher = g84_cipher_new, + .cipher = { 0x00000001, g84_cipher_new }, .disp = g84_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -1031,7 +1031,7 @@ nv94_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, - .cipher = g84_cipher_new, + .cipher = { 0x00000001, g84_cipher_new }, .disp = g94_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -1063,7 +1063,7 @@ nv96_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, - .cipher = g84_cipher_new, + .cipher = { 0x00000001, g84_cipher_new }, .disp = g94_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -1127,7 +1127,7 @@ nva0_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, - .cipher = g84_cipher_new, + .cipher = { 0x00000001, g84_cipher_new }, .disp = gt200_disp_new, .dma = nv50_dma_new, .fifo = g84_fifo_new, @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_CIPHER , cipher); _(NVKM_ENGINE_DISP , disp); _(NVKM_ENGINE_DMAOBJ , dma); _(NVKM_ENGINE_FIFO , fifo); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c index cd4a5b356472..a04c3bf1f92d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c @@ -38,7 +38,7 @@ g84_devinit_disable(struct nvkm_devinit *init) disable |= (1ULL << NVKM_ENGINE_MPEG); nvkm_subdev_disable(device, NVKM_ENGINE_VP, 0); nvkm_subdev_disable(device, NVKM_ENGINE_BSP, 0); - disable |= (1ULL << NVKM_ENGINE_CIPHER); + nvkm_subdev_disable(device, NVKM_ENGINE_CIPHER, 0); } if (!(r00154c & 0x00000004)) @@ -46,7 +46,7 @@ g84_devinit_disable(struct nvkm_devinit *init) if (!(r00154c & 0x00000020)) nvkm_subdev_disable(device, NVKM_ENGINE_BSP, 0); if (!(r00154c & 0x00000040)) - disable |= (1ULL << NVKM_ENGINE_CIPHER); + nvkm_subdev_disable(device, NVKM_ENGINE_CIPHER, 0); return disable; } From a7f000ec565022e78ac3d04a4d5c021a7456f7d8 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:35:57 +1000 Subject: [PATCH 55/87] drm/nouveau/disp: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/disp.h | 36 ++-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 167 +++++++++--------- .../gpu/drm/nouveau/nvkm/engine/disp/base.c | 8 +- .../gpu/drm/nouveau/nvkm/engine/disp/g84.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/g94.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/ga102.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gf119.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gk104.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gk110.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gm107.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gm200.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gp100.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gp102.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gt200.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gt215.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/gv100.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/mcp77.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/mcp89.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/nv04.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/disp/nv50.c | 9 +- .../gpu/drm/nouveau/nvkm/engine/disp/nv50.h | 4 +- .../gpu/drm/nouveau/nvkm/engine/disp/priv.h | 8 +- .../gpu/drm/nouveau/nvkm/engine/disp/tu102.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/devinit/g84.c | 2 +- .../gpu/drm/nouveau/nvkm/subdev/devinit/g98.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/gf100.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/gm107.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/gt215.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/mcp89.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/nv50.c | 4 +- .../gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c | 8 +- 34 files changed, 180 insertions(+), 165 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index bdf051566fc6..db77bc29f5d1 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_disp *disp; struct nvkm_dma *dma; struct nvkm_fifo *fifo; struct nvkm_gr *gr; @@ -119,7 +118,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*disp )(struct nvkm_device *, int idx, struct nvkm_disp **); int (*dma )(struct nvkm_device *, int idx, struct nvkm_dma **); int (*fifo )(struct nvkm_device *, int idx, struct nvkm_fifo **); int (*gr )(struct nvkm_device *, int idx, struct nvkm_gr **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 5bc38542b849..da3e4873cf4a 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -28,4 +28,5 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_BSP , struct nvkm_engine , bsp) NVKM_LAYOUT_INST(NVKM_ENGINE_CE , struct nvkm_engine , ce, 9) NVKM_LAYOUT_ONCE(NVKM_ENGINE_CIPHER , struct nvkm_engine , cipher) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_DISP , struct nvkm_disp , disp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h index 17288ea947c1..d08d3337ba0d 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/disp.h @@ -23,22 +23,22 @@ struct nvkm_disp { } client; }; -int nv04_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int nv50_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int g84_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gt200_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int g94_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int mcp77_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gt215_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int mcp89_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gf119_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gk104_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gk110_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gm107_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gm200_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gp100_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gp102_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int gv100_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int tu102_disp_new(struct nvkm_device *, int, struct nvkm_disp **); -int ga102_disp_new(struct nvkm_device *, int, struct nvkm_disp **); +int nv04_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int nv50_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int g84_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gt200_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int g94_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int mcp77_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gt215_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int mcp89_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gf119_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gk104_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gk110_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gm107_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gm200_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gp100_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gp102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int gv100_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int tu102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); +int ga102_disp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_disp **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index e9990235d1f8..264587dbc094 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_DISP ] = "disp", [NVKM_ENGINE_DMAOBJ ] = "dma", [NVKM_ENGINE_FIFO ] = "fifo", [NVKM_ENGINE_GR ] = "gr", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 159d048fd7a6..9a916463919e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -88,7 +88,7 @@ nv4_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv04_fifo_new, .gr = nv04_gr_new, @@ -109,7 +109,7 @@ nv5_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv04_fifo_new, .gr = nv04_gr_new, @@ -131,7 +131,7 @@ nv10_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .gr = nv10_gr_new, }; @@ -151,7 +151,7 @@ nv11_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv10_fifo_new, .gr = nv15_gr_new, @@ -173,7 +173,7 @@ nv15_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv10_fifo_new, .gr = nv15_gr_new, @@ -195,7 +195,7 @@ nv17_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv17_gr_new, @@ -217,7 +217,7 @@ nv18_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv17_gr_new, @@ -239,7 +239,7 @@ nv1a_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv10_fifo_new, .gr = nv15_gr_new, @@ -261,7 +261,7 @@ nv1f_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv17_gr_new, @@ -283,7 +283,7 @@ nv20_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv20_gr_new, @@ -305,7 +305,7 @@ nv25_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv25_gr_new, @@ -327,7 +327,7 @@ nv28_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv25_gr_new, @@ -349,7 +349,7 @@ nv2a_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv2a_gr_new, @@ -371,7 +371,7 @@ nv30_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv30_gr_new, @@ -393,7 +393,7 @@ nv31_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv30_gr_new, @@ -416,7 +416,7 @@ nv34_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv34_gr_new, @@ -439,7 +439,7 @@ nv35_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv35_gr_new, @@ -461,7 +461,7 @@ nv36_chipset = { .mmu = { 0x00000001, nv04_mmu_new }, .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv17_fifo_new, .gr = nv35_gr_new, @@ -486,7 +486,7 @@ nv40_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv40_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv40_gr_new, @@ -512,7 +512,7 @@ nv41_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv40_gr_new, @@ -538,7 +538,7 @@ nv42_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv40_gr_new, @@ -564,7 +564,7 @@ nv43_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv40_gr_new, @@ -590,7 +590,7 @@ nv44_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv44_gr_new, @@ -616,7 +616,7 @@ nv45_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv40_gr_new, @@ -642,7 +642,7 @@ nv46_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv44_gr_new, @@ -668,7 +668,7 @@ nv47_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv40_gr_new, @@ -694,7 +694,7 @@ nv49_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv40_gr_new, @@ -720,7 +720,7 @@ nv4a_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv44_gr_new, @@ -746,7 +746,7 @@ nv4b_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv40_gr_new, @@ -772,7 +772,7 @@ nv4c_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv44_gr_new, @@ -798,7 +798,7 @@ nv4e_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv44_gr_new, @@ -827,7 +827,7 @@ nv50_chipset = { .therm = { 0x00000001, nv50_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv50_disp_new, + .disp = { 0x00000001, nv50_disp_new }, .dma = nv50_dma_new, .fifo = nv50_fifo_new, .gr = nv50_gr_new, @@ -853,7 +853,7 @@ nv63_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv44_gr_new, @@ -879,7 +879,7 @@ nv67_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv44_gr_new, @@ -905,7 +905,7 @@ nv68_chipset = { .therm = { 0x00000001, nv40_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = nv04_disp_new, + .disp = { 0x00000001, nv04_disp_new }, .dma = nv04_dma_new, .fifo = nv40_fifo_new, .gr = nv44_gr_new, @@ -936,7 +936,7 @@ nv84_chipset = { .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, - .disp = g84_disp_new, + .disp = { 0x00000001, g84_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = g84_gr_new, @@ -968,7 +968,7 @@ nv86_chipset = { .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, - .disp = g84_disp_new, + .disp = { 0x00000001, g84_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = g84_gr_new, @@ -1000,7 +1000,7 @@ nv92_chipset = { .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, - .disp = g84_disp_new, + .disp = { 0x00000001, g84_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = g84_gr_new, @@ -1032,7 +1032,7 @@ nv94_chipset = { .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, - .disp = g94_disp_new, + .disp = { 0x00000001, g94_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = g84_gr_new, @@ -1064,7 +1064,7 @@ nv96_chipset = { .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, - .disp = g94_disp_new, + .disp = { 0x00000001, g94_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = g84_gr_new, @@ -1094,7 +1094,7 @@ nv98_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = g94_disp_new, + .disp = { 0x00000001, g94_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = g84_gr_new, @@ -1128,7 +1128,7 @@ nva0_chipset = { .volt = { 0x00000001, nv40_volt_new }, .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, - .disp = gt200_disp_new, + .disp = { 0x00000001, gt200_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = gt200_gr_new, @@ -1160,7 +1160,7 @@ nva3_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .ce = { 0x00000001, gt215_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = gt215_gr_new, @@ -1194,7 +1194,7 @@ nva5_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .ce = { 0x00000001, gt215_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = gt215_gr_new, @@ -1227,7 +1227,7 @@ nva8_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .ce = { 0x00000001, gt215_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = gt215_gr_new, @@ -1258,7 +1258,7 @@ nvaa_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = mcp77_disp_new, + .disp = { 0x00000001, mcp77_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = gt200_gr_new, @@ -1290,7 +1290,7 @@ nvac_chipset = { .therm = { 0x00000001, g84_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, - .disp = mcp77_disp_new, + .disp = { 0x00000001, mcp77_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = mcp79_gr_new, @@ -1324,7 +1324,7 @@ nvaf_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .ce = { 0x00000001, gt215_ce_new }, - .disp = mcp89_disp_new, + .disp = { 0x00000001, mcp89_disp_new }, .dma = nv50_dma_new, .fifo = g84_fifo_new, .gr = mcp89_gr_new, @@ -1360,7 +1360,7 @@ nvc0_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000003, gf100_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = gf100_dma_new, .fifo = gf100_fifo_new, .gr = gf100_gr_new, @@ -1396,7 +1396,7 @@ nvc1_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000001, gf100_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = gf100_dma_new, .fifo = gf100_fifo_new, .gr = gf108_gr_new, @@ -1432,7 +1432,7 @@ nvc3_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000001, gf100_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = gf100_dma_new, .fifo = gf100_fifo_new, .gr = gf104_gr_new, @@ -1468,7 +1468,7 @@ nvc4_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000003, gf100_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = gf100_dma_new, .fifo = gf100_fifo_new, .gr = gf104_gr_new, @@ -1504,7 +1504,7 @@ nvc8_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000003, gf100_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = gf100_dma_new, .fifo = gf100_fifo_new, .gr = gf110_gr_new, @@ -1540,7 +1540,7 @@ nvce_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000003, gf100_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = gf100_dma_new, .fifo = gf100_fifo_new, .gr = gf104_gr_new, @@ -1576,7 +1576,7 @@ nvcf_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000001, gf100_ce_new }, - .disp = gt215_disp_new, + .disp = { 0x00000001, gt215_disp_new }, .dma = gf100_dma_new, .fifo = gf100_fifo_new, .gr = gf104_gr_new, @@ -1611,7 +1611,7 @@ nvd7_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf117_volt_new }, .ce = { 0x00000001, gf100_ce_new }, - .disp = gf119_disp_new, + .disp = { 0x00000001, gf119_disp_new }, .dma = gf119_dma_new, .fifo = gf100_fifo_new, .gr = gf117_gr_new, @@ -1647,7 +1647,7 @@ nvd9_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000001, gf100_ce_new }, - .disp = gf119_disp_new, + .disp = { 0x00000001, gf119_disp_new }, .dma = gf119_dma_new, .fifo = gf100_fifo_new, .gr = gf119_gr_new, @@ -1684,7 +1684,7 @@ nve4_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, - .disp = gk104_disp_new, + .disp = { 0x00000001, gk104_disp_new }, .dma = gf119_dma_new, .fifo = gk104_fifo_new, .gr = gk104_gr_new, @@ -1721,7 +1721,7 @@ nve6_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, - .disp = gk104_disp_new, + .disp = { 0x00000001, gk104_disp_new }, .dma = gf119_dma_new, .fifo = gk104_fifo_new, .gr = gk104_gr_new, @@ -1758,7 +1758,7 @@ nve7_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, - .disp = gk104_disp_new, + .disp = { 0x00000001, gk104_disp_new }, .dma = gf119_dma_new, .fifo = gk104_fifo_new, .gr = gk104_gr_new, @@ -1820,7 +1820,7 @@ nvf0_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, - .disp = gk110_disp_new, + .disp = { 0x00000001, gk110_disp_new }, .dma = gf119_dma_new, .fifo = gk110_fifo_new, .gr = gk110_gr_new, @@ -1856,7 +1856,7 @@ nvf1_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, - .disp = gk110_disp_new, + .disp = { 0x00000001, gk110_disp_new }, .dma = gf119_dma_new, .fifo = gk110_fifo_new, .gr = gk110b_gr_new, @@ -1892,7 +1892,7 @@ nv106_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, - .disp = gk110_disp_new, + .disp = { 0x00000001, gk110_disp_new }, .dma = gf119_dma_new, .fifo = gk208_fifo_new, .gr = gk208_gr_new, @@ -1928,7 +1928,7 @@ nv108_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, - .disp = gk110_disp_new, + .disp = { 0x00000001, gk110_disp_new }, .dma = gf119_dma_new, .fifo = gk208_fifo_new, .gr = gk208_gr_new, @@ -1964,7 +1964,7 @@ nv117_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000005, gm107_ce_new }, - .disp = gm107_disp_new, + .disp = { 0x00000001, gm107_disp_new }, .dma = gf119_dma_new, .fifo = gm107_fifo_new, .gr = gm107_gr_new, @@ -1999,7 +1999,7 @@ nv118_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000005, gm107_ce_new }, - .disp = gm107_disp_new, + .disp = { 0x00000001, gm107_disp_new }, .dma = gf119_dma_new, .fifo = gm107_fifo_new, .gr = gm107_gr_new, @@ -2032,7 +2032,7 @@ nv120_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gm200_ce_new }, - .disp = gm200_disp_new, + .disp = { 0x00000001, gm200_disp_new }, .dma = gf119_dma_new, .fifo = gm200_fifo_new, .gr = gm200_gr_new, @@ -2068,7 +2068,7 @@ nv124_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gm200_ce_new }, - .disp = gm200_disp_new, + .disp = { 0x00000001, gm200_disp_new }, .dma = gf119_dma_new, .fifo = gm200_fifo_new, .gr = gm200_gr_new, @@ -2104,7 +2104,7 @@ nv126_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gm200_ce_new }, - .disp = gm200_disp_new, + .disp = { 0x00000001, gm200_disp_new }, .dma = gf119_dma_new, .fifo = gm200_fifo_new, .gr = gm200_gr_new, @@ -2163,7 +2163,7 @@ nv130_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000003f, gp100_ce_new }, .dma = gf119_dma_new, - .disp = gp100_disp_new, + .disp = { 0x00000001, gp100_disp_new }, .fifo = gp100_fifo_new, .gr = gp100_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2197,7 +2197,7 @@ nv132_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, - .disp = gp102_disp_new, + .disp = { 0x00000001, gp102_disp_new }, .dma = gf119_dma_new, .fifo = gp100_fifo_new, .gr = gp102_gr_new, @@ -2232,7 +2232,7 @@ nv134_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, - .disp = gp102_disp_new, + .disp = { 0x00000001, gp102_disp_new }, .dma = gf119_dma_new, .fifo = gp100_fifo_new, .gr = gp104_gr_new, @@ -2267,7 +2267,7 @@ nv136_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, - .disp = gp102_disp_new, + .disp = { 0x00000001, gp102_disp_new }, .dma = gf119_dma_new, .fifo = gp100_fifo_new, .gr = gp104_gr_new, @@ -2301,7 +2301,7 @@ nv137_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, - .disp = gp102_disp_new, + .disp = { 0x00000001, gp102_disp_new }, .dma = gf119_dma_new, .fifo = gp100_fifo_new, .gr = gp107_gr_new, @@ -2336,7 +2336,7 @@ nv138_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, - .disp = gp102_disp_new, + .disp = { 0x00000001, gp102_disp_new }, .dma = gf119_dma_new, .fifo = gp100_fifo_new, .gr = gp108_gr_new, @@ -2394,7 +2394,7 @@ nv140_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x000001ff, gv100_ce_new }, - .disp = gv100_disp_new, + .disp = { 0x00000001, gv100_disp_new }, .dma = gv100_dma_new, .fifo = gv100_fifo_new, .gr = gv100_gr_new, @@ -2430,7 +2430,7 @@ nv162_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, - .disp = tu102_disp_new, + .disp = { 0x00000001, tu102_disp_new }, .dma = gv100_dma_new, .fifo = tu102_fifo_new, .gr = tu102_gr_new, @@ -2464,7 +2464,7 @@ nv164_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, - .disp = tu102_disp_new, + .disp = { 0x00000001, tu102_disp_new }, .dma = gv100_dma_new, .fifo = tu102_fifo_new, .gr = tu102_gr_new, @@ -2499,7 +2499,7 @@ nv166_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, - .disp = tu102_disp_new, + .disp = { 0x00000001, tu102_disp_new }, .dma = gv100_dma_new, .fifo = tu102_fifo_new, .gr = tu102_gr_new, @@ -2535,7 +2535,7 @@ nv167_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, - .disp = tu102_disp_new, + .disp = { 0x00000001, tu102_disp_new }, .dma = gv100_dma_new, .fifo = tu102_fifo_new, .gr = tu102_gr_new, @@ -2569,7 +2569,7 @@ nv168_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, - .disp = tu102_disp_new, + .disp = { 0x00000001, tu102_disp_new }, .dma = gv100_dma_new, .fifo = tu102_fifo_new, .gr = tu102_gr_new, @@ -2610,7 +2610,7 @@ nv172_chipset = { .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .timer = { 0x00000001, gk20a_timer_new }, - .disp = ga102_disp_new, + .disp = { 0x00000001, ga102_disp_new }, .dma = gv100_dma_new, }; @@ -2629,7 +2629,7 @@ nv174_chipset = { .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .timer = { 0x00000001, gk20a_timer_new }, - .disp = ga102_disp_new, + .disp = { 0x00000001, ga102_disp_new }, .dma = gv100_dma_new, }; @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_DISP , disp); _(NVKM_ENGINE_DMAOBJ , dma); _(NVKM_ENGINE_FIFO , fifo); _(NVKM_ENGINE_GR , gr); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c index 8540e289728c..5daa77755276 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c @@ -473,7 +473,7 @@ nvkm_disp = { int nvkm_disp_ctor(const struct nvkm_disp_func *func, struct nvkm_device *device, - int index, struct nvkm_disp *disp) + enum nvkm_subdev_type type, int inst, struct nvkm_disp *disp) { disp->func = func; INIT_LIST_HEAD(&disp->head); @@ -481,14 +481,14 @@ nvkm_disp_ctor(const struct nvkm_disp_func *func, struct nvkm_device *device, INIT_LIST_HEAD(&disp->outp); INIT_LIST_HEAD(&disp->conn); spin_lock_init(&disp->client.lock); - return nvkm_engine_ctor(&nvkm_disp, device, index, true, &disp->engine); + return nvkm_engine_ctor(&nvkm_disp, device, type, inst, true, &disp->engine); } int nvkm_disp_new_(const struct nvkm_disp_func *func, struct nvkm_device *device, - int index, struct nvkm_disp **pdisp) + enum nvkm_subdev_type type, int inst, struct nvkm_disp **pdisp) { if (!(*pdisp = kzalloc(sizeof(**pdisp), GFP_KERNEL))) return -ENOMEM; - return nvkm_disp_ctor(func, device, index, *pdisp); + return nvkm_disp_ctor(func, device, type, inst, *pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.c index 731f188fc1ee..156bbe8b2de3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.c @@ -41,7 +41,8 @@ g84_disp = { }; int -g84_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +g84_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&g84_disp, device, index, pdisp); + return nv50_disp_new_(&g84_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.c index def54fe1951e..3425b5d3bc72 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.c @@ -41,7 +41,8 @@ g94_disp = { }; int -g94_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +g94_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&g94_disp, device, index, pdisp); + return nv50_disp_new_(&g94_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.c index aa2e5645fe36..68aa52588d92 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.c @@ -40,7 +40,8 @@ ga102_disp = { }; int -ga102_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +ga102_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&ga102_disp, device, index, pdisp); + return nv50_disp_new_(&ga102_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c index e675d9b9d5d7..a6bafe7fea1f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c @@ -266,7 +266,8 @@ gf119_disp = { }; int -gf119_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gf119_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&gf119_disp, device, index, pdisp); + return nv50_disp_new_(&gf119_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.c index 4c3439b1a62d..3b79cf233ac5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.c @@ -41,7 +41,8 @@ gk104_disp = { }; int -gk104_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gk104_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&gk104_disp, device, index, pdisp); + return nv50_disp_new_(&gk104_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.c index bc6f4750c942..988eb12237a6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.c @@ -41,7 +41,8 @@ gk110_disp = { }; int -gk110_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gk110_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&gk110_disp, device, index, pdisp); + return nv50_disp_new_(&gk110_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c index 031cf6b03a76..5d8108feeacd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.c @@ -41,7 +41,8 @@ gm107_disp = { }; int -gm107_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gm107_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&gm107_disp, device, index, pdisp); + return nv50_disp_new_(&gm107_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.c index ec9c33a5162d..f7bb66087476 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.c @@ -41,7 +41,8 @@ gm200_disp = { }; int -gm200_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gm200_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&gm200_disp, device, index, pdisp); + return nv50_disp_new_(&gm200_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.c index 8471de3f3b61..af0ca812a394 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.c @@ -40,7 +40,8 @@ gp100_disp = { }; int -gp100_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gp100_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&gp100_disp, device, index, pdisp); + return nv50_disp_new_(&gp100_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.c index a3779c5046ea..065fea1bdfd1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.c @@ -67,7 +67,8 @@ gp102_disp = { }; int -gp102_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gp102_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&gp102_disp, device, index, pdisp); + return nv50_disp_new_(&gp102_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.c index f80183701f44..22bc269df64a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.c @@ -41,7 +41,8 @@ gt200_disp = { }; int -gt200_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gt200_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(>200_disp, device, index, pdisp); + return nv50_disp_new_(>200_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.c index 7581efc1357e..63a912b174d7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.c @@ -41,7 +41,8 @@ gt215_disp = { }; int -gt215_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gt215_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(>215_disp, device, index, pdisp); + return nv50_disp_new_(>215_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c index c1032527f791..53879d5271cf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c @@ -441,7 +441,8 @@ gv100_disp = { }; int -gv100_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +gv100_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&gv100_disp, device, index, pdisp); + return nv50_disp_new_(&gv100_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.c index cfdce23ab83a..762a59f24bbb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.c @@ -39,7 +39,8 @@ mcp77_disp = { }; int -mcp77_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +mcp77_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&mcp77_disp, device, index, pdisp); + return nv50_disp_new_(&mcp77_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.c index 85d9329cfa0e..e5c58aae15de 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.c @@ -39,7 +39,8 @@ mcp89_disp = { }; int -mcp89_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +mcp89_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&mcp89_disp, device, index, pdisp); + return nv50_disp_new_(&mcp89_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.c index b780ba1a3bc7..a12097db2c2a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.c @@ -64,11 +64,12 @@ nv04_disp = { }; int -nv04_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +nv04_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { int ret, i; - ret = nvkm_disp_new_(&nv04_disp, device, index, pdisp); + ret = nvkm_disp_new_(&nv04_disp, device, type, inst, pdisp); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c index e21556bf2cb1..3f20e49070ce 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c @@ -154,7 +154,7 @@ nv50_disp_ = { int nv50_disp_new_(const struct nv50_disp_func *func, struct nvkm_device *device, - int index, struct nvkm_disp **pdisp) + enum nvkm_subdev_type type, int inst, struct nvkm_disp **pdisp) { struct nv50_disp *disp; int ret; @@ -164,7 +164,7 @@ nv50_disp_new_(const struct nv50_disp_func *func, struct nvkm_device *device, disp->func = func; *pdisp = &disp->base; - ret = nvkm_disp_ctor(&nv50_disp_, device, index, &disp->base); + ret = nvkm_disp_ctor(&nv50_disp_, device, type, inst, &disp->base); if (ret) return ret; @@ -769,7 +769,8 @@ nv50_disp = { }; int -nv50_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +nv50_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&nv50_disp, device, index, pdisp); + return nv50_disp_new_(&nv50_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.h index db31b37752a2..025cacd7c3b0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.h @@ -47,8 +47,8 @@ void nv50_disp_super_2_1(struct nv50_disp *, struct nvkm_head *); void nv50_disp_super_2_2(struct nv50_disp *, struct nvkm_head *); void nv50_disp_super_3_0(struct nv50_disp *, struct nvkm_head *); -int nv50_disp_new_(const struct nv50_disp_func *, struct nvkm_device *, - int index, struct nvkm_disp **); +int nv50_disp_new_(const struct nv50_disp_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_disp **); struct nv50_disp_func { int (*init)(struct nv50_disp *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/priv.h index f815a5342880..ec57d8b6bce9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/priv.h @@ -4,10 +4,10 @@ #include #include "outp.h" -int nvkm_disp_ctor(const struct nvkm_disp_func *, struct nvkm_device *, - int index, struct nvkm_disp *); -int nvkm_disp_new_(const struct nvkm_disp_func *, struct nvkm_device *, - int index, struct nvkm_disp **); +int nvkm_disp_ctor(const struct nvkm_disp_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_disp *); +int nvkm_disp_new_(const struct nvkm_disp_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_disp **); void nvkm_disp_vblank(struct nvkm_disp *, int head); struct nvkm_disp_func { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.c index 4c85d1d4fbd4..f5f8dc8e8f35 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.c @@ -146,7 +146,8 @@ tu102_disp = { }; int -tu102_disp_new(struct nvkm_device *device, int index, struct nvkm_disp **pdisp) +tu102_disp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_disp **pdisp) { - return nv50_disp_new_(&tu102_disp, device, index, pdisp); + return nv50_disp_new_(&tu102_disp, device, type, inst, pdisp); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c index a04c3bf1f92d..09e8a5c743a4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c @@ -42,7 +42,7 @@ g84_devinit_disable(struct nvkm_devinit *init) } if (!(r00154c & 0x00000004)) - disable |= (1ULL << NVKM_ENGINE_DISP); + nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (!(r00154c & 0x00000020)) nvkm_subdev_disable(device, NVKM_ENGINE_BSP, 0); if (!(r00154c & 0x00000040)) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c index ba810cb1f386..710eead0ce63 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c @@ -41,7 +41,7 @@ g98_devinit_disable(struct nvkm_devinit *init) } if (!(r00154c & 0x00000004)) - disable |= (1ULL << NVKM_ENGINE_DISP); + nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (!(r00154c & 0x00000020)) disable |= (1ULL << NVKM_ENGINE_MSVLD); if (!(r00154c & 0x00000040)) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c index c60af0060ec6..023bfbfd3b29 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c @@ -71,7 +71,7 @@ gf100_devinit_disable(struct nvkm_devinit *init) u64 disable = 0ULL; if (r022500 & 0x00000001) - disable |= (1ULL << NVKM_ENGINE_DISP); + nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (r022500 & 0x00000002) { disable |= (1ULL << NVKM_ENGINE_MSPDEC); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c index 0b567431d087..4323732a3cb2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.c @@ -39,7 +39,7 @@ gm107_devinit_disable(struct nvkm_devinit *init) if (r021c00 & 0x00000004) nvkm_subdev_disable(device, NVKM_ENGINE_CE, 2); if (r021c04 & 0x00000001) - disable |= (1ULL << NVKM_ENGINE_DISP); + nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); return disable; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c index d9189cfaa7d2..ecaa6f8f7c5b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c @@ -76,7 +76,7 @@ gt215_devinit_disable(struct nvkm_devinit *init) } if (!(r00154c & 0x00000004)) - disable |= (1ULL << NVKM_ENGINE_DISP); + nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (!(r00154c & 0x00000020)) disable |= (1ULL << NVKM_ENGINE_MSVLD); if (!(r00154c & 0x00000200)) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c index e7829eeaecc1..6f4a49ae7548 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c @@ -40,7 +40,7 @@ mcp89_devinit_disable(struct nvkm_devinit *init) } if (!(r00154c & 0x00000004)) - disable |= (1ULL << NVKM_ENGINE_DISP); + nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (!(r00154c & 0x00000020)) disable |= (1ULL << NVKM_ENGINE_MSVLD); if (!(r00154c & 0x00000040)) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c index 4f25e930339d..088bdae042d3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c @@ -101,8 +101,8 @@ nv50_devinit_preinit(struct nvkm_devinit *base) * missing, assume it's a secondary gpu which requires post */ if (!base->post) { - u64 disable = nvkm_devinit_disable(base); - if (disable & (1ULL << NVKM_ENGINE_DISP)) + nvkm_devinit_disable(base); + if (!device->disp) base->post = true; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c index 34a354599ee2..2b678b60b4d3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c @@ -260,7 +260,7 @@ gk104_ram_calc_gddr5(struct gk104_ram *ram, u32 freq) ram_mask(fuc, 0x10f808, 0x40000000, 0x40000000); ram_block(fuc); - if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP, 0)) + if (ram->base.fb->subdev.device->disp) ram_wr32(fuc, 0x62c000, 0x0f0f0000); /* MR1: turn termination on early, for some reason.. */ @@ -661,7 +661,7 @@ gk104_ram_calc_gddr5(struct gk104_ram *ram, u32 freq) ram_unblock(fuc); - if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP, 0)) + if (ram->base.fb->subdev.device->disp) ram_wr32(fuc, 0x62c000, 0x0f0f0f00); if (next->bios.rammap_11_08_01) @@ -711,7 +711,7 @@ gk104_ram_calc_sddr3(struct gk104_ram *ram, u32 freq) ram_mask(fuc, 0x10f808, 0x40000000, 0x40000000); ram_block(fuc); - if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP, 0)) + if (ram->base.fb->subdev.device->disp) ram_wr32(fuc, 0x62c000, 0x0f0f0000); if (vc == 1 && ram_have(fuc, gpio2E)) { @@ -943,7 +943,7 @@ gk104_ram_calc_sddr3(struct gk104_ram *ram, u32 freq) ram_unblock(fuc); - if (nvkm_device_engine(ram->base.fb->subdev.device, NVKM_ENGINE_DISP, 0)) + if (ram->base.fb->subdev.device->disp) ram_wr32(fuc, 0x62c000, 0x0f0f0f00); if (next->bios.rammap_11_08_01) From 09f409d74d66799c4e7b3ac457ab4e055ae4604e Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 15:21:35 +1000 Subject: [PATCH 56/87] drm/nouveau/dma: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/engine/dma.h | 10 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 173 +++++++++--------- .../gpu/drm/nouveau/nvkm/engine/dma/base.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/dma/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/dma/gf119.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/dma/gv100.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/dma/nv04.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/dma/nv50.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/dma/priv.h | 4 +- 12 files changed, 111 insertions(+), 109 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index db77bc29f5d1..0b56a4d3a98c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_dma *dma; struct nvkm_fifo *fifo; struct nvkm_gr *gr; struct nvkm_engine *ifb; @@ -118,7 +117,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*dma )(struct nvkm_device *, int idx, struct nvkm_dma **); int (*fifo )(struct nvkm_device *, int idx, struct nvkm_fifo **); int (*gr )(struct nvkm_device *, int idx, struct nvkm_gr **); int (*ifb )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index da3e4873cf4a..1e14213221fe 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -29,4 +29,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_BSP , struct nvkm_engine , bsp) NVKM_LAYOUT_INST(NVKM_ENGINE_CE , struct nvkm_engine , ce, 9) NVKM_LAYOUT_ONCE(NVKM_ENGINE_CIPHER , struct nvkm_engine , cipher) NVKM_LAYOUT_ONCE(NVKM_ENGINE_DISP , struct nvkm_disp , disp) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_DMAOBJ , struct nvkm_dma , dma) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/dma.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/dma.h index 2e12cdb6bb93..a003da39fd13 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/dma.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/dma.h @@ -23,9 +23,9 @@ struct nvkm_dma { struct nvkm_dmaobj *nvkm_dmaobj_search(struct nvkm_client *, u64 object); -int nv04_dma_new(struct nvkm_device *, int, struct nvkm_dma **); -int nv50_dma_new(struct nvkm_device *, int, struct nvkm_dma **); -int gf100_dma_new(struct nvkm_device *, int, struct nvkm_dma **); -int gf119_dma_new(struct nvkm_device *, int, struct nvkm_dma **); -int gv100_dma_new(struct nvkm_device *, int, struct nvkm_dma **); +int nv04_dma_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_dma **); +int nv50_dma_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_dma **); +int gf100_dma_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_dma **); +int gf119_dma_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_dma **); +int gv100_dma_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_dma **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 264587dbc094..9cca213abb55 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_DMAOBJ ] = "dma", [NVKM_ENGINE_FIFO ] = "fifo", [NVKM_ENGINE_GR ] = "gr", [NVKM_ENGINE_IFB ] = "ifb", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 9a916463919e..e83cf303c6bc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -89,7 +89,7 @@ nv4_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv04_fifo_new, .gr = nv04_gr_new, .sw = nv04_sw_new, @@ -110,7 +110,7 @@ nv5_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv04_fifo_new, .gr = nv04_gr_new, .sw = nv04_sw_new, @@ -132,7 +132,7 @@ nv10_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .gr = nv10_gr_new, }; @@ -152,7 +152,7 @@ nv11_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv10_fifo_new, .gr = nv15_gr_new, .sw = nv10_sw_new, @@ -174,7 +174,7 @@ nv15_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv10_fifo_new, .gr = nv15_gr_new, .sw = nv10_sw_new, @@ -196,7 +196,7 @@ nv17_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv17_gr_new, .sw = nv10_sw_new, @@ -218,7 +218,7 @@ nv18_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv17_gr_new, .sw = nv10_sw_new, @@ -240,7 +240,7 @@ nv1a_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv10_fifo_new, .gr = nv15_gr_new, .sw = nv10_sw_new, @@ -262,7 +262,7 @@ nv1f_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv17_gr_new, .sw = nv10_sw_new, @@ -284,7 +284,7 @@ nv20_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv20_gr_new, .sw = nv10_sw_new, @@ -306,7 +306,7 @@ nv25_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv25_gr_new, .sw = nv10_sw_new, @@ -328,7 +328,7 @@ nv28_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv25_gr_new, .sw = nv10_sw_new, @@ -350,7 +350,7 @@ nv2a_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv2a_gr_new, .sw = nv10_sw_new, @@ -372,7 +372,7 @@ nv30_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv30_gr_new, .sw = nv10_sw_new, @@ -394,7 +394,7 @@ nv31_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv30_gr_new, .mpeg = nv31_mpeg_new, @@ -417,7 +417,7 @@ nv34_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv34_gr_new, .mpeg = nv31_mpeg_new, @@ -440,7 +440,7 @@ nv35_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv35_gr_new, .sw = nv10_sw_new, @@ -462,7 +462,7 @@ nv36_chipset = { .pci = { 0x00000001, nv04_pci_new }, .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv17_fifo_new, .gr = nv35_gr_new, .mpeg = nv31_mpeg_new, @@ -487,7 +487,7 @@ nv40_chipset = { .timer = { 0x00000001, nv40_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv40_gr_new, .mpeg = nv40_mpeg_new, @@ -513,7 +513,7 @@ nv41_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv40_gr_new, .mpeg = nv40_mpeg_new, @@ -539,7 +539,7 @@ nv42_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv40_gr_new, .mpeg = nv40_mpeg_new, @@ -565,7 +565,7 @@ nv43_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv40_gr_new, .mpeg = nv40_mpeg_new, @@ -591,7 +591,7 @@ nv44_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, @@ -617,7 +617,7 @@ nv45_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv40_gr_new, .mpeg = nv44_mpeg_new, @@ -643,7 +643,7 @@ nv46_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, @@ -669,7 +669,7 @@ nv47_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv40_gr_new, .mpeg = nv44_mpeg_new, @@ -695,7 +695,7 @@ nv49_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv40_gr_new, .mpeg = nv44_mpeg_new, @@ -721,7 +721,7 @@ nv4a_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, @@ -747,7 +747,7 @@ nv4b_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv40_gr_new, .mpeg = nv44_mpeg_new, @@ -773,7 +773,7 @@ nv4c_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, @@ -799,7 +799,7 @@ nv4e_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, @@ -828,7 +828,7 @@ nv50_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv50_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = nv50_fifo_new, .gr = nv50_gr_new, .mpeg = nv50_mpeg_new, @@ -854,7 +854,7 @@ nv63_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, @@ -880,7 +880,7 @@ nv67_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, @@ -906,7 +906,7 @@ nv68_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, - .dma = nv04_dma_new, + .dma = { 0x00000001, nv04_dma_new }, .fifo = nv40_fifo_new, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, @@ -937,7 +937,7 @@ nv84_chipset = { .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g84_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = g84_gr_new, .mpeg = g84_mpeg_new, @@ -969,7 +969,7 @@ nv86_chipset = { .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g84_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = g84_gr_new, .mpeg = g84_mpeg_new, @@ -1001,7 +1001,7 @@ nv92_chipset = { .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g84_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = g84_gr_new, .mpeg = g84_mpeg_new, @@ -1033,7 +1033,7 @@ nv94_chipset = { .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g94_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = g84_gr_new, .mpeg = g84_mpeg_new, @@ -1065,7 +1065,7 @@ nv96_chipset = { .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g94_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = g84_gr_new, .mpeg = g84_mpeg_new, @@ -1095,7 +1095,7 @@ nv98_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, g94_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = g84_gr_new, .mspdec = g98_mspdec_new, @@ -1129,7 +1129,7 @@ nva0_chipset = { .bsp = { 0x00000001, g84_bsp_new }, .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, gt200_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = gt200_gr_new, .mpeg = g84_mpeg_new, @@ -1161,7 +1161,7 @@ nva3_chipset = { .volt = { 0x00000001, nv40_volt_new }, .ce = { 0x00000001, gt215_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = gt215_gr_new, .mpeg = g84_mpeg_new, @@ -1195,7 +1195,7 @@ nva5_chipset = { .volt = { 0x00000001, nv40_volt_new }, .ce = { 0x00000001, gt215_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = gt215_gr_new, .mspdec = gt215_mspdec_new, @@ -1228,7 +1228,7 @@ nva8_chipset = { .volt = { 0x00000001, nv40_volt_new }, .ce = { 0x00000001, gt215_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = gt215_gr_new, .mspdec = gt215_mspdec_new, @@ -1259,7 +1259,7 @@ nvaa_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, mcp77_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = gt200_gr_new, .mspdec = g98_mspdec_new, @@ -1291,7 +1291,7 @@ nvac_chipset = { .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, mcp77_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = mcp79_gr_new, .mspdec = g98_mspdec_new, @@ -1325,7 +1325,7 @@ nvaf_chipset = { .volt = { 0x00000001, nv40_volt_new }, .ce = { 0x00000001, gt215_ce_new }, .disp = { 0x00000001, mcp89_disp_new }, - .dma = nv50_dma_new, + .dma = { 0x00000001, nv50_dma_new }, .fifo = g84_fifo_new, .gr = mcp89_gr_new, .mspdec = gt215_mspdec_new, @@ -1361,7 +1361,7 @@ nvc0_chipset = { .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000003, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = gf100_dma_new, + .dma = { 0x00000001, gf100_dma_new }, .fifo = gf100_fifo_new, .gr = gf100_gr_new, .mspdec = gf100_mspdec_new, @@ -1397,7 +1397,7 @@ nvc1_chipset = { .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = gf100_dma_new, + .dma = { 0x00000001, gf100_dma_new }, .fifo = gf100_fifo_new, .gr = gf108_gr_new, .mspdec = gf100_mspdec_new, @@ -1433,7 +1433,7 @@ nvc3_chipset = { .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = gf100_dma_new, + .dma = { 0x00000001, gf100_dma_new }, .fifo = gf100_fifo_new, .gr = gf104_gr_new, .mspdec = gf100_mspdec_new, @@ -1469,7 +1469,7 @@ nvc4_chipset = { .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000003, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = gf100_dma_new, + .dma = { 0x00000001, gf100_dma_new }, .fifo = gf100_fifo_new, .gr = gf104_gr_new, .mspdec = gf100_mspdec_new, @@ -1505,7 +1505,7 @@ nvc8_chipset = { .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000003, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = gf100_dma_new, + .dma = { 0x00000001, gf100_dma_new }, .fifo = gf100_fifo_new, .gr = gf110_gr_new, .mspdec = gf100_mspdec_new, @@ -1541,7 +1541,7 @@ nvce_chipset = { .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000003, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = gf100_dma_new, + .dma = { 0x00000001, gf100_dma_new }, .fifo = gf100_fifo_new, .gr = gf104_gr_new, .mspdec = gf100_mspdec_new, @@ -1577,7 +1577,7 @@ nvcf_chipset = { .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, - .dma = gf100_dma_new, + .dma = { 0x00000001, gf100_dma_new }, .fifo = gf100_fifo_new, .gr = gf104_gr_new, .mspdec = gf100_mspdec_new, @@ -1612,7 +1612,7 @@ nvd7_chipset = { .volt = { 0x00000001, gf117_volt_new }, .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gf119_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gf100_fifo_new, .gr = gf117_gr_new, .mspdec = gf100_mspdec_new, @@ -1648,7 +1648,7 @@ nvd9_chipset = { .volt = { 0x00000001, gf100_volt_new }, .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gf119_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gf100_fifo_new, .gr = gf119_gr_new, .mspdec = gf100_mspdec_new, @@ -1685,7 +1685,7 @@ nve4_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk104_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gk104_fifo_new, .gr = gk104_gr_new, .mspdec = gk104_mspdec_new, @@ -1722,7 +1722,7 @@ nve6_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk104_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gk104_fifo_new, .gr = gk104_gr_new, .mspdec = gk104_mspdec_new, @@ -1759,7 +1759,7 @@ nve7_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk104_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gk104_fifo_new, .gr = gk104_gr_new, .mspdec = gk104_mspdec_new, @@ -1787,7 +1787,7 @@ nvea_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk20a_volt_new }, .ce = { 0x00000004, gk104_ce_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gk20a_fifo_new, .gr = gk20a_gr_new, .pm = gk104_pm_new, @@ -1821,7 +1821,7 @@ nvf0_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk110_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gk110_fifo_new, .gr = gk110_gr_new, .mspdec = gk104_mspdec_new, @@ -1857,7 +1857,7 @@ nvf1_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk110_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gk110_fifo_new, .gr = gk110b_gr_new, .mspdec = gk104_mspdec_new, @@ -1893,7 +1893,7 @@ nv106_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk110_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gk208_fifo_new, .gr = gk208_gr_new, .mspdec = gk104_mspdec_new, @@ -1929,7 +1929,7 @@ nv108_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk110_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gk208_fifo_new, .gr = gk208_gr_new, .mspdec = gk104_mspdec_new, @@ -1965,7 +1965,7 @@ nv117_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000005, gm107_ce_new }, .disp = { 0x00000001, gm107_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gm107_fifo_new, .gr = gm107_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2000,7 +2000,7 @@ nv118_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000005, gm107_ce_new }, .disp = { 0x00000001, gm107_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gm107_fifo_new, .gr = gm107_gr_new, .sw = gf100_sw_new, @@ -2033,7 +2033,7 @@ nv120_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gm200_ce_new }, .disp = { 0x00000001, gm200_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gm200_fifo_new, .gr = gm200_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2069,7 +2069,7 @@ nv124_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gm200_ce_new }, .disp = { 0x00000001, gm200_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gm200_fifo_new, .gr = gm200_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2105,7 +2105,7 @@ nv126_chipset = { .volt = { 0x00000001, gk104_volt_new }, .ce = { 0x00000007, gm200_ce_new }, .disp = { 0x00000001, gm200_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gm200_fifo_new, .gr = gm200_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2132,7 +2132,7 @@ nv12b_chipset = { .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gm20b_volt_new }, .ce = { 0x00000004, gm200_ce_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gm20b_fifo_new, .gr = gm20b_gr_new, .sw = gf100_sw_new, @@ -2162,7 +2162,7 @@ nv130_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000003f, gp100_ce_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .disp = { 0x00000001, gp100_disp_new }, .fifo = gp100_fifo_new, .gr = gp100_gr_new, @@ -2198,7 +2198,7 @@ nv132_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gp100_fifo_new, .gr = gp102_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2233,7 +2233,7 @@ nv134_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gp100_fifo_new, .gr = gp104_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2268,7 +2268,7 @@ nv136_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gp100_fifo_new, .gr = gp104_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2302,7 +2302,7 @@ nv137_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gp100_fifo_new, .gr = gp107_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2337,7 +2337,7 @@ nv138_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gp100_fifo_new, .gr = gp108_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2363,7 +2363,7 @@ nv13b_chipset = { .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x00000001, gp100_ce_new }, - .dma = gf119_dma_new, + .dma = { 0x00000001, gf119_dma_new }, .fifo = gp10b_fifo_new, .gr = gp10b_gr_new, .sw = gf100_sw_new, @@ -2395,7 +2395,7 @@ nv140_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x000001ff, gv100_ce_new }, .disp = { 0x00000001, gv100_disp_new }, - .dma = gv100_dma_new, + .dma = { 0x00000001, gv100_dma_new }, .fifo = gv100_fifo_new, .gr = gv100_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2431,7 +2431,7 @@ nv162_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, - .dma = gv100_dma_new, + .dma = { 0x00000001, gv100_dma_new }, .fifo = tu102_fifo_new, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2465,7 +2465,7 @@ nv164_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, - .dma = gv100_dma_new, + .dma = { 0x00000001, gv100_dma_new }, .fifo = tu102_fifo_new, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2500,7 +2500,7 @@ nv166_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, - .dma = gv100_dma_new, + .dma = { 0x00000001, gv100_dma_new }, .fifo = tu102_fifo_new, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2536,7 +2536,7 @@ nv167_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, - .dma = gv100_dma_new, + .dma = { 0x00000001, gv100_dma_new }, .fifo = tu102_fifo_new, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2570,7 +2570,7 @@ nv168_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, - .dma = gv100_dma_new, + .dma = { 0x00000001, gv100_dma_new }, .fifo = tu102_fifo_new, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, @@ -2611,7 +2611,7 @@ nv172_chipset = { .pci = { 0x00000001, gp100_pci_new }, .timer = { 0x00000001, gk20a_timer_new }, .disp = { 0x00000001, ga102_disp_new }, - .dma = gv100_dma_new, + .dma = { 0x00000001, gv100_dma_new }, }; static const struct nvkm_device_chip @@ -2630,7 +2630,7 @@ nv174_chipset = { .pci = { 0x00000001, gp100_pci_new }, .timer = { 0x00000001, gk20a_timer_new }, .disp = { 0x00000001, ga102_disp_new }, - .dma = gv100_dma_new, + .dma = { 0x00000001, gv100_dma_new }, }; static int @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_DMAOBJ , dma); _(NVKM_ENGINE_FIFO , fifo); _(NVKM_ENGINE_GR , gr); _(NVKM_ENGINE_IFB , ifb); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c index 11b7b8fd5dda..425cde35f128 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/base.c @@ -104,7 +104,7 @@ nvkm_dma = { int nvkm_dma_new_(const struct nvkm_dma_func *func, struct nvkm_device *device, - int index, struct nvkm_dma **pdma) + enum nvkm_subdev_type type, int inst, struct nvkm_dma **pdma) { struct nvkm_dma *dma; @@ -112,5 +112,5 @@ nvkm_dma_new_(const struct nvkm_dma_func *func, struct nvkm_device *device, return -ENOMEM; dma->func = func; - return nvkm_engine_ctor(&nvkm_dma, device, index, true, &dma->engine); + return nvkm_engine_ctor(&nvkm_dma, device, type, inst, true, &dma->engine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.c index efec5d322179..99a1e07fa204 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.c @@ -30,7 +30,8 @@ gf100_dma = { }; int -gf100_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +gf100_dma_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_dma **pdma) { - return nvkm_dma_new_(&gf100_dma, device, index, pdma); + return nvkm_dma_new_(&gf100_dma, device, type, inst, pdma); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.c index 34c766039aed..fd1d1fc22dc6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.c @@ -30,7 +30,8 @@ gf119_dma = { }; int -gf119_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +gf119_dma_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_dma **pdma) { - return nvkm_dma_new_(&gf119_dma, device, index, pdma); + return nvkm_dma_new_(&gf119_dma, device, type, inst, pdma); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.c index c65a4c2ea93d..a5af0df30663 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.c @@ -28,7 +28,8 @@ gv100_dma = { }; int -gv100_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +gv100_dma_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_dma **pdma) { - return nvkm_dma_new_(&gv100_dma, device, index, pdma); + return nvkm_dma_new_(&gv100_dma, device, type, inst, pdma); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.c index 30747a0ce488..ea5a889f60c2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.c @@ -30,7 +30,8 @@ nv04_dma = { }; int -nv04_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +nv04_dma_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_dma **pdma) { - return nvkm_dma_new_(&nv04_dma, device, index, pdma); + return nvkm_dma_new_(&nv04_dma, device, type, inst, pdma); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.c index 77aca7b71c83..6e8f79660014 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.c @@ -30,7 +30,8 @@ nv50_dma = { }; int -nv50_dma_new(struct nvkm_device *device, int index, struct nvkm_dma **pdma) +nv50_dma_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_dma **pdma) { - return nvkm_dma_new_(&nv50_dma, device, index, pdma); + return nvkm_dma_new_(&nv50_dma, device, type, inst, pdma); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/dma/priv.h index 0c9d9640a59d..d403bedb485a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/priv.h @@ -9,8 +9,8 @@ struct nvkm_dmaobj_func { struct nvkm_gpuobj **); }; -int nvkm_dma_new_(const struct nvkm_dma_func *, struct nvkm_device *, - int index, struct nvkm_dma **); +int nvkm_dma_new_(const struct nvkm_dma_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_dma **); struct nvkm_dma_func { int (*class_new)(struct nvkm_dma *, const struct nvkm_oclass *, From ab0db2bd853d4a61bf440d2846b046a1d11ce027 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 15:29:16 +1000 Subject: [PATCH 57/87] drm/nouveau/fifo: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/fifo.h | 36 ++-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 167 +++++++++--------- .../gpu/drm/nouveau/nvkm/engine/fifo/base.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/fifo/g84.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 9 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.h | 2 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gk110.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gk208.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gk20a.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gm107.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gm200.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gm20b.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gp100.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gp10b.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gv100.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/nv04.c | 10 +- .../gpu/drm/nouveau/nvkm/engine/fifo/nv04.h | 5 +- .../gpu/drm/nouveau/nvkm/engine/fifo/nv10.c | 6 +- .../gpu/drm/nouveau/nvkm/engine/fifo/nv17.c | 6 +- .../gpu/drm/nouveau/nvkm/engine/fifo/nv40.c | 6 +- .../gpu/drm/nouveau/nvkm/engine/fifo/nv50.c | 9 +- .../gpu/drm/nouveau/nvkm/engine/fifo/nv50.h | 4 +- .../gpu/drm/nouveau/nvkm/engine/fifo/priv.h | 4 +- .../gpu/drm/nouveau/nvkm/engine/fifo/tu102.c | 5 +- 28 files changed, 171 insertions(+), 161 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 0b56a4d3a98c..647b899555f1 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_fifo *fifo; struct nvkm_gr *gr; struct nvkm_engine *ifb; struct nvkm_engine *me; @@ -117,7 +116,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*fifo )(struct nvkm_device *, int idx, struct nvkm_fifo **); int (*gr )(struct nvkm_device *, int idx, struct nvkm_gr **); int (*ifb )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*me )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 1e14213221fe..94d25a7b30c4 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -30,4 +30,5 @@ NVKM_LAYOUT_INST(NVKM_ENGINE_CE , struct nvkm_engine , ce, 9) NVKM_LAYOUT_ONCE(NVKM_ENGINE_CIPHER , struct nvkm_engine , cipher) NVKM_LAYOUT_ONCE(NVKM_ENGINE_DISP , struct nvkm_disp , disp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_DMAOBJ , struct nvkm_dma , dma) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_FIFO , struct nvkm_fifo , fifo) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h index 40af8bfb8afa..3b5cf6bf41da 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h @@ -58,22 +58,22 @@ nvkm_fifo_chan_inst(struct nvkm_fifo *, u64 inst, unsigned long *flags); struct nvkm_fifo_chan * nvkm_fifo_chan_chid(struct nvkm_fifo *, int chid, unsigned long *flags); -int nv04_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int nv10_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int nv17_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int nv40_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int nv50_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int g84_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gf100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gk104_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gk110_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gk208_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gk20a_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gm107_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gm200_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gm20b_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gp100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gp10b_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int gv100_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); -int tu102_fifo_new(struct nvkm_device *, int, struct nvkm_fifo **); +int nv04_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int nv10_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int nv17_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int nv40_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int nv50_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int g84_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gf100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gk104_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gk110_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gk208_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gk20a_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gm107_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gm200_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gm20b_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gp100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gp10b_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int gv100_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); +int tu102_fifo_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_fifo **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 9cca213abb55..9f84c5413ffd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_FIFO ] = "fifo", [NVKM_ENGINE_GR ] = "gr", [NVKM_ENGINE_IFB ] = "ifb", [NVKM_ENGINE_ME ] = "me", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index e83cf303c6bc..b87c56800cfe 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -90,7 +90,7 @@ nv4_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv04_fifo_new, + .fifo = { 0x00000001, nv04_fifo_new }, .gr = nv04_gr_new, .sw = nv04_sw_new, }; @@ -111,7 +111,7 @@ nv5_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv04_fifo_new, + .fifo = { 0x00000001, nv04_fifo_new }, .gr = nv04_gr_new, .sw = nv04_sw_new, }; @@ -153,7 +153,7 @@ nv11_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv10_fifo_new, + .fifo = { 0x00000001, nv10_fifo_new }, .gr = nv15_gr_new, .sw = nv10_sw_new, }; @@ -175,7 +175,7 @@ nv15_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv10_fifo_new, + .fifo = { 0x00000001, nv10_fifo_new }, .gr = nv15_gr_new, .sw = nv10_sw_new, }; @@ -197,7 +197,7 @@ nv17_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv17_gr_new, .sw = nv10_sw_new, }; @@ -219,7 +219,7 @@ nv18_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv17_gr_new, .sw = nv10_sw_new, }; @@ -241,7 +241,7 @@ nv1a_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv10_fifo_new, + .fifo = { 0x00000001, nv10_fifo_new }, .gr = nv15_gr_new, .sw = nv10_sw_new, }; @@ -263,7 +263,7 @@ nv1f_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv17_gr_new, .sw = nv10_sw_new, }; @@ -285,7 +285,7 @@ nv20_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv20_gr_new, .sw = nv10_sw_new, }; @@ -307,7 +307,7 @@ nv25_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv25_gr_new, .sw = nv10_sw_new, }; @@ -329,7 +329,7 @@ nv28_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv25_gr_new, .sw = nv10_sw_new, }; @@ -351,7 +351,7 @@ nv2a_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv2a_gr_new, .sw = nv10_sw_new, }; @@ -373,7 +373,7 @@ nv30_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv30_gr_new, .sw = nv10_sw_new, }; @@ -395,7 +395,7 @@ nv31_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv30_gr_new, .mpeg = nv31_mpeg_new, .sw = nv10_sw_new, @@ -418,7 +418,7 @@ nv34_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv34_gr_new, .mpeg = nv31_mpeg_new, .sw = nv10_sw_new, @@ -441,7 +441,7 @@ nv35_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv35_gr_new, .sw = nv10_sw_new, }; @@ -463,7 +463,7 @@ nv36_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv17_fifo_new, + .fifo = { 0x00000001, nv17_fifo_new }, .gr = nv35_gr_new, .mpeg = nv31_mpeg_new, .sw = nv10_sw_new, @@ -488,7 +488,7 @@ nv40_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv40_gr_new, .mpeg = nv40_mpeg_new, .pm = nv40_pm_new, @@ -514,7 +514,7 @@ nv41_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv40_gr_new, .mpeg = nv40_mpeg_new, .pm = nv40_pm_new, @@ -540,7 +540,7 @@ nv42_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv40_gr_new, .mpeg = nv40_mpeg_new, .pm = nv40_pm_new, @@ -566,7 +566,7 @@ nv43_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv40_gr_new, .mpeg = nv40_mpeg_new, .pm = nv40_pm_new, @@ -592,7 +592,7 @@ nv44_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -618,7 +618,7 @@ nv45_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv40_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -644,7 +644,7 @@ nv46_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -670,7 +670,7 @@ nv47_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv40_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -696,7 +696,7 @@ nv49_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv40_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -722,7 +722,7 @@ nv4a_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -748,7 +748,7 @@ nv4b_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv40_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -774,7 +774,7 @@ nv4c_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -800,7 +800,7 @@ nv4e_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -829,7 +829,7 @@ nv50_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv50_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = nv50_fifo_new, + .fifo = { 0x00000001, nv50_fifo_new }, .gr = nv50_gr_new, .mpeg = nv50_mpeg_new, .pm = nv50_pm_new, @@ -855,7 +855,7 @@ nv63_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -881,7 +881,7 @@ nv67_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -907,7 +907,7 @@ nv68_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .fifo = nv40_fifo_new, + .fifo = { 0x00000001, nv40_fifo_new }, .gr = nv44_gr_new, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, @@ -938,7 +938,7 @@ nv84_chipset = { .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g84_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = g84_gr_new, .mpeg = g84_mpeg_new, .pm = g84_pm_new, @@ -970,7 +970,7 @@ nv86_chipset = { .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g84_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = g84_gr_new, .mpeg = g84_mpeg_new, .pm = g84_pm_new, @@ -1002,7 +1002,7 @@ nv92_chipset = { .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g84_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = g84_gr_new, .mpeg = g84_mpeg_new, .pm = g84_pm_new, @@ -1034,7 +1034,7 @@ nv94_chipset = { .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g94_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = g84_gr_new, .mpeg = g84_mpeg_new, .pm = g84_pm_new, @@ -1066,7 +1066,7 @@ nv96_chipset = { .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, g94_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = g84_gr_new, .mpeg = g84_mpeg_new, .pm = g84_pm_new, @@ -1096,7 +1096,7 @@ nv98_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, g94_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = g84_gr_new, .mspdec = g98_mspdec_new, .msppp = g98_msppp_new, @@ -1130,7 +1130,7 @@ nva0_chipset = { .cipher = { 0x00000001, g84_cipher_new }, .disp = { 0x00000001, gt200_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = gt200_gr_new, .mpeg = g84_mpeg_new, .pm = gt200_pm_new, @@ -1162,7 +1162,7 @@ nva3_chipset = { .ce = { 0x00000001, gt215_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = gt215_gr_new, .mpeg = g84_mpeg_new, .mspdec = gt215_mspdec_new, @@ -1196,7 +1196,7 @@ nva5_chipset = { .ce = { 0x00000001, gt215_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = gt215_gr_new, .mspdec = gt215_mspdec_new, .msppp = gt215_msppp_new, @@ -1229,7 +1229,7 @@ nva8_chipset = { .ce = { 0x00000001, gt215_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = gt215_gr_new, .mspdec = gt215_mspdec_new, .msppp = gt215_msppp_new, @@ -1260,7 +1260,7 @@ nvaa_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, mcp77_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = gt200_gr_new, .mspdec = g98_mspdec_new, .msppp = g98_msppp_new, @@ -1292,7 +1292,7 @@ nvac_chipset = { .volt = { 0x00000001, nv40_volt_new }, .disp = { 0x00000001, mcp77_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = mcp79_gr_new, .mspdec = g98_mspdec_new, .msppp = g98_msppp_new, @@ -1326,7 +1326,7 @@ nvaf_chipset = { .ce = { 0x00000001, gt215_ce_new }, .disp = { 0x00000001, mcp89_disp_new }, .dma = { 0x00000001, nv50_dma_new }, - .fifo = g84_fifo_new, + .fifo = { 0x00000001, g84_fifo_new }, .gr = mcp89_gr_new, .mspdec = gt215_mspdec_new, .msppp = gt215_msppp_new, @@ -1362,7 +1362,7 @@ nvc0_chipset = { .ce = { 0x00000003, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf100_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1398,7 +1398,7 @@ nvc1_chipset = { .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf108_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1434,7 +1434,7 @@ nvc3_chipset = { .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf104_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1470,7 +1470,7 @@ nvc4_chipset = { .ce = { 0x00000003, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf104_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1506,7 +1506,7 @@ nvc8_chipset = { .ce = { 0x00000003, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf110_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1542,7 +1542,7 @@ nvce_chipset = { .ce = { 0x00000003, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf104_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1578,7 +1578,7 @@ nvcf_chipset = { .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf104_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1613,7 +1613,7 @@ nvd7_chipset = { .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gf119_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf117_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1649,7 +1649,7 @@ nvd9_chipset = { .ce = { 0x00000001, gf100_ce_new }, .disp = { 0x00000001, gf119_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gf100_fifo_new, + .fifo = { 0x00000001, gf100_fifo_new }, .gr = gf119_gr_new, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, @@ -1686,7 +1686,7 @@ nve4_chipset = { .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk104_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gk104_fifo_new, + .fifo = { 0x00000001, gk104_fifo_new }, .gr = gk104_gr_new, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, @@ -1723,7 +1723,7 @@ nve6_chipset = { .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk104_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gk104_fifo_new, + .fifo = { 0x00000001, gk104_fifo_new }, .gr = gk104_gr_new, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, @@ -1760,7 +1760,7 @@ nve7_chipset = { .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk104_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gk104_fifo_new, + .fifo = { 0x00000001, gk104_fifo_new }, .gr = gk104_gr_new, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, @@ -1788,7 +1788,7 @@ nvea_chipset = { .volt = { 0x00000001, gk20a_volt_new }, .ce = { 0x00000004, gk104_ce_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gk20a_fifo_new, + .fifo = { 0x00000001, gk20a_fifo_new }, .gr = gk20a_gr_new, .pm = gk104_pm_new, .sw = gf100_sw_new, @@ -1822,7 +1822,7 @@ nvf0_chipset = { .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk110_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gk110_fifo_new, + .fifo = { 0x00000001, gk110_fifo_new }, .gr = gk110_gr_new, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, @@ -1858,7 +1858,7 @@ nvf1_chipset = { .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk110_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gk110_fifo_new, + .fifo = { 0x00000001, gk110_fifo_new }, .gr = gk110b_gr_new, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, @@ -1894,7 +1894,7 @@ nv106_chipset = { .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk110_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gk208_fifo_new, + .fifo = { 0x00000001, gk208_fifo_new }, .gr = gk208_gr_new, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, @@ -1930,7 +1930,7 @@ nv108_chipset = { .ce = { 0x00000007, gk104_ce_new }, .disp = { 0x00000001, gk110_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gk208_fifo_new, + .fifo = { 0x00000001, gk208_fifo_new }, .gr = gk208_gr_new, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, @@ -1966,7 +1966,7 @@ nv117_chipset = { .ce = { 0x00000005, gm107_ce_new }, .disp = { 0x00000001, gm107_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gm107_fifo_new, + .fifo = { 0x00000001, gm107_fifo_new }, .gr = gm107_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2001,7 +2001,7 @@ nv118_chipset = { .ce = { 0x00000005, gm107_ce_new }, .disp = { 0x00000001, gm107_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gm107_fifo_new, + .fifo = { 0x00000001, gm107_fifo_new }, .gr = gm107_gr_new, .sw = gf100_sw_new, }; @@ -2034,7 +2034,7 @@ nv120_chipset = { .ce = { 0x00000007, gm200_ce_new }, .disp = { 0x00000001, gm200_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gm200_fifo_new, + .fifo = { 0x00000001, gm200_fifo_new }, .gr = gm200_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2070,7 +2070,7 @@ nv124_chipset = { .ce = { 0x00000007, gm200_ce_new }, .disp = { 0x00000001, gm200_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gm200_fifo_new, + .fifo = { 0x00000001, gm200_fifo_new }, .gr = gm200_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2106,7 +2106,7 @@ nv126_chipset = { .ce = { 0x00000007, gm200_ce_new }, .disp = { 0x00000001, gm200_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gm200_fifo_new, + .fifo = { 0x00000001, gm200_fifo_new }, .gr = gm200_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2133,7 +2133,7 @@ nv12b_chipset = { .volt = { 0x00000001, gm20b_volt_new }, .ce = { 0x00000004, gm200_ce_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gm20b_fifo_new, + .fifo = { 0x00000001, gm20b_fifo_new }, .gr = gm20b_gr_new, .sw = gf100_sw_new, }; @@ -2164,7 +2164,7 @@ nv130_chipset = { .ce = { 0x0000003f, gp100_ce_new }, .dma = { 0x00000001, gf119_dma_new }, .disp = { 0x00000001, gp100_disp_new }, - .fifo = gp100_fifo_new, + .fifo = { 0x00000001, gp100_fifo_new }, .gr = gp100_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2199,7 +2199,7 @@ nv132_chipset = { .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gp100_fifo_new, + .fifo = { 0x00000001, gp100_fifo_new }, .gr = gp102_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2234,7 +2234,7 @@ nv134_chipset = { .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gp100_fifo_new, + .fifo = { 0x00000001, gp100_fifo_new }, .gr = gp104_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2269,7 +2269,7 @@ nv136_chipset = { .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gp100_fifo_new, + .fifo = { 0x00000001, gp100_fifo_new }, .gr = gp104_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2303,7 +2303,7 @@ nv137_chipset = { .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gp100_fifo_new, + .fifo = { 0x00000001, gp100_fifo_new }, .gr = gp107_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2338,7 +2338,7 @@ nv138_chipset = { .ce = { 0x0000000f, gp102_ce_new }, .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gp100_fifo_new, + .fifo = { 0x00000001, gp100_fifo_new }, .gr = gp108_gr_new, .nvdec[0] = gm107_nvdec_new, .sec2 = gp108_sec2_new, @@ -2364,7 +2364,7 @@ nv13b_chipset = { .top = { 0x00000001, gk104_top_new }, .ce = { 0x00000001, gp100_ce_new }, .dma = { 0x00000001, gf119_dma_new }, - .fifo = gp10b_fifo_new, + .fifo = { 0x00000001, gp10b_fifo_new }, .gr = gp10b_gr_new, .sw = gf100_sw_new, }; @@ -2396,7 +2396,7 @@ nv140_chipset = { .ce = { 0x000001ff, gv100_ce_new }, .disp = { 0x00000001, gv100_disp_new }, .dma = { 0x00000001, gv100_dma_new }, - .fifo = gv100_fifo_new, + .fifo = { 0x00000001, gv100_fifo_new }, .gr = gv100_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2432,7 +2432,7 @@ nv162_chipset = { .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, - .fifo = tu102_fifo_new, + .fifo = { 0x00000001, tu102_fifo_new }, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2466,7 +2466,7 @@ nv164_chipset = { .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, - .fifo = tu102_fifo_new, + .fifo = { 0x00000001, tu102_fifo_new }, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, .nvdec[1] = gm107_nvdec_new, @@ -2501,7 +2501,7 @@ nv166_chipset = { .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, - .fifo = tu102_fifo_new, + .fifo = { 0x00000001, tu102_fifo_new }, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, .nvdec[1] = gm107_nvdec_new, @@ -2537,7 +2537,7 @@ nv167_chipset = { .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, - .fifo = tu102_fifo_new, + .fifo = { 0x00000001, tu102_fifo_new }, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2571,7 +2571,7 @@ nv168_chipset = { .ce = { 0x0000001f, tu102_ce_new }, .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, - .fifo = tu102_fifo_new, + .fifo = { 0x00000001, tu102_fifo_new }, .gr = tu102_gr_new, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_FIFO , fifo); _(NVKM_ENGINE_GR , gr); _(NVKM_ENGINE_IFB , ifb); _(NVKM_ENGINE_ME , me); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c index 8ab4937ea193..d4061ef90ec8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c @@ -352,7 +352,7 @@ nvkm_fifo = { int nvkm_fifo_ctor(const struct nvkm_fifo_func *func, struct nvkm_device *device, - int index, int nr, struct nvkm_fifo *fifo) + enum nvkm_subdev_type type, int inst, int nr, struct nvkm_fifo *fifo) { int ret; @@ -367,7 +367,7 @@ nvkm_fifo_ctor(const struct nvkm_fifo_func *func, struct nvkm_device *device, fifo->nr = nr; bitmap_clear(fifo->mask, 0, fifo->nr); - ret = nvkm_engine_ctor(&nvkm_fifo, device, index, true, &fifo->engine); + ret = nvkm_engine_ctor(&nvkm_fifo, device, type, inst, true, &fifo->engine); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c index ff7b529764fe..c45779b1d50a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c @@ -56,7 +56,8 @@ g84_fifo = { }; int -g84_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +g84_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return nv50_fifo_new_(&g84_fifo, device, index, pfifo); + return nv50_fifo_new_(&g84_fifo, device, type, inst, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index 4811cd30f0a3..3f732b0a8973 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c @@ -682,7 +682,8 @@ gf100_fifo = { }; int -gf100_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gf100_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { struct gf100_fifo *fifo; @@ -692,5 +693,5 @@ gf100_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) INIT_WORK(&fifo->recover.work, gf100_fifo_recover_work); *pfifo = &fifo->base; - return nvkm_fifo_ctor(&gf100_fifo, device, index, 128, &fifo->base); + return nvkm_fifo_ctor(&gf100_fifo, device, type, inst, 128, &fifo->base); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 25425f731103..80cd2ea6fe55 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -1029,7 +1029,7 @@ gk104_fifo_ = { int gk104_fifo_new_(const struct gk104_fifo_func *func, struct nvkm_device *device, - int index, int nr, struct nvkm_fifo **pfifo) + enum nvkm_subdev_type type, int inst, int nr, struct nvkm_fifo **pfifo) { struct gk104_fifo *fifo; @@ -1039,7 +1039,7 @@ gk104_fifo_new_(const struct gk104_fifo_func *func, struct nvkm_device *device, INIT_WORK(&fifo->recover.work, gk104_fifo_recover_work); *pfifo = &fifo->base; - return nvkm_fifo_ctor(&gk104_fifo_, device, index, nr, &fifo->base); + return nvkm_fifo_ctor(&gk104_fifo_, device, type, inst, nr, &fifo->base); } const struct nvkm_enum @@ -1178,7 +1178,8 @@ gk104_fifo = { }; int -gk104_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gk104_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gk104_fifo, device, index, 4096, pfifo); + return gk104_fifo_new_(&gk104_fifo, device, type, inst, 4096, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h index 4398b340e514..3418ade2146f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h @@ -99,7 +99,7 @@ struct gk104_fifo_engine_status { } prev, next, *chan; }; -int gk104_fifo_new_(const struct gk104_fifo_func *, struct nvkm_device *, +int gk104_fifo_new_(const struct gk104_fifo_func *, struct nvkm_device *, enum nvkm_subdev_type, int index, int nr, struct nvkm_fifo **); void gk104_fifo_runlist_insert(struct gk104_fifo *, struct gk104_fifo_chan *); void gk104_fifo_runlist_remove(struct gk104_fifo *, struct gk104_fifo_chan *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.c index f820969e4405..915278c7e012 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.c @@ -60,7 +60,8 @@ gk110_fifo = { }; int -gk110_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gk110_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gk110_fifo, device, index, 4096, pfifo); + return gk104_fifo_new_(&gk110_fifo, device, type, inst, 4096, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.c index 2f54787b5fd0..cb703693de52 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.c @@ -57,7 +57,8 @@ gk208_fifo = { }; int -gk208_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gk208_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gk208_fifo, device, index, 1024, pfifo); + return gk104_fifo_new_(&gk208_fifo, device, type, inst, 1024, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk20a.c index a814c4e0ed3e..6e35cf44c640 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk20a.c @@ -38,7 +38,8 @@ gk20a_fifo = { }; int -gk20a_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gk20a_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gk20a_fifo, device, index, 128, pfifo); + return gk104_fifo_new_(&gk20a_fifo, device, type, inst, 128, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm107.c index c2a2e4572f6c..7af6e687d474 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm107.c @@ -106,7 +106,8 @@ gm107_fifo = { }; int -gm107_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gm107_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gm107_fifo, device, index, 2048, pfifo); + return gk104_fifo_new_(&gm107_fifo, device, type, inst, 2048, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm200.c index b8cfe3b28c4f..573658cb6c73 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm200.c @@ -54,7 +54,8 @@ gm200_fifo = { }; int -gm200_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gm200_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gm200_fifo, device, index, 4096, pfifo); + return gk104_fifo_new_(&gm200_fifo, device, type, inst, 4096, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm20b.c index 70b4feebc1fa..556c97e54f14 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm20b.c @@ -38,7 +38,8 @@ gm20b_fifo = { }; int -gm20b_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gm20b_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gm20b_fifo, device, index, 512, pfifo); + return gk104_fifo_new_(&gm20b_fifo, device, type, inst, 512, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp100.c index 2c7a0176b3c8..6b46b6b65b87 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp100.c @@ -91,7 +91,8 @@ gp100_fifo = { }; int -gp100_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gp100_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gp100_fifo, device, index, 4096, pfifo); + return gk104_fifo_new_(&gp100_fifo, device, type, inst, 4096, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp10b.c index 8c65ad4feedb..7a5929cb4d29 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp10b.c @@ -39,7 +39,8 @@ gp10b_fifo = { }; int -gp10b_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gp10b_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gp10b_fifo, device, index, 512, pfifo); + return gk104_fifo_new_(&gp10b_fifo, device, type, inst, 512, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gv100.c index 6ee1bb32a071..70e16a91ac12 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gv100.c @@ -301,7 +301,8 @@ gv100_fifo = { }; int -gv100_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +gv100_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return gk104_fifo_new_(&gv100_fifo, device, index, 4096, pfifo); + return gk104_fifo_new_(&gv100_fifo, device, type, inst, 4096, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c index c1d1b1aa5bc6..d30da0f45675 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c @@ -326,7 +326,7 @@ nv04_fifo_init(struct nvkm_fifo *base) int nv04_fifo_new_(const struct nvkm_fifo_func *func, struct nvkm_device *device, - int index, int nr, const struct nv04_fifo_ramfc *ramfc, + enum nvkm_subdev_type type, int inst, int nr, const struct nv04_fifo_ramfc *ramfc, struct nvkm_fifo **pfifo) { struct nv04_fifo *fifo; @@ -337,7 +337,7 @@ nv04_fifo_new_(const struct nvkm_fifo_func *func, struct nvkm_device *device, fifo->ramfc = ramfc; *pfifo = &fifo->base; - ret = nvkm_fifo_ctor(func, device, index, nr, &fifo->base); + ret = nvkm_fifo_ctor(func, device, type, inst, nr, &fifo->base); if (ret) return ret; @@ -358,8 +358,8 @@ nv04_fifo = { }; int -nv04_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +nv04_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return nv04_fifo_new_(&nv04_fifo, device, index, 16, - nv04_fifo_ramfc, pfifo); + return nv04_fifo_new_(&nv04_fifo, device, type, inst, 16, nv04_fifo_ramfc, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.h index e5ecceee77ae..3f23bcde4a54 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.h @@ -17,8 +17,7 @@ struct nv04_fifo { const struct nv04_fifo_ramfc *ramfc; }; -int nv04_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *, - int index, int nr, const struct nv04_fifo_ramfc *, - struct nvkm_fifo **); +int nv04_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + int nr, const struct nv04_fifo_ramfc *, struct nvkm_fifo **); void nv04_fifo_init(struct nvkm_fifo *); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c index f9a87deb2b3d..c464cc0fc292 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c @@ -52,8 +52,8 @@ nv10_fifo = { }; int -nv10_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +nv10_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return nv04_fifo_new_(&nv10_fifo, device, index, 32, - nv10_fifo_ramfc, pfifo); + return nv04_fifo_new_(&nv10_fifo, device, type, inst, 32, nv10_fifo_ramfc, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c index f6d383a21222..ac43b16b94a4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c @@ -90,8 +90,8 @@ nv17_fifo = { }; int -nv17_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +nv17_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return nv04_fifo_new_(&nv17_fifo, device, index, 32, - nv17_fifo_ramfc, pfifo); + return nv04_fifo_new_(&nv17_fifo, device, type, inst, 32, nv17_fifo_ramfc, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c index 2d61fd832ddb..0f6710c528a5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c @@ -121,8 +121,8 @@ nv40_fifo = { }; int -nv40_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +nv40_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return nv04_fifo_new_(&nv40_fifo, device, index, 32, - nv40_fifo_ramfc, pfifo); + return nv04_fifo_new_(&nv40_fifo, device, type, inst, 32, nv40_fifo_ramfc, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c index c42a181adc1c..59b4ece3f71e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c @@ -107,7 +107,7 @@ nv50_fifo_dtor(struct nvkm_fifo *base) int nv50_fifo_new_(const struct nvkm_fifo_func *func, struct nvkm_device *device, - int index, struct nvkm_fifo **pfifo) + enum nvkm_subdev_type type, int inst, struct nvkm_fifo **pfifo) { struct nv50_fifo *fifo; int ret; @@ -116,7 +116,7 @@ nv50_fifo_new_(const struct nvkm_fifo_func *func, struct nvkm_device *device, return -ENOMEM; *pfifo = &fifo->base; - ret = nvkm_fifo_ctor(func, device, index, 128, &fifo->base); + ret = nvkm_fifo_ctor(func, device, type, inst, 128, &fifo->base); if (ret) return ret; @@ -141,7 +141,8 @@ nv50_fifo = { }; int -nv50_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +nv50_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { - return nv50_fifo_new_(&nv50_fifo, device, index, pfifo); + return nv50_fifo_new_(&nv50_fifo, device, type, inst, pfifo); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.h index 87d30b6bd2ea..0111e7e5a4e3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.h @@ -10,8 +10,8 @@ struct nv50_fifo { int cur_runlist; }; -int nv50_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *, - int index, struct nvkm_fifo **); +int nv50_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_fifo **); void *nv50_fifo_dtor(struct nvkm_fifo *); int nv50_fifo_oneinit(struct nvkm_fifo *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h index 0ef8baab513e..da548bab0f2f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h @@ -4,8 +4,8 @@ #define nvkm_fifo(p) container_of((p), struct nvkm_fifo, engine) #include -int nvkm_fifo_ctor(const struct nvkm_fifo_func *, struct nvkm_device *, - int index, int nr, struct nvkm_fifo *); +int nvkm_fifo_ctor(const struct nvkm_fifo_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + int nr, struct nvkm_fifo *); void nvkm_fifo_uevent(struct nvkm_fifo *); void nvkm_fifo_cevent(struct nvkm_fifo *); void nvkm_fifo_kevent(struct nvkm_fifo *, int chid); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c index f2e91f9c06e1..c60709106d61 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c @@ -464,7 +464,8 @@ tu102_fifo_ = { }; int -tu102_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) +tu102_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_fifo **pfifo) { struct gk104_fifo *fifo; @@ -474,5 +475,5 @@ tu102_fifo_new(struct nvkm_device *device, int index, struct nvkm_fifo **pfifo) INIT_WORK(&fifo->recover.work, tu102_fifo_recover_work); *pfifo = &fifo->base; - return nvkm_fifo_ctor(&tu102_fifo_, device, index, 4096, &fifo->base); + return nvkm_fifo_ctor(&tu102_fifo_, device, type, inst, 4096, &fifo->base); } From 64f7c698bea9cf84cb224fd4352964c2af7252d9 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 18:41:07 +1000 Subject: [PATCH 58/87] drm/nouveau/fifo: add engine_id hook Will be used by common code in subsequent commits to replace arrays indexed by subdev index. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/nvkm/engine/fifo/chang84.c | 22 +--------- .../drm/nouveau/nvkm/engine/fifo/changf100.h | 9 +++- .../drm/nouveau/nvkm/engine/fifo/changk104.h | 3 +- .../drm/nouveau/nvkm/engine/fifo/channv04.h | 4 ++ .../drm/nouveau/nvkm/engine/fifo/channv50.h | 19 +++++++++ .../gpu/drm/nouveau/nvkm/engine/fifo/g84.c | 23 +++++++++++ .../gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | 41 ++++++++++--------- .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 27 +++++++++--- .../gpu/drm/nouveau/nvkm/engine/fifo/nv04.c | 15 +++++++ .../gpu/drm/nouveau/nvkm/engine/fifo/nv10.c | 1 + .../gpu/drm/nouveau/nvkm/engine/fifo/nv17.c | 1 + .../gpu/drm/nouveau/nvkm/engine/fifo/nv40.c | 1 + .../gpu/drm/nouveau/nvkm/engine/fifo/nv50.c | 1 + .../gpu/drm/nouveau/nvkm/engine/fifo/priv.h | 4 ++ .../gpu/drm/nouveau/nvkm/engine/fifo/tu102.c | 1 + 15 files changed, 125 insertions(+), 47 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c index a5c998fe4485..d440e60ef977 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c @@ -44,26 +44,6 @@ g84_fifo_chan_ntfy(struct nvkm_fifo_chan *chan, u32 type, return -EINVAL; } -static int -g84_fifo_chan_engine(struct nvkm_engine *engine) -{ - switch (engine->subdev.index) { - case NVKM_ENGINE_GR : return 0; - case NVKM_ENGINE_MPEG : - case NVKM_ENGINE_MSPPP : return 1; - case NVKM_ENGINE_CE0 : return 2; - case NVKM_ENGINE_VP : - case NVKM_ENGINE_MSPDEC: return 3; - case NVKM_ENGINE_CIPHER: - case NVKM_ENGINE_SEC : return 4; - case NVKM_ENGINE_BSP : - case NVKM_ENGINE_MSVLD : return 5; - default: - WARN_ON(1); - return 0; - } -} - static int g84_fifo_chan_engine_addr(struct nvkm_engine *engine) { @@ -102,7 +82,7 @@ g84_fifo_chan_engine_fini(struct nvkm_fifo_chan *base, if (offset < 0) return 0; - engn = g84_fifo_chan_engine(engine); + engn = fifo->base.func->engine_id(&fifo->base, engine); save = nvkm_mask(device, 0x002520, 0x0000003f, 1 << engn); nvkm_wr32(device, 0x0032fc, chan->base.inst->addr >> 12); done = nvkm_msec(device, 2000, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h index 7c125a15f963..0e423eb2276c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h @@ -12,7 +12,14 @@ struct gf100_fifo_chan { struct list_head head; bool killed; - struct { +#define GF100_FIFO_ENGN_GR 0 +#define GF100_FIFO_ENGN_MSPDEC 1 +#define GF100_FIFO_ENGN_MSPPP 2 +#define GF100_FIFO_ENGN_MSVLD 3 +#define GF100_FIFO_ENGN_CE0 4 +#define GF100_FIFO_ENGN_CE1 5 +#define GF100_FIFO_ENGN_SW 15 + struct gf100_fifo_engn { struct nvkm_gpuobj *inst; struct nvkm_vma *vma; } engn[NVKM_SUBDEV_NR]; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h index 22698661aa85..56e56db93a55 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h @@ -16,7 +16,8 @@ struct gk104_fifo_chan { struct nvkm_memory *mthd; - struct { +#define GK104_FIFO_ENGN_SW 15 + struct gk104_fifo_engn { struct nvkm_gpuobj *inst; struct nvkm_vma *vma; } engn[NVKM_SUBDEV_NR]; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv04.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv04.h index 60ca79465aff..dbff7a44dbd8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv04.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv04.h @@ -9,6 +9,10 @@ struct nv04_fifo_chan { struct nvkm_fifo_chan base; struct nv04_fifo *fifo; u32 ramfc; +#define NV04_FIFO_ENGN_SW 0 +#define NV04_FIFO_ENGN_GR 1 +#define NV04_FIFO_ENGN_MPEG 2 +#define NV04_FIFO_ENGN_DMA 3 struct nvkm_gpuobj *engn[NVKM_SUBDEV_NR]; }; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h index 5735ff72a9d1..bc0a8fc9c84b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h @@ -15,6 +15,25 @@ struct nv50_fifo_chan { struct nvkm_gpuobj *pgd; struct nvkm_ramht *ramht; +#define NV50_FIFO_ENGN_SW 0 +#define NV50_FIFO_ENGN_GR 1 +#define NV50_FIFO_ENGN_MPEG 2 +#define NV50_FIFO_ENGN_DMA 3 + +#define G84_FIFO_ENGN_SW 0 +#define G84_FIFO_ENGN_GR 1 +#define G84_FIFO_ENGN_MPEG 2 +#define G84_FIFO_ENGN_MSPPP 2 +#define G84_FIFO_ENGN_ME 3 +#define G84_FIFO_ENGN_CE0 3 +#define G84_FIFO_ENGN_VP 4 +#define G84_FIFO_ENGN_MSPDEC 4 +#define G84_FIFO_ENGN_CIPHER 5 +#define G84_FIFO_ENGN_SEC 5 +#define G84_FIFO_ENGN_VIC 5 +#define G84_FIFO_ENGN_BSP 6 +#define G84_FIFO_ENGN_MSVLD 6 +#define G84_FIFO_ENGN_DMA 7 struct nvkm_gpuobj *engn[NVKM_SUBDEV_NR]; }; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c index c45779b1d50a..db7da93c4164 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c @@ -38,12 +38,35 @@ g84_fifo_uevent_init(struct nvkm_fifo *fifo) nvkm_mask(device, 0x002140, 0x40000000, 0x40000000); } +static int +g84_fifo_engine_id(struct nvkm_fifo *base, struct nvkm_engine *engine) +{ + switch (engine->subdev.type) { + case NVKM_ENGINE_SW : return G84_FIFO_ENGN_SW; + case NVKM_ENGINE_GR : return G84_FIFO_ENGN_GR; + case NVKM_ENGINE_MPEG : + case NVKM_ENGINE_MSPPP : return G84_FIFO_ENGN_MPEG; + case NVKM_ENGINE_CE : return G84_FIFO_ENGN_CE0; + case NVKM_ENGINE_VP : + case NVKM_ENGINE_MSPDEC: return G84_FIFO_ENGN_VP; + case NVKM_ENGINE_CIPHER: + case NVKM_ENGINE_SEC : return G84_FIFO_ENGN_CIPHER; + case NVKM_ENGINE_BSP : + case NVKM_ENGINE_MSVLD : return G84_FIFO_ENGN_BSP; + case NVKM_ENGINE_DMAOBJ: return G84_FIFO_ENGN_DMA; + default: + WARN_ON(1); + return -1; + } +} + static const struct nvkm_fifo_func g84_fifo = { .dtor = nv50_fifo_dtor, .oneinit = nv50_fifo_oneinit, .init = nv50_fifo_init, .intr = nv04_fifo_intr, + .engine_id = g84_fifo_engine_id, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .uevent_init = g84_fifo_uevent_init, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index 3f732b0a8973..7fe80a8a251b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c @@ -105,23 +105,6 @@ gf100_fifo_runlist_insert(struct gf100_fifo *fifo, struct gf100_fifo_chan *chan) mutex_unlock(&fifo->base.mutex); } -static inline int -gf100_fifo_engidx(struct gf100_fifo *fifo, u32 engn) -{ - switch (engn) { - case NVKM_ENGINE_GR : engn = 0; break; - case NVKM_ENGINE_MSVLD : engn = 1; break; - case NVKM_ENGINE_MSPPP : engn = 2; break; - case NVKM_ENGINE_MSPDEC: engn = 3; break; - case NVKM_ENGINE_CE0 : engn = 4; break; - case NVKM_ENGINE_CE1 : engn = 5; break; - default: - return -1; - } - - return engn; -} - static inline struct nvkm_engine * gf100_fifo_engine(struct gf100_fifo *fifo, u32 engn) { @@ -141,6 +124,22 @@ gf100_fifo_engine(struct gf100_fifo *fifo, u32 engn) return nvkm_device_engine(device, engn, 0); } +static int +gf100_fifo_engine_id(struct nvkm_fifo *base, struct nvkm_engine *engine) +{ + switch (engine->subdev.type) { + case NVKM_ENGINE_GR : return GF100_FIFO_ENGN_GR; + case NVKM_ENGINE_MSPDEC: return GF100_FIFO_ENGN_MSPDEC; + case NVKM_ENGINE_MSPPP : return GF100_FIFO_ENGN_MSPPP; + case NVKM_ENGINE_MSVLD : return GF100_FIFO_ENGN_MSVLD; + case NVKM_ENGINE_CE : return GF100_FIFO_ENGN_CE0 + engine->subdev.inst; + case NVKM_ENGINE_SW : return GF100_FIFO_ENGN_SW; + default: + WARN_ON(1); + return -1; + } +} + static void gf100_fifo_recover_work(struct work_struct *w) { @@ -156,8 +155,11 @@ gf100_fifo_recover_work(struct work_struct *w) fifo->recover.mask = 0ULL; spin_unlock_irqrestore(&fifo->base.lock, flags); - for (todo = mask; engn = __ffs64(todo), todo; todo &= ~BIT_ULL(engn)) - engm |= 1 << gf100_fifo_engidx(fifo, engn); + for (todo = mask; engn = __ffs64(todo), todo; todo &= ~BIT_ULL(engn)) { + if (!(engine = nvkm_device_engine(device, engn, 0))) + continue; + engm |= 1 << gf100_fifo_engine_id(&fifo->base, engine); + } nvkm_mask(device, 0x002630, engm, engm); for (todo = mask; engn = __ffs64(todo), todo; todo &= ~BIT_ULL(engn)) { @@ -673,6 +675,7 @@ gf100_fifo = { .fini = gf100_fifo_fini, .intr = gf100_fifo_intr, .fault = gf100_fifo_fault, + .engine_id = gf100_fifo_engine_id, .uevent_init = gf100_fifo_uevent_init, .uevent_fini = gf100_fifo_uevent_fini, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 80cd2ea6fe55..a8ddb1b09e6d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -258,6 +258,24 @@ gk104_fifo_pbdma = { .init = gk104_fifo_pbdma_init, }; +int +gk104_fifo_engine_id(struct nvkm_fifo *base, struct nvkm_engine *engine) +{ + struct gk104_fifo *fifo = gk104_fifo(base); + int engn; + + if (engine->subdev.type == NVKM_ENGINE_SW) + return GK104_FIFO_ENGN_SW; + + for (engn = 0; engn < fifo->engine_nr && engine; engn++) { + if (fifo->engine[engn].engine == engine) + return engn; + } + + WARN_ON(1); + return -1; +} + static void gk104_fifo_recover_work(struct work_struct *w) { @@ -459,7 +477,6 @@ gk104_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) struct nvkm_fifo_chan *chan; unsigned long flags; char ct[8] = "HUB/", en[16] = ""; - int engn; er = nvkm_enum_find(fifo->func->fault.reason, info->reason); ee = nvkm_enum_find(fifo->func->fault.engine, info->engine); @@ -522,11 +539,10 @@ gk104_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) * correct engine(s), but just in case we can't find the channel * information... */ - for (engn = 0; engn < fifo->engine_nr && engine; engn++) { - if (fifo->engine[engn].engine == engine) { + if (engine) { + int engn = fifo->base.func->engine_id(&fifo->base, engine); + if (engn >= 0 && engn != GK104_FIFO_ENGN_SW) gk104_fifo_recover_engn(fifo, engn); - break; - } } spin_unlock_irqrestore(&fifo->base.lock, flags); @@ -1020,6 +1036,7 @@ gk104_fifo_ = { .fini = gk104_fifo_fini, .intr = gk104_fifo_intr, .fault = gk104_fifo_fault, + .engine_id = gk104_fifo_engine_id, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .recover_chan = gk104_fifo_recover_chan, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c index d30da0f45675..a3e79fb0cd1a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c @@ -94,6 +94,20 @@ __releases(fifo->base.lock) spin_unlock_irqrestore(&fifo->base.lock, flags); } +int +nv04_fifo_engine_id(struct nvkm_fifo *base, struct nvkm_engine *engine) +{ + switch (engine->subdev.type) { + case NVKM_ENGINE_SW : return NV04_FIFO_ENGN_SW; + case NVKM_ENGINE_GR : return NV04_FIFO_ENGN_GR; + case NVKM_ENGINE_MPEG : return NV04_FIFO_ENGN_MPEG; + case NVKM_ENGINE_DMAOBJ: return NV04_FIFO_ENGN_DMA; + default: + WARN_ON(1); + return 0; + } +} + static const char * nv_dma_state_err(u32 state) { @@ -349,6 +363,7 @@ static const struct nvkm_fifo_func nv04_fifo = { .init = nv04_fifo_init, .intr = nv04_fifo_intr, + .engine_id = nv04_fifo_engine_id, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c index c464cc0fc292..c2053cce9a6f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c @@ -43,6 +43,7 @@ static const struct nvkm_fifo_func nv10_fifo = { .init = nv04_fifo_init, .intr = nv04_fifo_intr, + .engine_id = nv04_fifo_engine_id, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c index ac43b16b94a4..44e61f6d4b6d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c @@ -81,6 +81,7 @@ static const struct nvkm_fifo_func nv17_fifo = { .init = nv17_fifo_init, .intr = nv04_fifo_intr, + .engine_id = nv04_fifo_engine_id, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c index 0f6710c528a5..309d9fd347a5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c @@ -112,6 +112,7 @@ static const struct nvkm_fifo_func nv40_fifo = { .init = nv40_fifo_init, .intr = nv04_fifo_intr, + .engine_id = nv04_fifo_engine_id, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c index 59b4ece3f71e..6b99c48bed72 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c @@ -131,6 +131,7 @@ nv50_fifo = { .oneinit = nv50_fifo_oneinit, .init = nv50_fifo_init, .intr = nv04_fifo_intr, + .engine_id = nv04_fifo_engine_id, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h index da548bab0f2f..e3e218fe2e41 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h @@ -23,6 +23,7 @@ struct nvkm_fifo_func { void (*fini)(struct nvkm_fifo *); void (*intr)(struct nvkm_fifo *); void (*fault)(struct nvkm_fifo *, struct nvkm_fault_data *); + int (*engine_id)(struct nvkm_fifo *, struct nvkm_engine *); void (*pause)(struct nvkm_fifo *, unsigned long *); void (*start)(struct nvkm_fifo *, unsigned long *); void (*uevent_init)(struct nvkm_fifo *); @@ -35,8 +36,11 @@ struct nvkm_fifo_func { }; void nv04_fifo_intr(struct nvkm_fifo *); +int nv04_fifo_engine_id(struct nvkm_fifo *, struct nvkm_engine *); void nv04_fifo_pause(struct nvkm_fifo *, unsigned long *); void nv04_fifo_start(struct nvkm_fifo *, unsigned long *); void gf100_fifo_intr_fault(struct nvkm_fifo *, int); + +int gk104_fifo_engine_id(struct nvkm_fifo *, struct nvkm_engine *); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c index c60709106d61..6076a01acac4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c @@ -456,6 +456,7 @@ tu102_fifo_ = { .fini = gk104_fifo_fini, .intr = tu102_fifo_intr, .fault = tu102_fifo_fault, + .engine_id = gk104_fifo_engine_id, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .recover_chan = tu102_fifo_recover_chan, From 2546db0e0ff592e8e68845df32dfaf02fe4c8fc7 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 19:27:08 +1000 Subject: [PATCH 59/87] drm/nouveau/fifo: index base engctx by engine id Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/include/nvkm/engine/fifo.h | 3 ++- drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h index 3b5cf6bf41da..8edfe8c1b911 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h @@ -7,6 +7,7 @@ struct nvkm_fault_data; #define NVKM_FIFO_CHID_NR 4096 +#define NVKM_FIFO_ENGN_NR 16 struct nvkm_fifo_engn { struct nvkm_object *object; @@ -29,7 +30,7 @@ struct nvkm_fifo_chan { u64 addr; u32 size; - struct nvkm_fifo_engn engn[NVKM_SUBDEV_NR]; + struct nvkm_fifo_engn engn[NVKM_FIFO_ENGN_NR]; }; struct nvkm_fifo { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c index cc05c91798ff..ee5551e60c82 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c @@ -35,6 +35,15 @@ struct nvkm_fifo_chan_object { int hash; }; +static struct nvkm_fifo_engn * +nvkm_fifo_chan_engn(struct nvkm_fifo_chan *chan, struct nvkm_engine *engine) +{ + int engi = chan->fifo->func->engine_id(chan->fifo, engine); + if (engi >= 0) + return &chan->engn[engi]; + return NULL; +} + static int nvkm_fifo_chan_child_fini(struct nvkm_oproxy *base, bool suspend) { @@ -42,7 +51,7 @@ nvkm_fifo_chan_child_fini(struct nvkm_oproxy *base, bool suspend) container_of(base, typeof(*object), oproxy); struct nvkm_engine *engine = object->oproxy.object->engine; struct nvkm_fifo_chan *chan = object->chan; - struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; + struct nvkm_fifo_engn *engn = nvkm_fifo_chan_engn(chan, engine); const char *name = engine->subdev.name; int ret = 0; @@ -75,7 +84,7 @@ nvkm_fifo_chan_child_init(struct nvkm_oproxy *base) container_of(base, typeof(*object), oproxy); struct nvkm_engine *engine = object->oproxy.object->engine; struct nvkm_fifo_chan *chan = object->chan; - struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; + struct nvkm_fifo_engn *engn = nvkm_fifo_chan_engn(chan, engine); const char *name = engine->subdev.name; int ret; @@ -108,7 +117,7 @@ nvkm_fifo_chan_child_del(struct nvkm_oproxy *base) container_of(base, typeof(*object), oproxy); struct nvkm_engine *engine = object->oproxy.base.engine; struct nvkm_fifo_chan *chan = object->chan; - struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; + struct nvkm_fifo_engn *engn = nvkm_fifo_chan_engn(chan, engine); if (chan->func->object_dtor) chan->func->object_dtor(chan, object->hash); @@ -135,7 +144,7 @@ nvkm_fifo_chan_child_new(const struct nvkm_oclass *oclass, void *data, u32 size, { struct nvkm_engine *engine = oclass->engine; struct nvkm_fifo_chan *chan = nvkm_fifo_chan(oclass->parent); - struct nvkm_fifo_engn *engn = &chan->engn[engine->subdev.index]; + struct nvkm_fifo_engn *engn = nvkm_fifo_chan_engn(chan, engine); struct nvkm_fifo_chan_object *object; int ret = 0; From 3e7d4a0cad3a326c189d63ea6424a17aa72460de Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 19:33:36 +1000 Subject: [PATCH 60/87] drm/nouveau/fifo: index backend engctx by engine id Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/nvkm/engine/fifo/chang84.c | 5 ++-- .../drm/nouveau/nvkm/engine/fifo/changf100.h | 2 +- .../drm/nouveau/nvkm/engine/fifo/changk104.h | 3 +- .../drm/nouveau/nvkm/engine/fifo/channv04.h | 2 +- .../drm/nouveau/nvkm/engine/fifo/channv50.c | 16 +++++++--- .../drm/nouveau/nvkm/engine/fifo/channv50.h | 3 +- .../drm/nouveau/nvkm/engine/fifo/dmanv40.c | 16 +++++++--- .../nouveau/nvkm/engine/fifo/gpfifogf100.c | 30 ++++++++++++------- .../nouveau/nvkm/engine/fifo/gpfifogk104.c | 30 ++++++++++++------- .../nouveau/nvkm/engine/fifo/gpfifogv100.c | 7 ++--- 10 files changed, 73 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c index d440e60ef977..862e69217a6a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c @@ -114,7 +114,7 @@ g84_fifo_chan_engine_init(struct nvkm_fifo_chan *base, struct nvkm_engine *engine) { struct nv50_fifo_chan *chan = nv50_fifo_chan(base); - struct nvkm_gpuobj *engn = chan->engn[engine->subdev.index]; + struct nvkm_gpuobj *engn = *nv50_fifo_chan_engine(chan, engine); u64 limit, start; int offset; @@ -142,12 +142,11 @@ g84_fifo_chan_engine_ctor(struct nvkm_fifo_chan *base, struct nvkm_object *object) { struct nv50_fifo_chan *chan = nv50_fifo_chan(base); - int engn = engine->subdev.index; if (g84_fifo_chan_engine_addr(engine) < 0) return 0; - return nvkm_object_bind(object, NULL, 0, &chan->engn[engn]); + return nvkm_object_bind(object, NULL, 0, nv50_fifo_chan_engine(chan, engine)); } static int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h index 0e423eb2276c..f7ac1061fa84 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h @@ -22,7 +22,7 @@ struct gf100_fifo_chan { struct gf100_fifo_engn { struct nvkm_gpuobj *inst; struct nvkm_vma *vma; - } engn[NVKM_SUBDEV_NR]; + } engn[NVKM_FIFO_ENGN_NR]; }; extern const struct nvkm_fifo_chan_oclass gf100_fifo_gpfifo_oclass; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h index 56e56db93a55..cfbe096e604f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h @@ -20,7 +20,7 @@ struct gk104_fifo_chan { struct gk104_fifo_engn { struct nvkm_gpuobj *inst; struct nvkm_vma *vma; - } engn[NVKM_SUBDEV_NR]; + } engn[NVKM_FIFO_ENGN_NR]; }; extern const struct nvkm_fifo_chan_func gk104_fifo_gpfifo_func; @@ -30,6 +30,7 @@ int gk104_fifo_gpfifo_new(struct gk104_fifo *, const struct nvkm_oclass *, void *gk104_fifo_gpfifo_dtor(struct nvkm_fifo_chan *); void gk104_fifo_gpfifo_init(struct nvkm_fifo_chan *); void gk104_fifo_gpfifo_fini(struct nvkm_fifo_chan *); +struct gk104_fifo_engn *gk104_fifo_gpfifo_engine(struct gk104_fifo_chan *, struct nvkm_engine *); int gk104_fifo_gpfifo_engine_ctor(struct nvkm_fifo_chan *, struct nvkm_engine *, struct nvkm_object *); void gk104_fifo_gpfifo_engine_dtor(struct nvkm_fifo_chan *, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv04.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv04.h index dbff7a44dbd8..727bc8976b40 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv04.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv04.h @@ -13,7 +13,7 @@ struct nv04_fifo_chan { #define NV04_FIFO_ENGN_GR 1 #define NV04_FIFO_ENGN_MPEG 2 #define NV04_FIFO_ENGN_DMA 3 - struct nvkm_gpuobj *engn[NVKM_SUBDEV_NR]; + struct nvkm_gpuobj *engn[NVKM_FIFO_ENGN_NR]; }; extern const struct nvkm_fifo_chan_func nv04_fifo_dma_func; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c index 85f7dbf53c99..9e738e062b9a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c @@ -42,6 +42,15 @@ nv50_fifo_chan_engine_addr(struct nvkm_engine *engine) } } +struct nvkm_gpuobj ** +nv50_fifo_chan_engine(struct nv50_fifo_chan *chan, struct nvkm_engine *engine) +{ + int engi = chan->base.fifo->func->engine_id(chan->base.fifo, engine); + if (engi >= 0) + return &chan->engn[engi]; + return NULL; +} + static int nv50_fifo_chan_engine_fini(struct nvkm_fifo_chan *base, struct nvkm_engine *engine, bool suspend) @@ -103,7 +112,7 @@ nv50_fifo_chan_engine_init(struct nvkm_fifo_chan *base, struct nvkm_engine *engine) { struct nv50_fifo_chan *chan = nv50_fifo_chan(base); - struct nvkm_gpuobj *engn = chan->engn[engine->subdev.index]; + struct nvkm_gpuobj *engn = *nv50_fifo_chan_engine(chan, engine); u64 limit, start; int offset; @@ -130,7 +139,7 @@ nv50_fifo_chan_engine_dtor(struct nvkm_fifo_chan *base, struct nvkm_engine *engine) { struct nv50_fifo_chan *chan = nv50_fifo_chan(base); - nvkm_gpuobj_del(&chan->engn[engine->subdev.index]); + nvkm_gpuobj_del(nv50_fifo_chan_engine(chan, engine)); } static int @@ -139,12 +148,11 @@ nv50_fifo_chan_engine_ctor(struct nvkm_fifo_chan *base, struct nvkm_object *object) { struct nv50_fifo_chan *chan = nv50_fifo_chan(base); - int engn = engine->subdev.index; if (nv50_fifo_chan_engine_addr(engine) < 0) return 0; - return nvkm_object_bind(object, NULL, 0, &chan->engn[engn]); + return nvkm_object_bind(object, NULL, 0, nv50_fifo_chan_engine(chan, engine)); } void diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h index bc0a8fc9c84b..af8bdf275552 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h @@ -34,13 +34,14 @@ struct nv50_fifo_chan { #define G84_FIFO_ENGN_BSP 6 #define G84_FIFO_ENGN_MSVLD 6 #define G84_FIFO_ENGN_DMA 7 - struct nvkm_gpuobj *engn[NVKM_SUBDEV_NR]; + struct nvkm_gpuobj *engn[NVKM_FIFO_ENGN_NR]; }; int nv50_fifo_chan_ctor(struct nv50_fifo *, u64 vmm, u64 push, const struct nvkm_oclass *, struct nv50_fifo_chan *); void *nv50_fifo_chan_dtor(struct nvkm_fifo_chan *); void nv50_fifo_chan_fini(struct nvkm_fifo_chan *); +struct nvkm_gpuobj **nv50_fifo_chan_engine(struct nv50_fifo_chan *, struct nvkm_engine *); void nv50_fifo_chan_engine_dtor(struct nvkm_fifo_chan *, struct nvkm_engine *); void nv50_fifo_chan_object_dtor(struct nvkm_fifo_chan *, int); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c index 6721e444dbc0..28d6c305119a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c @@ -55,6 +55,15 @@ nv40_fifo_dma_engine(struct nvkm_engine *engine, u32 *reg, u32 *ctx) } } +static struct nvkm_gpuobj ** +nv40_fifo_dma_engn(struct nv04_fifo_chan *chan, struct nvkm_engine *engine) +{ + int engi = chan->base.fifo->func->engine_id(chan->base.fifo, engine); + if (engi >= 0) + return &chan->engn[engi]; + return NULL; +} + static int nv40_fifo_dma_engine_fini(struct nvkm_fifo_chan *base, struct nvkm_engine *engine, bool suspend) @@ -99,7 +108,7 @@ nv40_fifo_dma_engine_init(struct nvkm_fifo_chan *base, if (!nv40_fifo_dma_engine(engine, ®, &ctx)) return 0; - inst = chan->engn[engine->subdev.index]->addr >> 4; + inst = (*nv40_fifo_dma_engn(chan, engine))->addr >> 4; spin_lock_irqsave(&fifo->base.lock, flags); nvkm_mask(device, 0x002500, 0x00000001, 0x00000000); @@ -121,7 +130,7 @@ nv40_fifo_dma_engine_dtor(struct nvkm_fifo_chan *base, struct nvkm_engine *engine) { struct nv04_fifo_chan *chan = nv04_fifo_chan(base); - nvkm_gpuobj_del(&chan->engn[engine->subdev.index]); + nvkm_gpuobj_del(nv40_fifo_dma_engn(chan, engine)); } static int @@ -130,13 +139,12 @@ nv40_fifo_dma_engine_ctor(struct nvkm_fifo_chan *base, struct nvkm_object *object) { struct nv04_fifo_chan *chan = nv04_fifo_chan(base); - const int engn = engine->subdev.index; u32 reg, ctx; if (!nv40_fifo_dma_engine(engine, ®, &ctx)) return 0; - return nvkm_object_bind(object, NULL, 0, &chan->engn[engn]); + return nvkm_object_bind(object, NULL, 0, nv40_fifo_dma_engn(chan, engine)); } static int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c index e7b3b113fd95..9b2865e32a9f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c @@ -66,6 +66,15 @@ gf100_fifo_gpfifo_engine_addr(struct nvkm_engine *engine) } } +static struct gf100_fifo_engn * +gf100_fifo_gpfifo_engine(struct gf100_fifo_chan *chan, struct nvkm_engine *engine) +{ + int engi = chan->base.fifo->func->engine_id(chan->base.fifo, engine); + if (engi >= 0) + return &chan->engn[engi]; + return NULL; +} + static int gf100_fifo_gpfifo_engine_fini(struct nvkm_fifo_chan *base, struct nvkm_engine *engine, bool suspend) @@ -108,13 +117,13 @@ gf100_fifo_gpfifo_engine_init(struct nvkm_fifo_chan *base, { const u32 offset = gf100_fifo_gpfifo_engine_addr(engine); struct gf100_fifo_chan *chan = gf100_fifo_chan(base); + struct gf100_fifo_engn *engn = gf100_fifo_gpfifo_engine(chan, engine); struct nvkm_gpuobj *inst = chan->base.inst; if (offset) { - u64 addr = chan->engn[engine->subdev.index].vma->addr; nvkm_kmap(inst); - nvkm_wo32(inst, offset + 0x00, lower_32_bits(addr) | 4); - nvkm_wo32(inst, offset + 0x04, upper_32_bits(addr)); + nvkm_wo32(inst, offset + 0x00, lower_32_bits(engn->vma->addr) | 4); + nvkm_wo32(inst, offset + 0x04, upper_32_bits(engn->vma->addr)); nvkm_done(inst); } @@ -126,8 +135,9 @@ gf100_fifo_gpfifo_engine_dtor(struct nvkm_fifo_chan *base, struct nvkm_engine *engine) { struct gf100_fifo_chan *chan = gf100_fifo_chan(base); - nvkm_vmm_put(chan->base.vmm, &chan->engn[engine->subdev.index].vma); - nvkm_gpuobj_del(&chan->engn[engine->subdev.index].inst); + struct gf100_fifo_engn *engn = gf100_fifo_gpfifo_engine(chan, engine); + nvkm_vmm_put(chan->base.vmm, &engn->vma); + nvkm_gpuobj_del(&engn->inst); } static int @@ -136,23 +146,21 @@ gf100_fifo_gpfifo_engine_ctor(struct nvkm_fifo_chan *base, struct nvkm_object *object) { struct gf100_fifo_chan *chan = gf100_fifo_chan(base); - int engn = engine->subdev.index; + struct gf100_fifo_engn *engn = gf100_fifo_gpfifo_engine(chan, engine); int ret; if (!gf100_fifo_gpfifo_engine_addr(engine)) return 0; - ret = nvkm_object_bind(object, NULL, 0, &chan->engn[engn].inst); + ret = nvkm_object_bind(object, NULL, 0, &engn->inst); if (ret) return ret; - ret = nvkm_vmm_get(chan->base.vmm, 12, chan->engn[engn].inst->size, - &chan->engn[engn].vma); + ret = nvkm_vmm_get(chan->base.vmm, 12, engn->inst->size, &engn->vma); if (ret) return ret; - return nvkm_memory_map(chan->engn[engn].inst, 0, chan->base.vmm, - chan->engn[engn].vma, NULL, 0); + return nvkm_memory_map(engn->inst, 0, chan->base.vmm, engn->vma, NULL, 0); } static void diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c index 0cd9a7d43013..afd540b60cdd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c @@ -94,6 +94,15 @@ gk104_fifo_gpfifo_engine_addr(struct nvkm_engine *engine) } } +struct gk104_fifo_engn * +gk104_fifo_gpfifo_engine(struct gk104_fifo_chan *chan, struct nvkm_engine *engine) +{ + int engi = chan->base.fifo->func->engine_id(chan->base.fifo, engine); + if (engi >= 0) + return &chan->engn[engi]; + return NULL; +} + static int gk104_fifo_gpfifo_engine_fini(struct nvkm_fifo_chan *base, struct nvkm_engine *engine, bool suspend) @@ -126,13 +135,13 @@ gk104_fifo_gpfifo_engine_init(struct nvkm_fifo_chan *base, struct nvkm_engine *engine) { struct gk104_fifo_chan *chan = gk104_fifo_chan(base); + struct gk104_fifo_engn *engn = gk104_fifo_gpfifo_engine(chan, engine); struct nvkm_gpuobj *inst = chan->base.inst; u32 offset = gk104_fifo_gpfifo_engine_addr(engine); if (offset) { - u64 addr = chan->engn[engine->subdev.index].vma->addr; - u32 datalo = lower_32_bits(addr) | 0x00000004; - u32 datahi = upper_32_bits(addr); + u32 datalo = lower_32_bits(engn->vma->addr) | 0x00000004; + u32 datahi = upper_32_bits(engn->vma->addr); nvkm_kmap(inst); nvkm_wo32(inst, (offset & 0xffff) + 0x00, datalo); nvkm_wo32(inst, (offset & 0xffff) + 0x04, datahi); @@ -151,8 +160,9 @@ gk104_fifo_gpfifo_engine_dtor(struct nvkm_fifo_chan *base, struct nvkm_engine *engine) { struct gk104_fifo_chan *chan = gk104_fifo_chan(base); - nvkm_vmm_put(chan->base.vmm, &chan->engn[engine->subdev.index].vma); - nvkm_gpuobj_del(&chan->engn[engine->subdev.index].inst); + struct gk104_fifo_engn *engn = gk104_fifo_gpfifo_engine(chan, engine); + nvkm_vmm_put(chan->base.vmm, &engn->vma); + nvkm_gpuobj_del(&engn->inst); } int @@ -161,23 +171,21 @@ gk104_fifo_gpfifo_engine_ctor(struct nvkm_fifo_chan *base, struct nvkm_object *object) { struct gk104_fifo_chan *chan = gk104_fifo_chan(base); - int engn = engine->subdev.index; + struct gk104_fifo_engn *engn = gk104_fifo_gpfifo_engine(chan, engine); int ret; if (!gk104_fifo_gpfifo_engine_addr(engine)) return 0; - ret = nvkm_object_bind(object, NULL, 0, &chan->engn[engn].inst); + ret = nvkm_object_bind(object, NULL, 0, &engn->inst); if (ret) return ret; - ret = nvkm_vmm_get(chan->base.vmm, 12, chan->engn[engn].inst->size, - &chan->engn[engn].vma); + ret = nvkm_vmm_get(chan->base.vmm, 12, engn->inst->size, &engn->vma); if (ret) return ret; - return nvkm_memory_map(chan->engn[engn].inst, 0, chan->base.vmm, - chan->engn[engn].vma, NULL, 0); + return nvkm_memory_map(engn->inst, 0, chan->base.vmm, engn->vma, NULL, 0); } void diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c index bca4c103153c..4c9c92eee17c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c @@ -90,17 +90,16 @@ gv100_fifo_gpfifo_engine_init(struct nvkm_fifo_chan *base, struct nvkm_engine *engine) { struct gk104_fifo_chan *chan = gk104_fifo_chan(base); + struct gk104_fifo_engn *engn = gk104_fifo_gpfifo_engine(chan, engine); struct nvkm_gpuobj *inst = chan->base.inst; - u64 addr; if (engine->subdev.index >= NVKM_ENGINE_CE0 && engine->subdev.index <= NVKM_ENGINE_CE_LAST) return 0; - addr = chan->engn[engine->subdev.index].vma->addr; nvkm_kmap(inst); - nvkm_wo32(inst, 0x210, lower_32_bits(addr) | 0x00000004); - nvkm_wo32(inst, 0x214, upper_32_bits(addr)); + nvkm_wo32(inst, 0x210, lower_32_bits(engn->vma->addr) | 0x00000004); + nvkm_wo32(inst, 0x214, upper_32_bits(engn->vma->addr)); nvkm_done(inst); return gv100_fifo_gpfifo_engine_valid(chan, false, true); From 496162037cd24191e2aec659cff40e267fcc6193 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Tue, 9 Feb 2021 13:06:35 +1000 Subject: [PATCH 61/87] drm/nouveau/fifo: add id_engine hook Will be used by common code in subsequent commits to lookup driver engine state from HW engine ID. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/nvkm/engine/fifo/g84.c | 47 +++++++++++++++++++ .../gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | 28 ++++++----- .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 7 +++ .../gpu/drm/nouveau/nvkm/engine/fifo/nv04.c | 19 ++++++++ .../gpu/drm/nouveau/nvkm/engine/fifo/nv10.c | 1 + .../gpu/drm/nouveau/nvkm/engine/fifo/nv17.c | 1 + .../gpu/drm/nouveau/nvkm/engine/fifo/nv40.c | 1 + .../gpu/drm/nouveau/nvkm/engine/fifo/nv50.c | 1 + .../gpu/drm/nouveau/nvkm/engine/fifo/priv.h | 3 ++ .../gpu/drm/nouveau/nvkm/engine/fifo/tu102.c | 1 + 10 files changed, 97 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c index db7da93c4164..c0a7d0f21dac 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.c @@ -38,6 +38,52 @@ g84_fifo_uevent_init(struct nvkm_fifo *fifo) nvkm_mask(device, 0x002140, 0x40000000, 0x40000000); } +static struct nvkm_engine * +g84_fifo_id_engine(struct nvkm_fifo *fifo, int engi) +{ + struct nvkm_device *device = fifo->engine.subdev.device; + struct nvkm_engine *engine; + enum nvkm_subdev_type type; + + switch (engi) { + case G84_FIFO_ENGN_SW : type = NVKM_ENGINE_SW; break; + case G84_FIFO_ENGN_GR : type = NVKM_ENGINE_GR; break; + case G84_FIFO_ENGN_MPEG : + if ((engine = nvkm_device_engine(device, NVKM_ENGINE_MSPPP, 0))) + return engine; + type = NVKM_ENGINE_MPEG; + break; + case G84_FIFO_ENGN_ME : + if ((engine = nvkm_device_engine(device, NVKM_ENGINE_CE, 0))) + return engine; + type = NVKM_ENGINE_ME; + break; + case G84_FIFO_ENGN_VP : + if ((engine = nvkm_device_engine(device, NVKM_ENGINE_MSPDEC, 0))) + return engine; + type = NVKM_ENGINE_VP; + break; + case G84_FIFO_ENGN_CIPHER: + if ((engine = nvkm_device_engine(device, NVKM_ENGINE_VIC, 0))) + return engine; + if ((engine = nvkm_device_engine(device, NVKM_ENGINE_SEC, 0))) + return engine; + type = NVKM_ENGINE_CIPHER; + break; + case G84_FIFO_ENGN_BSP : + if ((engine = nvkm_device_engine(device, NVKM_ENGINE_MSVLD, 0))) + return engine; + type = NVKM_ENGINE_BSP; + break; + case G84_FIFO_ENGN_DMA : type = NVKM_ENGINE_DMAOBJ; break; + default: + WARN_ON(1); + return NULL; + } + + return nvkm_device_engine(fifo->engine.subdev.device, type, 0); +} + static int g84_fifo_engine_id(struct nvkm_fifo *base, struct nvkm_engine *engine) { @@ -67,6 +113,7 @@ g84_fifo = { .init = nv50_fifo_init, .intr = nv04_fifo_intr, .engine_id = g84_fifo_engine_id, + .id_engine = g84_fifo_id_engine, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .uevent_init = g84_fifo_uevent_init, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index 7fe80a8a251b..9713f4b171a2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c @@ -105,23 +105,26 @@ gf100_fifo_runlist_insert(struct gf100_fifo *fifo, struct gf100_fifo_chan *chan) mutex_unlock(&fifo->base.mutex); } -static inline struct nvkm_engine * -gf100_fifo_engine(struct gf100_fifo *fifo, u32 engn) +static struct nvkm_engine * +gf100_fifo_id_engine(struct nvkm_fifo *fifo, int engi) { - struct nvkm_device *device = fifo->base.engine.subdev.device; + enum nvkm_subdev_type type; + int inst; - switch (engn) { - case 0: engn = NVKM_ENGINE_GR; break; - case 1: engn = NVKM_ENGINE_MSVLD; break; - case 2: engn = NVKM_ENGINE_MSPPP; break; - case 3: engn = NVKM_ENGINE_MSPDEC; break; - case 4: engn = NVKM_ENGINE_CE0; break; - case 5: engn = NVKM_ENGINE_CE1; break; + switch (engi) { + case GF100_FIFO_ENGN_GR : type = NVKM_ENGINE_GR ; inst = 0; break; + case GF100_FIFO_ENGN_MSPDEC: type = NVKM_ENGINE_MSPDEC; inst = 0; break; + case GF100_FIFO_ENGN_MSPPP : type = NVKM_ENGINE_MSPPP ; inst = 0; break; + case GF100_FIFO_ENGN_MSVLD : type = NVKM_ENGINE_MSVLD ; inst = 0; break; + case GF100_FIFO_ENGN_CE0 : type = NVKM_ENGINE_CE ; inst = 0; break; + case GF100_FIFO_ENGN_CE1 : type = NVKM_ENGINE_CE ; inst = 1; break; + case GF100_FIFO_ENGN_SW : type = NVKM_ENGINE_SW ; inst = 0; break; default: + WARN_ON(1); return NULL; } - return nvkm_device_engine(device, engn, 0); + return nvkm_device_engine(fifo->engine.subdev.device, type, inst); } static int @@ -337,7 +340,7 @@ gf100_fifo_intr_sched_ctxsw(struct gf100_fifo *fifo) if (busy && unk0 && unk1) { list_for_each_entry(chan, &fifo->chan, head) { if (chan->base.chid == chid) { - engine = gf100_fifo_engine(fifo, engn); + engine = gf100_fifo_id_engine(&fifo->base, engn); if (!engine) break; gf100_fifo_recover(fifo, engine, chan); @@ -676,6 +679,7 @@ gf100_fifo = { .intr = gf100_fifo_intr, .fault = gf100_fifo_fault, .engine_id = gf100_fifo_engine_id, + .id_engine = gf100_fifo_id_engine, .uevent_init = gf100_fifo_uevent_init, .uevent_fini = gf100_fifo_uevent_fini, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index a8ddb1b09e6d..c9efa6ae6466 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -258,6 +258,12 @@ gk104_fifo_pbdma = { .init = gk104_fifo_pbdma_init, }; +struct nvkm_engine * +gk104_fifo_id_engine(struct nvkm_fifo *base, int engi) +{ + return gk104_fifo(base)->engine[engi].engine; +} + int gk104_fifo_engine_id(struct nvkm_fifo *base, struct nvkm_engine *engine) { @@ -1037,6 +1043,7 @@ gk104_fifo_ = { .intr = gk104_fifo_intr, .fault = gk104_fifo_fault, .engine_id = gk104_fifo_engine_id, + .id_engine = gk104_fifo_id_engine, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .recover_chan = gk104_fifo_recover_chan, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c index a3e79fb0cd1a..c6730c124769 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.c @@ -94,6 +94,24 @@ __releases(fifo->base.lock) spin_unlock_irqrestore(&fifo->base.lock, flags); } +struct nvkm_engine * +nv04_fifo_id_engine(struct nvkm_fifo *fifo, int engi) +{ + enum nvkm_subdev_type type; + + switch (engi) { + case NV04_FIFO_ENGN_SW : type = NVKM_ENGINE_SW; break; + case NV04_FIFO_ENGN_GR : type = NVKM_ENGINE_GR; break; + case NV04_FIFO_ENGN_MPEG: type = NVKM_ENGINE_MPEG; break; + case NV04_FIFO_ENGN_DMA : type = NVKM_ENGINE_DMAOBJ; break; + default: + WARN_ON(1); + return NULL; + } + + return nvkm_device_engine(fifo->engine.subdev.device, type, 0); +} + int nv04_fifo_engine_id(struct nvkm_fifo *base, struct nvkm_engine *engine) { @@ -364,6 +382,7 @@ nv04_fifo = { .init = nv04_fifo_init, .intr = nv04_fifo_intr, .engine_id = nv04_fifo_engine_id, + .id_engine = nv04_fifo_id_engine, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c index c2053cce9a6f..f8887f0f2f82 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.c @@ -44,6 +44,7 @@ nv10_fifo = { .init = nv04_fifo_init, .intr = nv04_fifo_intr, .engine_id = nv04_fifo_engine_id, + .id_engine = nv04_fifo_id_engine, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c index 44e61f6d4b6d..3f94c7b5b054 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.c @@ -82,6 +82,7 @@ nv17_fifo = { .init = nv17_fifo_init, .intr = nv04_fifo_intr, .engine_id = nv04_fifo_engine_id, + .id_engine = nv04_fifo_id_engine, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c index 309d9fd347a5..f9ea46809bc0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.c @@ -113,6 +113,7 @@ nv40_fifo = { .init = nv40_fifo_init, .intr = nv04_fifo_intr, .engine_id = nv04_fifo_engine_id, + .id_engine = nv04_fifo_id_engine, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c index 6b99c48bed72..be94156ea248 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.c @@ -132,6 +132,7 @@ nv50_fifo = { .init = nv50_fifo_init, .intr = nv04_fifo_intr, .engine_id = nv04_fifo_engine_id, + .id_engine = nv04_fifo_id_engine, .pause = nv04_fifo_pause, .start = nv04_fifo_start, .chan = { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h index e3e218fe2e41..899272801a8b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/priv.h @@ -24,6 +24,7 @@ struct nvkm_fifo_func { void (*intr)(struct nvkm_fifo *); void (*fault)(struct nvkm_fifo *, struct nvkm_fault_data *); int (*engine_id)(struct nvkm_fifo *, struct nvkm_engine *); + struct nvkm_engine *(*id_engine)(struct nvkm_fifo *, int engi); void (*pause)(struct nvkm_fifo *, unsigned long *); void (*start)(struct nvkm_fifo *, unsigned long *); void (*uevent_init)(struct nvkm_fifo *); @@ -37,10 +38,12 @@ struct nvkm_fifo_func { void nv04_fifo_intr(struct nvkm_fifo *); int nv04_fifo_engine_id(struct nvkm_fifo *, struct nvkm_engine *); +struct nvkm_engine *nv04_fifo_id_engine(struct nvkm_fifo *, int); void nv04_fifo_pause(struct nvkm_fifo *, unsigned long *); void nv04_fifo_start(struct nvkm_fifo *, unsigned long *); void gf100_fifo_intr_fault(struct nvkm_fifo *, int); int gk104_fifo_engine_id(struct nvkm_fifo *, struct nvkm_engine *); +struct nvkm_engine *gk104_fifo_id_engine(struct nvkm_fifo *, int); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c index 6076a01acac4..1bc6b25d9e3b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c @@ -457,6 +457,7 @@ tu102_fifo_ = { .intr = tu102_fifo_intr, .fault = tu102_fifo_fault, .engine_id = gk104_fifo_engine_id, + .id_engine = gk104_fifo_id_engine, .uevent_init = gk104_fifo_uevent_init, .uevent_fini = gk104_fifo_uevent_fini, .recover_chan = tu102_fifo_recover_chan, From ad3b0d331fbdf112315e3c78108d4dcc866aca3d Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Tue, 9 Feb 2021 13:01:01 +1000 Subject: [PATCH 62/87] drm/nouveau/fifo: turn chan subdev mask into engine mask This data is used to know which engines/classes are reachable on a given channel's runlist, and needs to be replaced with something that doesn't rely on subdev index. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/engine/fifo.h | 2 +- .../gpu/drm/nouveau/include/nvkm/subdev/top.h | 1 - .../gpu/drm/nouveau/nvkm/engine/fifo/chan.c | 13 +++---- .../gpu/drm/nouveau/nvkm/engine/fifo/chan.h | 2 +- .../drm/nouveau/nvkm/engine/fifo/chang84.c | 28 +++++++------- .../drm/nouveau/nvkm/engine/fifo/channv50.c | 8 ++-- .../drm/nouveau/nvkm/engine/fifo/dmanv04.c | 6 +-- .../drm/nouveau/nvkm/engine/fifo/dmanv10.c | 6 +-- .../drm/nouveau/nvkm/engine/fifo/dmanv17.c | 8 ++-- .../drm/nouveau/nvkm/engine/fifo/dmanv40.c | 8 ++-- .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 38 +++++++++++++------ .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.h | 1 + .../nouveau/nvkm/engine/fifo/gpfifogf100.c | 14 +++---- .../nouveau/nvkm/engine/fifo/gpfifogk104.c | 13 +------ .../nouveau/nvkm/engine/fifo/gpfifogv100.c | 10 +---- .../gpu/drm/nouveau/nvkm/subdev/top/base.c | 18 --------- 16 files changed, 77 insertions(+), 99 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h index 8edfe8c1b911..54fab7cc36c1 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h @@ -18,7 +18,7 @@ struct nvkm_fifo_engn { struct nvkm_fifo_chan { const struct nvkm_fifo_chan_func *func; struct nvkm_fifo *fifo; - u64 engines; + u32 engm; struct nvkm_object object; struct list_head head; diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index 0a8004ee8c13..b652d7c99dda 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -27,7 +27,6 @@ u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_subdev_type, int); int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_devidx); enum nvkm_devidx nvkm_top_fault(struct nvkm_device *, int fault); -enum nvkm_devidx nvkm_top_engine(struct nvkm_device *, int, int *runl, int *engn); int gk104_top_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_top **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c index ee5551e60c82..8d957643940a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c @@ -212,13 +212,12 @@ nvkm_fifo_chan_child_get(struct nvkm_object *object, int index, { struct nvkm_fifo_chan *chan = nvkm_fifo_chan(object); struct nvkm_fifo *fifo = chan->fifo; - struct nvkm_device *device = fifo->engine.subdev.device; struct nvkm_engine *engine; - u64 mask = chan->engines; - int ret, i, c; + u32 engm = chan->engm; + int engi, ret, c; - for (; c = 0, i = __ffs64(mask), mask; mask &= ~(1ULL << i)) { - if (!(engine = nvkm_device_engine(device, i, 0))) + for (; c = 0, engi = __ffs(engm), engm; engm &= ~(1ULL << engi)) { + if (!(engine = fifo->func->id_engine(fifo, engi))) continue; oclass->engine = engine; oclass->base.oclass = 0; @@ -361,7 +360,7 @@ nvkm_fifo_chan_func = { int nvkm_fifo_chan_ctor(const struct nvkm_fifo_chan_func *func, struct nvkm_fifo *fifo, u32 size, u32 align, bool zero, - u64 hvmm, u64 push, u64 engines, int bar, u32 base, + u64 hvmm, u64 push, u32 engm, int bar, u32 base, u32 user, const struct nvkm_oclass *oclass, struct nvkm_fifo_chan *chan) { @@ -374,7 +373,7 @@ nvkm_fifo_chan_ctor(const struct nvkm_fifo_chan_func *func, nvkm_object_ctor(&nvkm_fifo_chan_func, oclass, &chan->object); chan->func = func; chan->fifo = fifo; - chan->engines = engines; + chan->engm = engm; INIT_LIST_HEAD(&chan->head); /* instance memory */ diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.h index 177e10562600..e53504354841 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.h @@ -22,7 +22,7 @@ struct nvkm_fifo_chan_func { int nvkm_fifo_chan_ctor(const struct nvkm_fifo_chan_func *, struct nvkm_fifo *, u32 size, u32 align, bool zero, u64 vm, u64 push, - u64 engines, int bar, u32 base, u32 user, + u32 engm, int bar, u32 base, u32 user, const struct nvkm_oclass *, struct nvkm_fifo_chan *); struct nvkm_fifo_chan_oclass { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c index 862e69217a6a..b298b05e2655 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c @@ -220,20 +220,20 @@ g84_fifo_chan_ctor(struct nv50_fifo *fifo, u64 vmm, u64 push, ret = nvkm_fifo_chan_ctor(&g84_fifo_chan_func, &fifo->base, 0x10000, 0x1000, false, vmm, push, - (1ULL << NVKM_ENGINE_BSP) | - (1ULL << NVKM_ENGINE_CE0) | - (1ULL << NVKM_ENGINE_CIPHER) | - (1ULL << NVKM_ENGINE_DMAOBJ) | - (1ULL << NVKM_ENGINE_GR) | - (1ULL << NVKM_ENGINE_ME) | - (1ULL << NVKM_ENGINE_MPEG) | - (1ULL << NVKM_ENGINE_MSPDEC) | - (1ULL << NVKM_ENGINE_MSPPP) | - (1ULL << NVKM_ENGINE_MSVLD) | - (1ULL << NVKM_ENGINE_SEC) | - (1ULL << NVKM_ENGINE_SW) | - (1ULL << NVKM_ENGINE_VIC) | - (1ULL << NVKM_ENGINE_VP), + BIT(G84_FIFO_ENGN_SW) | + BIT(G84_FIFO_ENGN_GR) | + BIT(G84_FIFO_ENGN_MPEG) | + BIT(G84_FIFO_ENGN_MSPPP) | + BIT(G84_FIFO_ENGN_ME) | + BIT(G84_FIFO_ENGN_CE0) | + BIT(G84_FIFO_ENGN_VP) | + BIT(G84_FIFO_ENGN_MSPDEC) | + BIT(G84_FIFO_ENGN_CIPHER) | + BIT(G84_FIFO_ENGN_SEC) | + BIT(G84_FIFO_ENGN_VIC) | + BIT(G84_FIFO_ENGN_BSP) | + BIT(G84_FIFO_ENGN_MSVLD) | + BIT(G84_FIFO_ENGN_DMA), 0, 0xc00000, 0x2000, oclass, &chan->base); chan->fifo = fifo; if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c index 9e738e062b9a..c314d9a7077c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c @@ -248,10 +248,10 @@ nv50_fifo_chan_ctor(struct nv50_fifo *fifo, u64 vmm, u64 push, ret = nvkm_fifo_chan_ctor(&nv50_fifo_chan_func, &fifo->base, 0x10000, 0x1000, false, vmm, push, - (1ULL << NVKM_ENGINE_DMAOBJ) | - (1ULL << NVKM_ENGINE_SW) | - (1ULL << NVKM_ENGINE_GR) | - (1ULL << NVKM_ENGINE_MPEG), + BIT(NV50_FIFO_ENGN_SW) | + BIT(NV50_FIFO_ENGN_GR) | + BIT(NV50_FIFO_ENGN_MPEG) | + BIT(NV50_FIFO_ENGN_DMA), 0, 0xc00000, 0x2000, oclass, &chan->base); chan->fifo = fifo; if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c index 99c0d6a98e2b..b19a2bd4f26a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c @@ -191,9 +191,9 @@ nv04_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, ret = nvkm_fifo_chan_ctor(&nv04_fifo_dma_func, &fifo->base, 0x1000, 0x1000, false, 0, args->v0.pushbuf, - (1ULL << NVKM_ENGINE_DMAOBJ) | - (1ULL << NVKM_ENGINE_GR) | - (1ULL << NVKM_ENGINE_SW), + BIT(NV04_FIFO_ENGN_SW) | + BIT(NV04_FIFO_ENGN_GR) | + BIT(NV04_FIFO_ENGN_DMA), 0, 0x800000, 0x10000, oclass, &chan->base); chan->fifo = fifo; if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv10.c index f5f355ff005d..07d80d54a07c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv10.c @@ -62,9 +62,9 @@ nv10_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, ret = nvkm_fifo_chan_ctor(&nv04_fifo_dma_func, &fifo->base, 0x1000, 0x1000, false, 0, args->v0.pushbuf, - (1ULL << NVKM_ENGINE_DMAOBJ) | - (1ULL << NVKM_ENGINE_GR) | - (1ULL << NVKM_ENGINE_SW), + BIT(NV04_FIFO_ENGN_SW) | + BIT(NV04_FIFO_ENGN_GR) | + BIT(NV04_FIFO_ENGN_DMA), 0, 0x800000, 0x10000, oclass, &chan->base); chan->fifo = fifo; if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv17.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv17.c index 7edc6a564b5d..edd70a114218 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv17.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv17.c @@ -62,10 +62,10 @@ nv17_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, ret = nvkm_fifo_chan_ctor(&nv04_fifo_dma_func, &fifo->base, 0x1000, 0x1000, false, 0, args->v0.pushbuf, - (1ULL << NVKM_ENGINE_DMAOBJ) | - (1ULL << NVKM_ENGINE_GR) | - (1ULL << NVKM_ENGINE_MPEG) | /* NV31- */ - (1ULL << NVKM_ENGINE_SW), + BIT(NV04_FIFO_ENGN_SW) | + BIT(NV04_FIFO_ENGN_GR) | + BIT(NV04_FIFO_ENGN_MPEG) | /* NV31- */ + BIT(NV04_FIFO_ENGN_DMA), 0, 0x800000, 0x10000, oclass, &chan->base); chan->fifo = fifo; if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c index 28d6c305119a..9c32746ded83 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c @@ -217,10 +217,10 @@ nv40_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, ret = nvkm_fifo_chan_ctor(&nv40_fifo_dma_func, &fifo->base, 0x1000, 0x1000, false, 0, args->v0.pushbuf, - (1ULL << NVKM_ENGINE_DMAOBJ) | - (1ULL << NVKM_ENGINE_GR) | - (1ULL << NVKM_ENGINE_MPEG) | - (1ULL << NVKM_ENGINE_SW), + BIT(NV04_FIFO_ENGN_SW) | + BIT(NV04_FIFO_ENGN_GR) | + BIT(NV04_FIFO_ENGN_MPEG) | + BIT(NV04_FIFO_ENGN_DMA), 0, 0xc00000, 0x1000, oclass, &chan->base); chan->fifo = fifo; if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index c9efa6ae6466..6d2b77e3535b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -915,8 +915,8 @@ gk104_fifo_oneinit(struct nvkm_fifo *base) struct nvkm_subdev *subdev = &fifo->base.engine.subdev; struct nvkm_device *device = subdev->device; struct nvkm_vmm *bar = nvkm_bar_bar1_vmm(device); - int engn, runl, pbid, ret, i, j; - enum nvkm_devidx engidx; + struct nvkm_top_device *tdev; + int pbid, ret, i, j; u32 *map; fifo->pbdma_nr = fifo->func->pbdma->nr(fifo); @@ -930,25 +930,41 @@ gk104_fifo_oneinit(struct nvkm_fifo *base) map[i] = nvkm_rd32(device, 0x002390 + (i * 0x04)); /* Determine runlist configuration from topology device info. */ - i = 0; - while ((int)(engidx = nvkm_top_engine(device, i++, &runl, &engn)) >= 0) { + list_for_each_entry(tdev, &device->top->device, head) { + const int engn = tdev->engine; + char _en[16], *en; + + if (engn < 0) + continue; + /* Determine which PBDMA handles requests for this engine. */ for (j = 0, pbid = -1; j < fifo->pbdma_nr; j++) { - if (map[j] & (1 << runl)) { + if (map[j] & BIT(tdev->runlist)) { pbid = j; break; } } - nvkm_debug(subdev, "engine %2d: runlist %2d pbdma %2d (%s)\n", - engn, runl, pbid, nvkm_subdev_type[engidx]); + fifo->engine[engn].engine = nvkm_device_engine(device, tdev->type, tdev->inst); + if (!fifo->engine[engn].engine) { + snprintf(_en, sizeof(_en), "%s, %d", + nvkm_subdev_type[tdev->type], tdev->inst); + en = _en; + } else { + en = fifo->engine[engn].engine->subdev.name; + } - fifo->engine[engn].engine = nvkm_device_engine(device, engidx, 0); - fifo->engine[engn].runl = runl; + nvkm_debug(subdev, "engine %2d: runlist %2d pbdma %2d (%s)\n", + tdev->engine, tdev->runlist, pbid, en); + + fifo->engine[engn].runl = tdev->runlist; fifo->engine[engn].pbid = pbid; fifo->engine_nr = max(fifo->engine_nr, engn + 1); - fifo->runlist[runl].engm |= 1 << engn; - fifo->runlist_nr = max(fifo->runlist_nr, runl + 1); + fifo->runlist[tdev->runlist].engm |= BIT(engn); + fifo->runlist[tdev->runlist].engm_sw |= BIT(engn); + if (tdev->type == NVKM_ENGINE_GR) + fifo->runlist[tdev->runlist].engm_sw |= BIT(GK104_FIFO_ENGN_SW); + fifo->runlist_nr = max(fifo->runlist_nr, tdev->runlist + 1); } kfree(map); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h index 3418ade2146f..f2d12ae73944 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h @@ -35,6 +35,7 @@ struct gk104_fifo { struct list_head cgrp; struct list_head chan; u32 engm; + u32 engm_sw; } runlist[16]; int runlist_nr; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c index 9b2865e32a9f..1ebfbd707d37 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c @@ -251,13 +251,13 @@ gf100_fifo_gpfifo_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, ret = nvkm_fifo_chan_ctor(&gf100_fifo_gpfifo_func, &fifo->base, 0x1000, 0x1000, true, args->v0.vmm, 0, - (1ULL << NVKM_ENGINE_CE0) | - (1ULL << NVKM_ENGINE_CE1) | - (1ULL << NVKM_ENGINE_GR) | - (1ULL << NVKM_ENGINE_MSPDEC) | - (1ULL << NVKM_ENGINE_MSPPP) | - (1ULL << NVKM_ENGINE_MSVLD) | - (1ULL << NVKM_ENGINE_SW), + BIT(GF100_FIFO_ENGN_GR) | + BIT(GF100_FIFO_ENGN_MSPDEC) | + BIT(GF100_FIFO_ENGN_MSPPP) | + BIT(GF100_FIFO_ENGN_MSVLD) | + BIT(GF100_FIFO_ENGN_CE0) | + BIT(GF100_FIFO_ENGN_CE1) | + BIT(GF100_FIFO_ENGN_SW), 1, fifo->user.bar->addr, 0x1000, oclass, &chan->base); if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c index afd540b60cdd..8cedbc739102 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c @@ -255,23 +255,12 @@ gk104_fifo_gpfifo_new_(struct gk104_fifo *fifo, u64 *runlists, u16 *chid, { struct gk104_fifo_chan *chan; int runlist = ffs(*runlists) -1, ret, i; - unsigned long engm; - u64 subdevs = 0; u64 usermem; if (!vmm || runlist < 0 || runlist >= fifo->runlist_nr) return -EINVAL; *runlists = BIT_ULL(runlist); - engm = fifo->runlist[runlist].engm; - for_each_set_bit(i, &engm, fifo->engine_nr) { - if (fifo->engine[i].engine) - subdevs |= BIT_ULL(fifo->engine[i].engine->subdev.index); - } - - if (subdevs & BIT_ULL(NVKM_ENGINE_GR)) - subdevs |= BIT_ULL(NVKM_ENGINE_SW); - /* Allocate the channel. */ if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL))) return -ENOMEM; @@ -281,7 +270,7 @@ gk104_fifo_gpfifo_new_(struct gk104_fifo *fifo, u64 *runlists, u16 *chid, INIT_LIST_HEAD(&chan->head); ret = nvkm_fifo_chan_ctor(&gk104_fifo_gpfifo_func, &fifo->base, - 0x1000, 0x1000, true, vmm, 0, subdevs, + 0x1000, 0x1000, true, vmm, 0, fifo->runlist[runlist].engm_sw, 1, fifo->user.bar->addr, 0x200, oclass, &chan->base); if (ret) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c index 4c9c92eee17c..aaae4d8181e1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c @@ -128,8 +128,6 @@ gv100_fifo_gpfifo_new_(const struct nvkm_fifo_chan_func *func, struct nvkm_device *device = fifo->base.engine.subdev.device; struct gk104_fifo_chan *chan; int runlist = ffs(*runlists) -1, ret, i; - unsigned long engm; - u64 subdevs = 0; u64 usermem, mthd; u32 size; @@ -137,12 +135,6 @@ gv100_fifo_gpfifo_new_(const struct nvkm_fifo_chan_func *func, return -EINVAL; *runlists = BIT_ULL(runlist); - engm = fifo->runlist[runlist].engm; - for_each_set_bit(i, &engm, fifo->engine_nr) { - if (fifo->engine[i].engine) - subdevs |= BIT_ULL(fifo->engine[i].engine->subdev.index); - } - /* Allocate the channel. */ if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL))) return -ENOMEM; @@ -152,7 +144,7 @@ gv100_fifo_gpfifo_new_(const struct nvkm_fifo_chan_func *func, INIT_LIST_HEAD(&chan->head); ret = nvkm_fifo_chan_ctor(func, &fifo->base, 0x1000, 0x1000, true, vmm, - 0, subdevs, 1, fifo->user.bar->addr, 0x200, + 0, fifo->runlist[runlist].engm, 1, fifo->user.bar->addr, 0x200, oclass, &chan->base); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index 9093e86865c7..10fc23b3bf37 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -118,24 +118,6 @@ nvkm_top_fault(struct nvkm_device *device, int fault) return NVKM_SUBDEV_NR; } -enum nvkm_devidx -nvkm_top_engine(struct nvkm_device *device, int index, int *runl, int *engn) -{ - struct nvkm_top *top = device->top; - struct nvkm_top_device *info; - int n = 0; - - list_for_each_entry(info, &top->device, head) { - if (info->engine >= 0 && info->runlist >= 0 && n++ == index) { - *runl = info->runlist; - *engn = info->engine; - return info->index; - } - } - - return -ENODEV; -} - static int nvkm_top_oneinit(struct nvkm_subdev *subdev) { From 73529dffb62bd9af3c6cd02728a799529df354ee Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 21:39:41 +1000 Subject: [PATCH 63/87] drm/nouveau/fifo: use type+inst to determine context pointer offsets Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c | 8 ++++---- drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c | 4 ++-- .../gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c | 5 ++--- .../gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c | 13 +++++++------ .../gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c | 6 ++---- 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c index b298b05e2655..353b77d9b3dc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c @@ -47,7 +47,7 @@ g84_fifo_chan_ntfy(struct nvkm_fifo_chan *chan, u32 type, static int g84_fifo_chan_engine_addr(struct nvkm_engine *engine) { - switch (engine->subdev.index) { + switch (engine->subdev.type) { case NVKM_ENGINE_DMAOBJ: case NVKM_ENGINE_SW : return -1; case NVKM_ENGINE_GR : return 0x0020; @@ -59,7 +59,7 @@ g84_fifo_chan_engine_addr(struct nvkm_engine *engine) case NVKM_ENGINE_MSVLD : return 0x0080; case NVKM_ENGINE_CIPHER: case NVKM_ENGINE_SEC : return 0x00a0; - case NVKM_ENGINE_CE0 : return 0x00c0; + case NVKM_ENGINE_CE : return 0x00c0; default: WARN_ON(1); return -1; @@ -157,14 +157,14 @@ g84_fifo_chan_object_ctor(struct nvkm_fifo_chan *base, u32 handle = object->handle; u32 context; - switch (object->engine->subdev.index) { + switch (object->engine->subdev.type) { case NVKM_ENGINE_DMAOBJ: case NVKM_ENGINE_SW : context = 0x00000000; break; case NVKM_ENGINE_GR : context = 0x00100000; break; case NVKM_ENGINE_MPEG : case NVKM_ENGINE_MSPPP : context = 0x00200000; break; case NVKM_ENGINE_ME : - case NVKM_ENGINE_CE0 : context = 0x00300000; break; + case NVKM_ENGINE_CE : context = 0x00300000; break; case NVKM_ENGINE_VP : case NVKM_ENGINE_MSPDEC: context = 0x00400000; break; case NVKM_ENGINE_CIPHER: diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c index c314d9a7077c..c44d7c81dd52 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c @@ -31,7 +31,7 @@ static int nv50_fifo_chan_engine_addr(struct nvkm_engine *engine) { - switch (engine->subdev.index) { + switch (engine->subdev.type) { case NVKM_ENGINE_DMAOBJ: case NVKM_ENGINE_SW : return -1; case NVKM_ENGINE_GR : return 0x0000; @@ -170,7 +170,7 @@ nv50_fifo_chan_object_ctor(struct nvkm_fifo_chan *base, u32 handle = object->handle; u32 context; - switch (object->engine->subdev.index) { + switch (object->engine->subdev.type) { case NVKM_ENGINE_DMAOBJ: case NVKM_ENGINE_SW : context = 0x00000000; break; case NVKM_ENGINE_GR : context = 0x00100000; break; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c index b19a2bd4f26a..dbcdc5fab990 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c @@ -53,7 +53,7 @@ nv04_fifo_dma_object_ctor(struct nvkm_fifo_chan *base, u32 handle = object->handle; int hash; - switch (object->engine->subdev.index) { + switch (object->engine->subdev.type) { case NVKM_ENGINE_DMAOBJ: case NVKM_ENGINE_SW : context |= 0x00000000; break; case NVKM_ENGINE_GR : context |= 0x00010000; break; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c index 9c32746ded83..0411fb908457 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c @@ -35,7 +35,7 @@ static bool nv40_fifo_dma_engine(struct nvkm_engine *engine, u32 *reg, u32 *ctx) { - switch (engine->subdev.index) { + switch (engine->subdev.type) { case NVKM_ENGINE_DMAOBJ: case NVKM_ENGINE_SW: return false; @@ -157,7 +157,7 @@ nv40_fifo_dma_object_ctor(struct nvkm_fifo_chan *base, u32 handle = object->handle; int hash; - switch (object->engine->subdev.index) { + switch (object->engine->subdev.type) { case NVKM_ENGINE_DMAOBJ: case NVKM_ENGINE_SW : context |= 0x00000000; break; case NVKM_ENGINE_GR : context |= 0x00100000; break; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c index 1ebfbd707d37..4e78bbe3b94b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c @@ -52,11 +52,10 @@ gf100_fifo_chan_ntfy(struct nvkm_fifo_chan *chan, u32 type, static u32 gf100_fifo_gpfifo_engine_addr(struct nvkm_engine *engine) { - switch (engine->subdev.index) { + switch (engine->subdev.type) { case NVKM_ENGINE_SW : return 0; case NVKM_ENGINE_GR : return 0x0210; - case NVKM_ENGINE_CE0 : return 0x0230; - case NVKM_ENGINE_CE1 : return 0x0240; + case NVKM_ENGINE_CE : return 0x0230 + (engine->subdev.inst * 0x10); case NVKM_ENGINE_MSPDEC: return 0x0250; case NVKM_ENGINE_MSPPP : return 0x0260; case NVKM_ENGINE_MSVLD : return 0x0270; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c index 8cedbc739102..b6900a52bcce 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c @@ -74,10 +74,9 @@ gk104_fifo_gpfifo_kick(struct gk104_fifo_chan *chan) static u32 gk104_fifo_gpfifo_engine_addr(struct nvkm_engine *engine) { - switch (engine->subdev.index) { + switch (engine->subdev.type) { case NVKM_ENGINE_SW : - case NVKM_ENGINE_CE0...NVKM_ENGINE_CE_LAST: - return 0; + case NVKM_ENGINE_CE : return 0; case NVKM_ENGINE_GR : return 0x0210; case NVKM_ENGINE_SEC : return 0x0220; case NVKM_ENGINE_MSPDEC: return 0x0250; @@ -85,9 +84,11 @@ gk104_fifo_gpfifo_engine_addr(struct nvkm_engine *engine) case NVKM_ENGINE_MSVLD : return 0x0270; case NVKM_ENGINE_VIC : return 0x0280; case NVKM_ENGINE_MSENC : return 0x0290; - case NVKM_ENGINE_NVDEC0: return 0x02100270; - case NVKM_ENGINE_NVENC0: return 0x02100290; - case NVKM_ENGINE_NVENC1: return 0x0210; + case NVKM_ENGINE_NVDEC : return 0x02100270; + case NVKM_ENGINE_NVENC : + if (engine->subdev.inst) + return 0x0210; + return 0x02100290; default: WARN_ON(1); return 0; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c index aaae4d8181e1..ee4967b706a7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogv100.c @@ -70,8 +70,7 @@ gv100_fifo_gpfifo_engine_fini(struct nvkm_fifo_chan *base, struct nvkm_gpuobj *inst = chan->base.inst; int ret; - if (engine->subdev.index >= NVKM_ENGINE_CE0 && - engine->subdev.index <= NVKM_ENGINE_CE_LAST) + if (engine->subdev.type == NVKM_ENGINE_CE) return gk104_fifo_gpfifo_kick(chan); ret = gv100_fifo_gpfifo_engine_valid(chan, false, false); @@ -93,8 +92,7 @@ gv100_fifo_gpfifo_engine_init(struct nvkm_fifo_chan *base, struct gk104_fifo_engn *engn = gk104_fifo_gpfifo_engine(chan, engine); struct nvkm_gpuobj *inst = chan->base.inst; - if (engine->subdev.index >= NVKM_ENGINE_CE0 && - engine->subdev.index <= NVKM_ENGINE_CE_LAST) + if (engine->subdev.type == NVKM_ENGINE_CE) return 0; nvkm_kmap(inst); From c6198d3465a9ff5a67023cc1c497a273a913d46a Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 18:40:48 +1000 Subject: [PATCH 64/87] drm/nouveau/fifo/gf100: use fifo engine id for engine recovery mask Instead of subdev index. Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index 9713f4b171a2..f339d18191dc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c @@ -150,23 +150,17 @@ gf100_fifo_recover_work(struct work_struct *w) struct nvkm_device *device = fifo->base.engine.subdev.device; struct nvkm_engine *engine; unsigned long flags; - u32 engn, engm = 0; - u64 mask, todo; + u32 engm, engn, todo; spin_lock_irqsave(&fifo->base.lock, flags); - mask = fifo->recover.mask; + engm = fifo->recover.mask; fifo->recover.mask = 0ULL; spin_unlock_irqrestore(&fifo->base.lock, flags); - for (todo = mask; engn = __ffs64(todo), todo; todo &= ~BIT_ULL(engn)) { - if (!(engine = nvkm_device_engine(device, engn, 0))) - continue; - engm |= 1 << gf100_fifo_engine_id(&fifo->base, engine); - } nvkm_mask(device, 0x002630, engm, engm); - for (todo = mask; engn = __ffs64(todo), todo; todo &= ~BIT_ULL(engn)) { - if ((engine = nvkm_device_engine(device, engn, 0))) { + for (todo = engm; engn = __ffs(todo), todo; todo &= ~BIT_ULL(engn)) { + if ((engine = gf100_fifo_id_engine(&fifo->base, engn))) { nvkm_subdev_fini(&engine->subdev, false); WARN_ON(nvkm_subdev_init(&engine->subdev)); } @@ -184,6 +178,7 @@ gf100_fifo_recover(struct gf100_fifo *fifo, struct nvkm_engine *engine, struct nvkm_subdev *subdev = &fifo->base.engine.subdev; struct nvkm_device *device = subdev->device; u32 chid = chan->base.chid; + int engi = gf100_fifo_engine_id(&fifo->base, engine); nvkm_error(subdev, "%s engine fault on channel %d, recovering...\n", engine->subdev.name, chid); @@ -193,8 +188,8 @@ gf100_fifo_recover(struct gf100_fifo *fifo, struct nvkm_engine *engine, list_del_init(&chan->head); chan->killed = true; - if (engine != &fifo->base.engine) - fifo->recover.mask |= 1ULL << engine->subdev.index; + if (engi >= 0 && engi != GF100_FIFO_ENGN_SW) + fifo->recover.mask |= BIT(engi); schedule_work(&fifo->recover.work); nvkm_fifo_kevent(&fifo->base, chid); } From 088bfe43f0bde94729f246ea236f4c0331fd560c Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 6 Feb 2021 21:47:44 +1000 Subject: [PATCH 65/87] drm/nouveau/fifo/gf100-: switch static mmu fault id list to type+inst Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/enum.h | 1 + drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | 6 +++--- drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 11 ++++++----- drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c | 4 ++-- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/enum.h b/drivers/gpu/drm/nouveau/include/nvkm/core/enum.h index ce98efd4b209..070462be35d9 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/enum.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/enum.h @@ -8,6 +8,7 @@ struct nvkm_enum { const char *name; const void *data; u32 data2; + int inst; }; const struct nvkm_enum *nvkm_enum_find(const struct nvkm_enum *, u32 value); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index b652d7c99dda..ea82b5db7c43 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -25,7 +25,7 @@ struct nvkm_top_device { u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_subdev_type, int); -int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_devidx); +int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_subdev_type, int); enum nvkm_devidx nvkm_top_fault(struct nvkm_device *, int fault); int gk104_top_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_top **); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index f339d18191dc..8b4f36b3e34b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c @@ -205,8 +205,8 @@ gf100_fifo_fault_engine[] = { { 0x11, "PMSPPP", NULL, NVKM_ENGINE_MSPPP }, { 0x13, "PCOUNTER" }, { 0x14, "PMSPDEC", NULL, NVKM_ENGINE_MSPDEC }, - { 0x15, "PCE0", NULL, NVKM_ENGINE_CE0 }, - { 0x16, "PCE1", NULL, NVKM_ENGINE_CE1 }, + { 0x15, "PCE0", NULL, NVKM_ENGINE_CE, 0 }, + { 0x16, "PCE1", NULL, NVKM_ENGINE_CE, 1 }, { 0x17, "PMU" }, {} }; @@ -286,7 +286,7 @@ gf100_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) nvkm_mask(device, 0x001718, 0x00000000, 0x00000000); break; default: - engine = nvkm_device_engine(device, eu->data2, 0); + engine = nvkm_device_engine(device, eu->data2, eu->inst); break; } } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 6d2b77e3535b..fc6603b5a6e4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -433,11 +433,12 @@ gk104_fifo_recover_engn(struct gk104_fifo *fifo, int engn) * called from the fault handler already. */ if (!status.faulted && engine) { - mmui = nvkm_top_fault_id(device, engine->subdev.index); + mmui = nvkm_top_fault_id(device, engine->subdev.type, engine->subdev.inst); if (mmui < 0) { const struct nvkm_enum *en = fifo->func->fault.engine; for (; en && en->name; en++) { - if (en->data2 == engine->subdev.index) { + if (en->data2 == engine->subdev.type && + en->inst == engine->subdev.inst) { mmui = en->value; break; } @@ -1111,12 +1112,12 @@ gk104_fifo_fault_engine[] = { { 0x11, "MSPPP", NULL, NVKM_ENGINE_MSPPP }, { 0x13, "PERF" }, { 0x14, "MSPDEC", NULL, NVKM_ENGINE_MSPDEC }, - { 0x15, "CE0", NULL, NVKM_ENGINE_CE0 }, - { 0x16, "CE1", NULL, NVKM_ENGINE_CE1 }, + { 0x15, "CE0", NULL, NVKM_ENGINE_CE, 0 }, + { 0x16, "CE1", NULL, NVKM_ENGINE_CE, 1 }, { 0x17, "PMU" }, { 0x18, "PTP" }, { 0x19, "MSENC", NULL, NVKM_ENGINE_MSENC }, - { 0x1b, "CE2", NULL, NVKM_ENGINE_CE2 }, + { 0x1b, "CE2", NULL, NVKM_ENGINE_CE, 2 }, {} }; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index 10fc23b3bf37..c34046803e0d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -91,13 +91,13 @@ nvkm_top_intr_mask(struct nvkm_device *device, enum nvkm_subdev_type type, int i } int -nvkm_top_fault_id(struct nvkm_device *device, enum nvkm_devidx devidx) +nvkm_top_fault_id(struct nvkm_device *device, enum nvkm_subdev_type type, int inst) { struct nvkm_top *top = device->top; struct nvkm_top_device *info; list_for_each_entry(info, &top->device, head) { - if (info->index == devidx && info->fault >= 0) + if (info->type == type && info->inst == inst && info->fault >= 0) return info->fault; } From ba083ec7a6633c0f6ee0c9895e696313d7b2cf25 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 8 Feb 2021 11:23:56 +1000 Subject: [PATCH 66/87] drm/nouveau/fifo/gk104-: switch dev_top fault handling to type+inst Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../gpu/drm/nouveau/include/nvkm/subdev/top.h | 3 +-- .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 18 ++++++++--------- .../gpu/drm/nouveau/nvkm/engine/fifo/tu102.c | 20 ++++++++----------- .../gpu/drm/nouveau/nvkm/subdev/top/base.c | 7 +++---- .../gpu/drm/nouveau/nvkm/subdev/top/gk104.c | 2 +- 5 files changed, 21 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index ea82b5db7c43..a642f5c4ac45 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -12,7 +12,6 @@ struct nvkm_top { struct nvkm_top_device { enum nvkm_subdev_type type; int inst; - enum nvkm_devidx index; u32 addr; int fault; int engine; @@ -26,7 +25,7 @@ u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_subdev_type, int); u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_subdev_type, int); int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_subdev_type, int); -enum nvkm_devidx nvkm_top_fault(struct nvkm_device *, int fault); +struct nvkm_subdev *nvkm_top_fault(struct nvkm_device *, int fault); int gk104_top_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_top **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index fc6603b5a6e4..8266b9b4585f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -483,7 +483,8 @@ gk104_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) struct nvkm_engine *engine = NULL; struct nvkm_fifo_chan *chan; unsigned long flags; - char ct[8] = "HUB/", en[16] = ""; + const char *en = ""; + char ct[8] = "HUB/"; er = nvkm_enum_find(fifo->func->fault.reason, info->reason); ee = nvkm_enum_find(fifo->func->fault.engine, info->engine); @@ -513,17 +514,14 @@ gk104_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) } if (ee == NULL) { - enum nvkm_devidx engidx = nvkm_top_fault(device, info->engine); - if (engidx < NVKM_SUBDEV_NR) { - const char *src = nvkm_subdev_type[engidx]; - char *dst = en; - do { - *dst++ = toupper(*src++); - } while(*src); - engine = nvkm_device_engine(device, engidx, 0); + struct nvkm_subdev *subdev = nvkm_top_fault(device, info->engine); + if (subdev) { + if (subdev->func == &nvkm_engine) + engine = container_of(subdev, typeof(*engine), subdev); + en = engine->subdev.name; } } else { - snprintf(en, sizeof(en), "%s", ee->name); + en = ee->name; } spin_lock_irqsave(&fifo->base.lock, flags); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c index 1bc6b25d9e3b..e417044cc347 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.c @@ -278,7 +278,8 @@ tu102_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) struct nvkm_engine *engine = NULL; struct nvkm_fifo_chan *chan; unsigned long flags; - char ct[8] = "HUB/", en[16] = ""; + const char *en = ""; + char ct[8] = "HUB/"; int engn; er = nvkm_enum_find(fifo->func->fault.reason, info->reason); @@ -309,19 +310,14 @@ tu102_fifo_fault(struct nvkm_fifo *base, struct nvkm_fault_data *info) } if (ee == NULL) { - enum nvkm_devidx engidx = nvkm_top_fault(device, info->engine); - - if (engidx < NVKM_SUBDEV_NR) { - const char *src = nvkm_subdev_type[engidx]; - char *dst = en; - - do { - *dst++ = toupper(*src++); - } while (*src); - engine = nvkm_device_engine(device, engidx, 0); + struct nvkm_subdev *subdev = nvkm_top_fault(device, info->engine); + if (subdev) { + if (subdev->func == &nvkm_engine) + engine = container_of(subdev, typeof(*engine), subdev); + en = engine->subdev.name; } } else { - snprintf(en, sizeof(en), "%s", ee->name); + en = ee->name; } spin_lock_irqsave(&fifo->base.lock, flags); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c index c34046803e0d..28d0789f50fe 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c @@ -30,7 +30,6 @@ nvkm_top_device_new(struct nvkm_top *top) if (info) { info->type = NVKM_SUBDEV_NR; info->inst = -1; - info->index = NVKM_SUBDEV_NR; info->addr = 0; info->fault = -1; info->engine = -1; @@ -104,7 +103,7 @@ nvkm_top_fault_id(struct nvkm_device *device, enum nvkm_subdev_type type, int in return -ENOENT; } -enum nvkm_devidx +struct nvkm_subdev * nvkm_top_fault(struct nvkm_device *device, int fault) { struct nvkm_top *top = device->top; @@ -112,10 +111,10 @@ nvkm_top_fault(struct nvkm_device *device, int fault) list_for_each_entry(info, &top->device, head) { if (info->fault == fault) - return info->index; + return nvkm_device_subdev(device, info->type, info->inst); } - return NVKM_SUBDEV_NR; + return NULL; } static int diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c index 4bf0740293cd..870f926ec35f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c @@ -70,7 +70,7 @@ gk104_top_oneinit(struct nvkm_top *top) continue; /* Translate engine type to NVKM engine identifier. */ -#define I_(T,I) do { info->type = (T); info->inst = (I); info->index = (T) + (I); } while(0) +#define I_(T,I) do { info->type = (T); info->inst = (I); } while(0) #define O_(T,I) do { WARN_ON(inst); I_(T, I); } while (0) switch (type) { case 0x00000000: O_(NVKM_ENGINE_GR , 0); break; From f8fabd31fabaa3b3e600209b7a1f57b5d641f6af Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 8 Feb 2021 07:49:10 +1000 Subject: [PATCH 67/87] drm/nouveau/fifo/gk104-: remove use of subdev index in runlist topology info Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvif/cl0080.h | 52 +++++++++---------- drivers/gpu/drm/nouveau/include/nvif/fifo.h | 6 +-- drivers/gpu/drm/nouveau/nouveau_abi16.c | 14 ++--- drivers/gpu/drm/nouveau/nouveau_chan.c | 2 +- drivers/gpu/drm/nouveau/nouveau_drm.c | 2 +- drivers/gpu/drm/nouveau/nvif/fifo.c | 30 ++++------- .../gpu/drm/nouveau/nvkm/engine/device/user.c | 38 ++------------ .../gpu/drm/nouveau/nvkm/engine/fifo/base.c | 2 +- .../gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | 38 +++++++++++--- 9 files changed, 80 insertions(+), 104 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl0080.h b/drivers/gpu/drm/nouveau/include/nvif/cl0080.h index 57d4f457a7d4..0b86c44878e0 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/cl0080.h +++ b/drivers/gpu/drm/nouveau/include/nvif/cl0080.h @@ -60,37 +60,33 @@ struct nv_device_time_v0 { #define NV_DEVICE_INFO_UNIT (0xffffffffULL << 32) #define NV_DEVICE_INFO(n) ((n) | (0x00000000ULL << 32)) -#define NV_DEVICE_FIFO(n) ((n) | (0x00000001ULL << 32)) +#define NV_DEVICE_HOST(n) ((n) | (0x00000001ULL << 32)) -/* This will be returned for unsupported queries. */ +/* This will be returned in the mthd field for unsupported queries. */ #define NV_DEVICE_INFO_INVALID ~0ULL -/* These return a mask of available engines of particular type. */ -#define NV_DEVICE_INFO_ENGINE_SW NV_DEVICE_INFO(0x00000000) -#define NV_DEVICE_INFO_ENGINE_GR NV_DEVICE_INFO(0x00000001) -#define NV_DEVICE_INFO_ENGINE_MPEG NV_DEVICE_INFO(0x00000002) -#define NV_DEVICE_INFO_ENGINE_ME NV_DEVICE_INFO(0x00000003) -#define NV_DEVICE_INFO_ENGINE_CIPHER NV_DEVICE_INFO(0x00000004) -#define NV_DEVICE_INFO_ENGINE_BSP NV_DEVICE_INFO(0x00000005) -#define NV_DEVICE_INFO_ENGINE_VP NV_DEVICE_INFO(0x00000006) -#define NV_DEVICE_INFO_ENGINE_CE NV_DEVICE_INFO(0x00000007) -#define NV_DEVICE_INFO_ENGINE_SEC NV_DEVICE_INFO(0x00000008) -#define NV_DEVICE_INFO_ENGINE_MSVLD NV_DEVICE_INFO(0x00000009) -#define NV_DEVICE_INFO_ENGINE_MSPDEC NV_DEVICE_INFO(0x0000000a) -#define NV_DEVICE_INFO_ENGINE_MSPPP NV_DEVICE_INFO(0x0000000b) -#define NV_DEVICE_INFO_ENGINE_MSENC NV_DEVICE_INFO(0x0000000c) -#define NV_DEVICE_INFO_ENGINE_VIC NV_DEVICE_INFO(0x0000000d) -#define NV_DEVICE_INFO_ENGINE_SEC2 NV_DEVICE_INFO(0x0000000e) -#define NV_DEVICE_INFO_ENGINE_NVDEC NV_DEVICE_INFO(0x0000000f) -#define NV_DEVICE_INFO_ENGINE_NVENC NV_DEVICE_INFO(0x00000010) - +/* Returns the number of available runlists. */ +#define NV_DEVICE_HOST_RUNLISTS NV_DEVICE_HOST(0x00000000) /* Returns the number of available channels. */ -#define NV_DEVICE_FIFO_CHANNELS NV_DEVICE_FIFO(0x00000000) +#define NV_DEVICE_HOST_CHANNELS NV_DEVICE_HOST(0x00000001) -/* Returns a mask of available runlists. */ -#define NV_DEVICE_FIFO_RUNLISTS NV_DEVICE_FIFO(0x00000001) - -/* These return a mask of engines available on a particular runlist. */ -#define NV_DEVICE_FIFO_RUNLIST_ENGINES(n) ((n) + NV_DEVICE_FIFO(0x00000010)) -#define NV_DEVICE_FIFO_RUNLIST_ENGINES__SIZE 64 +/* Returns a mask of available engine types on runlist(data). */ +#define NV_DEVICE_HOST_RUNLIST_ENGINES NV_DEVICE_HOST(0x00000100) +#define NV_DEVICE_HOST_RUNLIST_ENGINES_SW 0x00000001 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_GR 0x00000002 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_MPEG 0x00000004 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_ME 0x00000008 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_CIPHER 0x00000010 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_BSP 0x00000020 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_VP 0x00000040 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_CE 0x00000080 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_SEC 0x00000100 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_MSVLD 0x00000200 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_MSPDEC 0x00000400 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_MSPPP 0x00000800 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_MSENC 0x00001000 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_VIC 0x00002000 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_SEC2 0x00004000 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_NVDEC 0x00008000 +#define NV_DEVICE_HOST_RUNLIST_ENGINES_NVENC 0x00010000 #endif diff --git a/drivers/gpu/drm/nouveau/include/nvif/fifo.h b/drivers/gpu/drm/nouveau/include/nvif/fifo.h index e9468c9f9abf..d351ac890ca1 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/fifo.h +++ b/drivers/gpu/drm/nouveau/include/nvif/fifo.h @@ -2,15 +2,15 @@ #define __NVIF_FIFO_H__ #include -/* Returns mask of runlists that support a NV_DEVICE_INFO_ENGINE_* type. */ +/* Returns mask of runlists that support a NV_DEVICE_INFO_RUNLIST_ENGINES_* type. */ u64 nvif_fifo_runlist(struct nvif_device *, u64 engine); /* CE-supporting runlists (excluding GRCE, if others exist). */ static inline u64 nvif_fifo_runlist_ce(struct nvif_device *device) { - u64 runmgr = nvif_fifo_runlist(device, NV_DEVICE_INFO_ENGINE_GR); - u64 runmce = nvif_fifo_runlist(device, NV_DEVICE_INFO_ENGINE_CE); + u64 runmgr = nvif_fifo_runlist(device, NV_DEVICE_HOST_RUNLIST_ENGINES_GR); + u64 runmce = nvif_fifo_runlist(device, NV_DEVICE_HOST_RUNLIST_ENGINES_CE); if (runmce && !(runmce &= ~runmgr)) runmce = runmgr; return runmce; diff --git a/drivers/gpu/drm/nouveau/nouveau_abi16.c b/drivers/gpu/drm/nouveau/nouveau_abi16.c index f08b31d84d4d..0a9334deffe2 100644 --- a/drivers/gpu/drm/nouveau/nouveau_abi16.c +++ b/drivers/gpu/drm/nouveau/nouveau_abi16.c @@ -269,19 +269,19 @@ nouveau_abi16_ioctl_channel_alloc(ABI16_IOCTL_ARGS) if (device->info.family >= NV_DEVICE_INFO_V0_KEPLER) { if (init->fb_ctxdma_handle == ~0) { switch (init->tt_ctxdma_handle) { - case 0x01: engine = NV_DEVICE_INFO_ENGINE_GR ; break; - case 0x02: engine = NV_DEVICE_INFO_ENGINE_MSPDEC; break; - case 0x04: engine = NV_DEVICE_INFO_ENGINE_MSPPP ; break; - case 0x08: engine = NV_DEVICE_INFO_ENGINE_MSVLD ; break; - case 0x30: engine = NV_DEVICE_INFO_ENGINE_CE ; break; + case 0x01: engine = NV_DEVICE_HOST_RUNLIST_ENGINES_GR ; break; + case 0x02: engine = NV_DEVICE_HOST_RUNLIST_ENGINES_MSPDEC; break; + case 0x04: engine = NV_DEVICE_HOST_RUNLIST_ENGINES_MSPPP ; break; + case 0x08: engine = NV_DEVICE_HOST_RUNLIST_ENGINES_MSVLD ; break; + case 0x30: engine = NV_DEVICE_HOST_RUNLIST_ENGINES_CE ; break; default: return nouveau_abi16_put(abi16, -ENOSYS); } } else { - engine = NV_DEVICE_INFO_ENGINE_GR; + engine = NV_DEVICE_HOST_RUNLIST_ENGINES_GR; } - if (engine != NV_DEVICE_INFO_ENGINE_CE) + if (engine != NV_DEVICE_HOST_RUNLIST_ENGINES_CE) engine = nvif_fifo_runlist(device, engine); else engine = nvif_fifo_runlist_ce(device); diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.c b/drivers/gpu/drm/nouveau/nouveau_chan.c index e48f1f7eb370..7cfac265fd45 100644 --- a/drivers/gpu/drm/nouveau/nouveau_chan.c +++ b/drivers/gpu/drm/nouveau/nouveau_chan.c @@ -556,7 +556,7 @@ nouveau_channels_init(struct nouveau_drm *drm) } args = { .m.version = 1, .m.count = sizeof(args.v) / sizeof(args.v.channels), - .v.channels.mthd = NV_DEVICE_FIFO_CHANNELS, + .v.channels.mthd = NV_DEVICE_HOST_CHANNELS, }; struct nvif_object *device = &drm->client.device.object; int ret; diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 1b2169e9c295..885815ea917f 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -344,7 +344,7 @@ nouveau_accel_gr_init(struct nouveau_drm *drm) /* Allocate channel that has access to the graphics engine. */ if (device->info.family >= NV_DEVICE_INFO_V0_KEPLER) { - arg0 = nvif_fifo_runlist(device, NV_DEVICE_INFO_ENGINE_GR); + arg0 = nvif_fifo_runlist(device, NV_DEVICE_HOST_RUNLIST_ENGINES_GR); arg1 = 1; } else { arg0 = NvDmaFB; diff --git a/drivers/gpu/drm/nouveau/nvif/fifo.c b/drivers/gpu/drm/nouveau/nvif/fifo.c index e84a2e2ff043..a463289962b2 100644 --- a/drivers/gpu/drm/nouveau/nvif/fifo.c +++ b/drivers/gpu/drm/nouveau/nvif/fifo.c @@ -41,9 +41,11 @@ nvif_fifo_runlists(struct nvif_device *device) return -ENOMEM; a->m.version = 1; a->m.count = sizeof(a->v) / sizeof(a->v.runlists); - a->v.runlists.mthd = NV_DEVICE_FIFO_RUNLISTS; - for (i = 0; i < ARRAY_SIZE(a->v.runlist); i++) - a->v.runlist[i].mthd = NV_DEVICE_FIFO_RUNLIST_ENGINES(i); + a->v.runlists.mthd = NV_DEVICE_HOST_RUNLISTS; + for (i = 0; i < ARRAY_SIZE(a->v.runlist); i++) { + a->v.runlist[i].mthd = NV_DEVICE_HOST_RUNLIST_ENGINES; + a->v.runlist[i].data = i; + } ret = nvif_object_mthd(object, NV_DEVICE_V0_INFO, a, sizeof(*a)); if (ret) @@ -58,7 +60,7 @@ nvif_fifo_runlists(struct nvif_device *device) } for (i = 0; i < device->runlists; i++) { - if (a->v.runlists.data & BIT_ULL(i)) + if (a->v.runlist[i].mthd != NV_DEVICE_INFO_INVALID) device->runlist[i].engines = a->v.runlist[i].data; } @@ -70,29 +72,15 @@ done: u64 nvif_fifo_runlist(struct nvif_device *device, u64 engine) { - struct nvif_object *object = &device->object; - struct { - struct nv_device_info_v1 m; - struct { - struct nv_device_info_v1_data engine; - } v; - } a = { - .m.version = 1, - .m.count = sizeof(a.v) / sizeof(a.v.engine), - .v.engine.mthd = engine, - }; u64 runm = 0; int ret, i; if ((ret = nvif_fifo_runlists(device))) return runm; - ret = nvif_object_mthd(object, NV_DEVICE_V0_INFO, &a, sizeof(a)); - if (ret == 0) { - for (i = 0; i < device->runlists; i++) { - if (device->runlist[i].engines & a.v.engine.data) - runm |= BIT_ULL(i); - } + for (i = 0; i < device->runlists; i++) { + if (device->runlist[i].engines & engine) + runm |= BIT_ULL(i); } return runm; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c index e1958070b895..fea9d8f2b10c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c @@ -43,15 +43,15 @@ static int nvkm_udevice_info_subdev(struct nvkm_device *device, u64 mthd, u64 *data) { struct nvkm_subdev *subdev; - enum nvkm_devidx subidx; + enum nvkm_subdev_type type; switch (mthd & NV_DEVICE_INFO_UNIT) { - case NV_DEVICE_FIFO(0): subidx = NVKM_ENGINE_FIFO; break; + case NV_DEVICE_HOST(0): type = NVKM_ENGINE_FIFO; break; default: return -EINVAL; } - subdev = nvkm_device_subdev(device, subidx, 0); + subdev = nvkm_device_subdev(device, type, 0); if (subdev) return nvkm_subdev_info(subdev, mthd, data); return -ENODEV; @@ -66,37 +66,7 @@ nvkm_udevice_info_v1(struct nvkm_device *device, args->mthd = NV_DEVICE_INFO_INVALID; return; } - - switch (args->mthd) { -#define ENGINE__(A,B,C) NV_DEVICE_INFO_ENGINE_##A: { int _i; \ - for (_i = (B), args->data = 0ULL; _i <= (C); _i++) { \ - if (nvkm_device_engine(device, _i, 0)) \ - args->data |= BIT_ULL(_i); \ - } \ -} -#define ENGINE_A(A) ENGINE__(A, NVKM_ENGINE_##A , NVKM_ENGINE_##A) -#define ENGINE_B(A) ENGINE__(A, NVKM_ENGINE_##A##0, NVKM_ENGINE_##A##_LAST) - case ENGINE_A(SW ); break; - case ENGINE_A(GR ); break; - case ENGINE_A(MPEG ); break; - case ENGINE_A(ME ); break; - case ENGINE_A(CIPHER); break; - case ENGINE_A(BSP ); break; - case ENGINE_A(VP ); break; - case ENGINE_B(CE ); break; - case ENGINE_A(SEC ); break; - case ENGINE_A(MSVLD ); break; - case ENGINE_A(MSPDEC); break; - case ENGINE_A(MSPPP ); break; - case ENGINE_A(MSENC ); break; - case ENGINE_A(VIC ); break; - case ENGINE_A(SEC2 ); break; - case ENGINE_B(NVDEC ); break; - case ENGINE_B(NVENC ); break; - default: - args->mthd = NV_DEVICE_INFO_INVALID; - break; - } + args->mthd = NV_DEVICE_INFO_INVALID; } static int diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c index d4061ef90ec8..2ed4ff05d207 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c @@ -292,7 +292,7 @@ nvkm_fifo_info(struct nvkm_engine *engine, u64 mthd, u64 *data) { struct nvkm_fifo *fifo = nvkm_fifo(engine); switch (mthd) { - case NV_DEVICE_FIFO_CHANNELS: *data = fifo->nr; return 0; + case NV_DEVICE_HOST_CHANNELS: *data = fifo->nr; return 0; default: if (fifo->func->info) return fifo->func->info(fifo, mthd, data); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 8266b9b4585f..69da601f1754 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c @@ -884,19 +884,41 @@ gk104_fifo_info(struct nvkm_fifo *base, u64 mthd, u64 *data) { struct gk104_fifo *fifo = gk104_fifo(base); switch (mthd) { - case NV_DEVICE_FIFO_RUNLISTS: + case NV_DEVICE_HOST_RUNLISTS: *data = (1ULL << fifo->runlist_nr) - 1; return 0; - case NV_DEVICE_FIFO_RUNLIST_ENGINES(0)... - NV_DEVICE_FIFO_RUNLIST_ENGINES(63): { - int runl = mthd - NV_DEVICE_FIFO_RUNLIST_ENGINES(0), engn; - if (runl < fifo->runlist_nr) { - unsigned long engm = fifo->runlist[runl].engm; + case NV_DEVICE_HOST_RUNLIST_ENGINES: { + if (*data < fifo->runlist_nr) { + unsigned long engm = fifo->runlist[*data].engm; struct nvkm_engine *engine; + int engn; *data = 0; for_each_set_bit(engn, &engm, fifo->engine_nr) { - if ((engine = fifo->engine[engn].engine)) - *data |= BIT_ULL(engine->subdev.index); + if ((engine = fifo->engine[engn].engine)) { +#define CASE(n) case NVKM_ENGINE_##n: *data |= NV_DEVICE_HOST_RUNLIST_ENGINES_##n; break + switch (engine->subdev.type) { + CASE(SW ); + CASE(GR ); + CASE(MPEG ); + CASE(ME ); + CASE(CIPHER); + CASE(BSP ); + CASE(VP ); + CASE(CE ); + CASE(SEC ); + CASE(MSVLD ); + CASE(MSPDEC); + CASE(MSPPP ); + CASE(MSENC ); + CASE(VIC ); + CASE(SEC2 ); + CASE(NVDEC ); + CASE(NVENC ); + default: + WARN_ON(1); + break; + } + } } return 0; } From 864d37c3d8d4ee9e38a1a68c0048e285760a2eb2 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 15:38:44 +1000 Subject: [PATCH 68/87] drm/nouveau/gr: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/engine/gr.h | 80 ++++----- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 169 +++++++++--------- drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/g84.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gf100.c | 10 +- .../gpu/drm/nouveau/nvkm/engine/gr/gf100.h | 2 +- .../gpu/drm/nouveau/nvkm/engine/gr/gf104.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gf108.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gf110.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gf117.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gf119.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gk104.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gk110.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gk110b.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/gr/gk208.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gk20a.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gm107.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gm200.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gm20b.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gp100.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gp102.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gp104.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gp107.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gp108.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gp10b.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gt200.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gt215.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/gv100.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/mcp79.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/mcp89.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c | 8 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.h | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv15.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv17.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c | 8 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.h | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c | 8 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.h | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv44.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c | 8 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.h | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/priv.h | 4 +- .../gpu/drm/nouveau/nvkm/engine/gr/tu102.c | 4 +- 52 files changed, 227 insertions(+), 229 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 647b899555f1..948ceef5207b 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_gr *gr; struct nvkm_engine *ifb; struct nvkm_engine *me; struct nvkm_engine *mpeg; @@ -116,7 +115,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*gr )(struct nvkm_device *, int idx, struct nvkm_gr **); int (*ifb )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*me )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*mpeg )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 94d25a7b30c4..a10300ccd7be 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -31,4 +31,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_CIPHER , struct nvkm_engine , cipher) NVKM_LAYOUT_ONCE(NVKM_ENGINE_DISP , struct nvkm_disp , disp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_DMAOBJ , struct nvkm_dma , dma) NVKM_LAYOUT_ONCE(NVKM_ENGINE_FIFO , struct nvkm_fifo , fifo) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_GR , struct nvkm_gr , gr) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h index 1530c81f86a2..b28b752ffaa2 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h @@ -14,44 +14,44 @@ int nvkm_gr_ctxsw_pause(struct nvkm_device *); int nvkm_gr_ctxsw_resume(struct nvkm_device *); u32 nvkm_gr_ctxsw_inst(struct nvkm_device *); -int nv04_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv10_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv15_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv17_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv20_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv25_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv2a_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv30_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv34_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv35_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv40_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv44_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int nv50_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int g84_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gt200_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int mcp79_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gt215_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int mcp89_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gf100_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gf104_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gf108_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gf110_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gf117_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gf119_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gk104_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gk110_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gk110b_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gk208_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gk20a_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gm107_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gm200_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gm20b_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gp100_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gp102_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gp104_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gp107_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gp108_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gp10b_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int gv100_gr_new(struct nvkm_device *, int, struct nvkm_gr **); -int tu102_gr_new(struct nvkm_device *, int, struct nvkm_gr **); +int nv04_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv10_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv15_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv17_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv20_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv25_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv2a_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv30_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv34_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv35_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv40_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv44_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int nv50_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int g84_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gt200_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int mcp79_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gt215_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int mcp89_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gf100_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gf104_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gf108_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gf110_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gf117_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gf119_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gk104_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gk110_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gk110b_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gk208_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gk20a_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gm107_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gm200_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gm20b_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gp100_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gp102_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gp104_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gp107_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gp108_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gp10b_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int gv100_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); +int tu102_gr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_gr **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 9f84c5413ffd..cea356d3e17a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_GR ] = "gr", [NVKM_ENGINE_IFB ] = "ifb", [NVKM_ENGINE_ME ] = "me", [NVKM_ENGINE_MPEG ] = "mpeg", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index b87c56800cfe..9dbec04c050d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -91,7 +91,7 @@ nv4_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv04_fifo_new }, - .gr = nv04_gr_new, + .gr = { 0x00000001, nv04_gr_new }, .sw = nv04_sw_new, }; @@ -112,7 +112,7 @@ nv5_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv04_fifo_new }, - .gr = nv04_gr_new, + .gr = { 0x00000001, nv04_gr_new }, .sw = nv04_sw_new, }; @@ -133,7 +133,7 @@ nv10_chipset = { .timer = { 0x00000001, nv04_timer_new }, .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, - .gr = nv10_gr_new, + .gr = { 0x00000001, nv10_gr_new }, }; static const struct nvkm_device_chip @@ -154,7 +154,7 @@ nv11_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv10_fifo_new }, - .gr = nv15_gr_new, + .gr = { 0x00000001, nv15_gr_new }, .sw = nv10_sw_new, }; @@ -176,7 +176,7 @@ nv15_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv10_fifo_new }, - .gr = nv15_gr_new, + .gr = { 0x00000001, nv15_gr_new }, .sw = nv10_sw_new, }; @@ -198,7 +198,7 @@ nv17_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv17_gr_new, + .gr = { 0x00000001, nv17_gr_new }, .sw = nv10_sw_new, }; @@ -220,7 +220,7 @@ nv18_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv17_gr_new, + .gr = { 0x00000001, nv17_gr_new }, .sw = nv10_sw_new, }; @@ -242,7 +242,7 @@ nv1a_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv10_fifo_new }, - .gr = nv15_gr_new, + .gr = { 0x00000001, nv15_gr_new }, .sw = nv10_sw_new, }; @@ -264,7 +264,7 @@ nv1f_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv17_gr_new, + .gr = { 0x00000001, nv17_gr_new }, .sw = nv10_sw_new, }; @@ -286,7 +286,7 @@ nv20_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv20_gr_new, + .gr = { 0x00000001, nv20_gr_new }, .sw = nv10_sw_new, }; @@ -308,7 +308,7 @@ nv25_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv25_gr_new, + .gr = { 0x00000001, nv25_gr_new }, .sw = nv10_sw_new, }; @@ -330,7 +330,7 @@ nv28_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv25_gr_new, + .gr = { 0x00000001, nv25_gr_new }, .sw = nv10_sw_new, }; @@ -352,7 +352,7 @@ nv2a_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv2a_gr_new, + .gr = { 0x00000001, nv2a_gr_new }, .sw = nv10_sw_new, }; @@ -374,7 +374,7 @@ nv30_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv30_gr_new, + .gr = { 0x00000001, nv30_gr_new }, .sw = nv10_sw_new, }; @@ -396,7 +396,7 @@ nv31_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv30_gr_new, + .gr = { 0x00000001, nv30_gr_new }, .mpeg = nv31_mpeg_new, .sw = nv10_sw_new, }; @@ -419,7 +419,7 @@ nv34_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv34_gr_new, + .gr = { 0x00000001, nv34_gr_new }, .mpeg = nv31_mpeg_new, .sw = nv10_sw_new, }; @@ -442,7 +442,7 @@ nv35_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv35_gr_new, + .gr = { 0x00000001, nv35_gr_new }, .sw = nv10_sw_new, }; @@ -464,7 +464,7 @@ nv36_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, - .gr = nv35_gr_new, + .gr = { 0x00000001, nv35_gr_new }, .mpeg = nv31_mpeg_new, .sw = nv10_sw_new, }; @@ -489,7 +489,7 @@ nv40_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv40_gr_new, + .gr = { 0x00000001, nv40_gr_new }, .mpeg = nv40_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -515,7 +515,7 @@ nv41_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv40_gr_new, + .gr = { 0x00000001, nv40_gr_new }, .mpeg = nv40_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -541,7 +541,7 @@ nv42_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv40_gr_new, + .gr = { 0x00000001, nv40_gr_new }, .mpeg = nv40_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -567,7 +567,7 @@ nv43_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv40_gr_new, + .gr = { 0x00000001, nv40_gr_new }, .mpeg = nv40_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -593,7 +593,7 @@ nv44_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv44_gr_new, + .gr = { 0x00000001, nv44_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -619,7 +619,7 @@ nv45_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv40_gr_new, + .gr = { 0x00000001, nv40_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -645,7 +645,7 @@ nv46_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv44_gr_new, + .gr = { 0x00000001, nv44_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -671,7 +671,7 @@ nv47_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv40_gr_new, + .gr = { 0x00000001, nv40_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -697,7 +697,7 @@ nv49_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv40_gr_new, + .gr = { 0x00000001, nv40_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -723,7 +723,7 @@ nv4a_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv44_gr_new, + .gr = { 0x00000001, nv44_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -749,7 +749,7 @@ nv4b_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv40_gr_new, + .gr = { 0x00000001, nv40_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -775,7 +775,7 @@ nv4c_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv44_gr_new, + .gr = { 0x00000001, nv44_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -801,7 +801,7 @@ nv4e_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv44_gr_new, + .gr = { 0x00000001, nv44_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -830,7 +830,7 @@ nv50_chipset = { .disp = { 0x00000001, nv50_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, nv50_fifo_new }, - .gr = nv50_gr_new, + .gr = { 0x00000001, nv50_gr_new }, .mpeg = nv50_mpeg_new, .pm = nv50_pm_new, .sw = nv50_sw_new, @@ -856,7 +856,7 @@ nv63_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv44_gr_new, + .gr = { 0x00000001, nv44_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -882,7 +882,7 @@ nv67_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv44_gr_new, + .gr = { 0x00000001, nv44_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -908,7 +908,7 @@ nv68_chipset = { .disp = { 0x00000001, nv04_disp_new }, .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, - .gr = nv44_gr_new, + .gr = { 0x00000001, nv44_gr_new }, .mpeg = nv44_mpeg_new, .pm = nv40_pm_new, .sw = nv10_sw_new, @@ -939,7 +939,7 @@ nv84_chipset = { .disp = { 0x00000001, g84_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = g84_gr_new, + .gr = { 0x00000001, g84_gr_new }, .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, @@ -971,7 +971,7 @@ nv86_chipset = { .disp = { 0x00000001, g84_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = g84_gr_new, + .gr = { 0x00000001, g84_gr_new }, .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, @@ -1003,7 +1003,7 @@ nv92_chipset = { .disp = { 0x00000001, g84_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = g84_gr_new, + .gr = { 0x00000001, g84_gr_new }, .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, @@ -1035,7 +1035,7 @@ nv94_chipset = { .disp = { 0x00000001, g94_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = g84_gr_new, + .gr = { 0x00000001, g84_gr_new }, .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, @@ -1067,7 +1067,7 @@ nv96_chipset = { .disp = { 0x00000001, g94_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = g84_gr_new, + .gr = { 0x00000001, g84_gr_new }, .mpeg = g84_mpeg_new, .pm = g84_pm_new, .sw = nv50_sw_new, @@ -1097,7 +1097,7 @@ nv98_chipset = { .disp = { 0x00000001, g94_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = g84_gr_new, + .gr = { 0x00000001, g84_gr_new }, .mspdec = g98_mspdec_new, .msppp = g98_msppp_new, .msvld = g98_msvld_new, @@ -1131,7 +1131,7 @@ nva0_chipset = { .disp = { 0x00000001, gt200_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = gt200_gr_new, + .gr = { 0x00000001, gt200_gr_new }, .mpeg = g84_mpeg_new, .pm = gt200_pm_new, .sw = nv50_sw_new, @@ -1163,7 +1163,7 @@ nva3_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = gt215_gr_new, + .gr = { 0x00000001, gt215_gr_new }, .mpeg = g84_mpeg_new, .mspdec = gt215_mspdec_new, .msppp = gt215_msppp_new, @@ -1197,7 +1197,7 @@ nva5_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = gt215_gr_new, + .gr = { 0x00000001, gt215_gr_new }, .mspdec = gt215_mspdec_new, .msppp = gt215_msppp_new, .msvld = gt215_msvld_new, @@ -1230,7 +1230,7 @@ nva8_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = gt215_gr_new, + .gr = { 0x00000001, gt215_gr_new }, .mspdec = gt215_mspdec_new, .msppp = gt215_msppp_new, .msvld = gt215_msvld_new, @@ -1261,7 +1261,7 @@ nvaa_chipset = { .disp = { 0x00000001, mcp77_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = gt200_gr_new, + .gr = { 0x00000001, gt200_gr_new }, .mspdec = g98_mspdec_new, .msppp = g98_msppp_new, .msvld = g98_msvld_new, @@ -1293,7 +1293,7 @@ nvac_chipset = { .disp = { 0x00000001, mcp77_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = mcp79_gr_new, + .gr = { 0x00000001, mcp79_gr_new }, .mspdec = g98_mspdec_new, .msppp = g98_msppp_new, .msvld = g98_msvld_new, @@ -1327,7 +1327,7 @@ nvaf_chipset = { .disp = { 0x00000001, mcp89_disp_new }, .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, - .gr = mcp89_gr_new, + .gr = { 0x00000001, mcp89_gr_new }, .mspdec = gt215_mspdec_new, .msppp = gt215_msppp_new, .msvld = mcp89_msvld_new, @@ -1363,7 +1363,7 @@ nvc0_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf100_gr_new, + .gr = { 0x00000001, gf100_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1399,7 +1399,7 @@ nvc1_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf108_gr_new, + .gr = { 0x00000001, gf108_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1435,7 +1435,7 @@ nvc3_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf104_gr_new, + .gr = { 0x00000001, gf104_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1471,7 +1471,7 @@ nvc4_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf104_gr_new, + .gr = { 0x00000001, gf104_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1507,7 +1507,7 @@ nvc8_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf110_gr_new, + .gr = { 0x00000001, gf110_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1543,7 +1543,7 @@ nvce_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf104_gr_new, + .gr = { 0x00000001, gf104_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1579,7 +1579,7 @@ nvcf_chipset = { .disp = { 0x00000001, gt215_disp_new }, .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf104_gr_new, + .gr = { 0x00000001, gf104_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1614,7 +1614,7 @@ nvd7_chipset = { .disp = { 0x00000001, gf119_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf117_gr_new, + .gr = { 0x00000001, gf117_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1650,7 +1650,7 @@ nvd9_chipset = { .disp = { 0x00000001, gf119_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, - .gr = gf119_gr_new, + .gr = { 0x00000001, gf119_gr_new }, .mspdec = gf100_mspdec_new, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, @@ -1687,7 +1687,7 @@ nve4_chipset = { .disp = { 0x00000001, gk104_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk104_fifo_new }, - .gr = gk104_gr_new, + .gr = { 0x00000001, gk104_gr_new }, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, @@ -1724,7 +1724,7 @@ nve6_chipset = { .disp = { 0x00000001, gk104_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk104_fifo_new }, - .gr = gk104_gr_new, + .gr = { 0x00000001, gk104_gr_new }, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, @@ -1761,7 +1761,7 @@ nve7_chipset = { .disp = { 0x00000001, gk104_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk104_fifo_new }, - .gr = gk104_gr_new, + .gr = { 0x00000001, gk104_gr_new }, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, @@ -1789,7 +1789,7 @@ nvea_chipset = { .ce = { 0x00000004, gk104_ce_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk20a_fifo_new }, - .gr = gk20a_gr_new, + .gr = { 0x00000001, gk20a_gr_new }, .pm = gk104_pm_new, .sw = gf100_sw_new, }; @@ -1823,7 +1823,7 @@ nvf0_chipset = { .disp = { 0x00000001, gk110_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk110_fifo_new }, - .gr = gk110_gr_new, + .gr = { 0x00000001, gk110_gr_new }, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, @@ -1859,7 +1859,7 @@ nvf1_chipset = { .disp = { 0x00000001, gk110_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk110_fifo_new }, - .gr = gk110b_gr_new, + .gr = { 0x00000001, gk110b_gr_new }, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, @@ -1895,7 +1895,7 @@ nv106_chipset = { .disp = { 0x00000001, gk110_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk208_fifo_new }, - .gr = gk208_gr_new, + .gr = { 0x00000001, gk208_gr_new }, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, @@ -1931,7 +1931,7 @@ nv108_chipset = { .disp = { 0x00000001, gk110_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk208_fifo_new }, - .gr = gk208_gr_new, + .gr = { 0x00000001, gk208_gr_new }, .mspdec = gk104_mspdec_new, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, @@ -1967,7 +1967,7 @@ nv117_chipset = { .disp = { 0x00000001, gm107_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm107_fifo_new }, - .gr = gm107_gr_new, + .gr = { 0x00000001, gm107_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .sw = gf100_sw_new, @@ -2002,7 +2002,7 @@ nv118_chipset = { .disp = { 0x00000001, gm107_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm107_fifo_new }, - .gr = gm107_gr_new, + .gr = { 0x00000001, gm107_gr_new }, .sw = gf100_sw_new, }; @@ -2035,7 +2035,7 @@ nv120_chipset = { .disp = { 0x00000001, gm200_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm200_fifo_new }, - .gr = gm200_gr_new, + .gr = { 0x00000001, gm200_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, @@ -2071,7 +2071,7 @@ nv124_chipset = { .disp = { 0x00000001, gm200_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm200_fifo_new }, - .gr = gm200_gr_new, + .gr = { 0x00000001, gm200_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, @@ -2107,7 +2107,7 @@ nv126_chipset = { .disp = { 0x00000001, gm200_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm200_fifo_new }, - .gr = gm200_gr_new, + .gr = { 0x00000001, gm200_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .sw = gf100_sw_new, @@ -2134,7 +2134,7 @@ nv12b_chipset = { .ce = { 0x00000004, gm200_ce_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm20b_fifo_new }, - .gr = gm20b_gr_new, + .gr = { 0x00000001, gm20b_gr_new }, .sw = gf100_sw_new, }; @@ -2165,7 +2165,7 @@ nv130_chipset = { .dma = { 0x00000001, gf119_dma_new }, .disp = { 0x00000001, gp100_disp_new }, .fifo = { 0x00000001, gp100_fifo_new }, - .gr = gp100_gr_new, + .gr = { 0x00000001, gp100_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, @@ -2200,7 +2200,7 @@ nv132_chipset = { .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, - .gr = gp102_gr_new, + .gr = { 0x00000001, gp102_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, @@ -2235,7 +2235,7 @@ nv134_chipset = { .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, - .gr = gp104_gr_new, + .gr = { 0x00000001, gp104_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, @@ -2270,7 +2270,7 @@ nv136_chipset = { .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, - .gr = gp104_gr_new, + .gr = { 0x00000001, gp104_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .sec2 = gp102_sec2_new, @@ -2304,7 +2304,7 @@ nv137_chipset = { .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, - .gr = gp107_gr_new, + .gr = { 0x00000001, gp107_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, @@ -2339,7 +2339,7 @@ nv138_chipset = { .disp = { 0x00000001, gp102_disp_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, - .gr = gp108_gr_new, + .gr = { 0x00000001, gp108_gr_new }, .nvdec[0] = gm107_nvdec_new, .sec2 = gp108_sec2_new, .sw = gf100_sw_new, @@ -2365,7 +2365,7 @@ nv13b_chipset = { .ce = { 0x00000001, gp100_ce_new }, .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp10b_fifo_new }, - .gr = gp10b_gr_new, + .gr = { 0x00000001, gp10b_gr_new }, .sw = gf100_sw_new, }; @@ -2397,7 +2397,7 @@ nv140_chipset = { .disp = { 0x00000001, gv100_disp_new }, .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, gv100_fifo_new }, - .gr = gv100_gr_new, + .gr = { 0x00000001, gv100_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, @@ -2433,7 +2433,7 @@ nv162_chipset = { .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, - .gr = tu102_gr_new, + .gr = { 0x00000001, tu102_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .sec2 = tu102_sec2_new, @@ -2467,7 +2467,7 @@ nv164_chipset = { .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, - .gr = tu102_gr_new, + .gr = { 0x00000001, tu102_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvdec[1] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, @@ -2502,7 +2502,7 @@ nv166_chipset = { .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, - .gr = tu102_gr_new, + .gr = { 0x00000001, tu102_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvdec[1] = gm107_nvdec_new, .nvdec[2] = gm107_nvdec_new, @@ -2538,7 +2538,7 @@ nv167_chipset = { .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, - .gr = tu102_gr_new, + .gr = { 0x00000001, tu102_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .sec2 = tu102_sec2_new, @@ -2572,7 +2572,7 @@ nv168_chipset = { .disp = { 0x00000001, tu102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, - .gr = tu102_gr_new, + .gr = { 0x00000001, tu102_gr_new }, .nvdec[0] = gm107_nvdec_new, .nvenc[0] = gm107_nvenc_new, .sec2 = tu102_sec2_new, @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_GR , gr); _(NVKM_ENGINE_IFB , ifb); _(NVKM_ENGINE_ME , me); _(NVKM_ENGINE_MPEG , mpeg); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c index d41fb94524e9..61759f54406e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/base.c @@ -175,8 +175,8 @@ nvkm_gr = { int nvkm_gr_ctor(const struct nvkm_gr_func *func, struct nvkm_device *device, - int index, bool enable, struct nvkm_gr *gr) + enum nvkm_subdev_type type, int inst, bool enable, struct nvkm_gr *gr) { gr->func = func; - return nvkm_engine_ctor(&nvkm_gr, device, index, enable, &gr->engine); + return nvkm_engine_ctor(&nvkm_gr, device, type, inst, enable, &gr->engine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/g84.c index da1ba74682b4..65c332118fd6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/g84.c @@ -192,7 +192,7 @@ g84_gr = { }; int -g84_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +g84_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv50_gr_new_(&g84_gr, device, index, pgr); + return nv50_gr_new_(&g84_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c index 749f73fc45a8..397ff4fe9df8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c @@ -2087,8 +2087,8 @@ gf100_gr_flcn = { }; int -gf100_gr_new_(const struct gf100_gr_fwif *fwif, - struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gf100_gr_new_(const struct gf100_gr_fwif *fwif, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { struct gf100_gr *gr; int ret; @@ -2097,7 +2097,7 @@ gf100_gr_new_(const struct gf100_gr_fwif *fwif, return -ENOMEM; *pgr = &gr->base; - ret = nvkm_gr_ctor(&gf100_gr_, device, index, true, &gr->base); + ret = nvkm_gr_ctor(&gf100_gr_, device, type, inst, true, &gr->base); if (ret) return ret; @@ -2483,7 +2483,7 @@ gf100_gr_fwif[] = { }; int -gf100_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gf100_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gf100_gr_fwif, device, index, pgr); + return gf100_gr_new_(gf100_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h index dfd5dd74f0d5..c0038f906135 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h @@ -416,6 +416,6 @@ void gm20b_gr_acr_bld_patch(struct nvkm_acr *, u32, s64); extern const struct nvkm_acr_lsf_func gp108_gr_gpccs_acr; extern const struct nvkm_acr_lsf_func gp108_gr_fecs_acr; -int gf100_gr_new_(const struct gf100_gr_fwif *, struct nvkm_device *, int, +int gf100_gr_new_(const struct gf100_gr_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_gr **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.c index 0536fe8b2b92..3acd99c306f2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.c @@ -152,7 +152,7 @@ gf104_gr_fwif[] = { }; int -gf104_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gf104_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gf104_gr_fwif, device, index, pgr); + return gf100_gr_new_(gf104_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c index 14284b06112f..030640bb3dca 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c @@ -151,7 +151,7 @@ gf108_gr_fwif[] = { }; int -gf108_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gf108_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gf108_gr_fwif, device, index, pgr); + return gf100_gr_new_(gf108_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c index 280752551a3a..616e2def1865 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c @@ -127,7 +127,7 @@ gf110_gr_fwif[] = { }; int -gf110_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gf110_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gf110_gr_fwif, device, index, pgr); + return gf100_gr_new_(gf110_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.c index 235c3fbe4b95..669e7536970e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.c @@ -192,7 +192,7 @@ gf117_gr_fwif[] = { }; int -gf117_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gf117_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gf117_gr_fwif, device, index, pgr); + return gf100_gr_new_(gf117_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.c index 7eac385ece97..5b09bda8110c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.c @@ -218,7 +218,7 @@ gf119_gr_fwif[] = { }; int -gf119_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gf119_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gf119_gr_fwif, device, index, pgr); + return gf100_gr_new_(gf119_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c index 89f51d76082b..b680eaa0f350 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c @@ -497,7 +497,7 @@ gk104_gr_fwif[] = { }; int -gk104_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gk104_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gk104_gr_fwif, device, index, pgr); + return gf100_gr_new_(gk104_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c index 735f05e54d62..103e06a77e65 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c @@ -393,7 +393,7 @@ gk110_gr_fwif[] = { }; int -gk110_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gk110_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gk110_gr_fwif, device, index, pgr); + return gf100_gr_new_(gk110_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c index adc971be8f3b..034d0b11a17d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c @@ -144,7 +144,8 @@ gk110b_gr_fwif[] = { }; int -gk110b_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gk110b_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_gr **pgr) { - return gf100_gr_new_(gk110b_gr_fwif, device, index, pgr); + return gf100_gr_new_(gk110b_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c index aa0eff6795ac..116d682f9f96 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c @@ -202,7 +202,7 @@ gk208_gr_fwif[] = { }; int -gk208_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gk208_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gk208_gr_fwif, device, index, pgr); + return gf100_gr_new_(gk208_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c index 6d4d72851610..be0b2cefd8e8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c @@ -357,7 +357,7 @@ gk20a_gr_fwif[] = { }; int -gk20a_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gk20a_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gk20a_gr_fwif, device, index, pgr); + return gf100_gr_new_(gk20a_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c index 09bb78ba9d00..310987174cb5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c @@ -437,7 +437,7 @@ gm107_gr_fwif[] = { }; int -gm107_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gm107_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gm107_gr_fwif, device, index, pgr); + return gf100_gr_new_(gm107_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.c index 815137047518..5c38ff0fe7f9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.c @@ -288,7 +288,7 @@ gm200_gr_fwif[] = { }; int -gm200_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gm200_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gm200_gr_fwif, device, index, pgr); + return gf100_gr_new_(gm200_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm20b.c index 1aab691fa71c..ec1c46e47e00 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm20b.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm20b.c @@ -181,7 +181,7 @@ gm20b_gr_fwif[] = { }; int -gm20b_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gm20b_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gm20b_gr_fwif, device, index, pgr); + return gf100_gr_new_(gm20b_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp100.c index ddba7ce937c7..0550dd6f46f1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp100.c @@ -156,7 +156,7 @@ gp100_gr_fwif[] = { }; int -gp100_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gp100_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gp100_gr_fwif, device, index, pgr); + return gf100_gr_new_(gp100_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp102.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp102.c index c083f3757ff7..5b001f374be0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp102.c @@ -152,7 +152,7 @@ gp102_gr_fwif[] = { }; int -gp102_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gp102_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gp102_gr_fwif, device, index, pgr); + return gf100_gr_new_(gp102_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp104.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp104.c index f6a31e9a8cc8..2655574ec63b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp104.c @@ -93,7 +93,7 @@ gp104_gr_fwif[] = { }; int -gp104_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gp104_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gp104_gr_fwif, device, index, pgr); + return gf100_gr_new_(gp104_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp107.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp107.c index 2c80c6a75b56..adabc04d4f3a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp107.c @@ -82,7 +82,7 @@ gp107_gr_fwif[] = { }; int -gp107_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gp107_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gp107_gr_fwif, device, index, pgr); + return gf100_gr_new_(gp107_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp108.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp108.c index 2be8f416dd6f..7310f0466bb7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp108.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp108.c @@ -92,7 +92,7 @@ gp108_gr_fwif[] = { }; int -gp108_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gp108_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gp108_gr_fwif, device, index, pgr); + return gf100_gr_new_(gp108_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp10b.c index 6edc4bc7ed44..e13683b6e7b1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gp10b.c @@ -94,7 +94,7 @@ gp10b_gr_fwif[] = { }; int -gp10b_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gp10b_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gp10b_gr_fwif, device, index, pgr); + return gf100_gr_new_(gp10b_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gt200.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gt200.c index c711a55ce392..1dfc65d45b52 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gt200.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gt200.c @@ -43,7 +43,7 @@ gt200_gr = { }; int -gt200_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gt200_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv50_gr_new_(>200_gr, device, index, pgr); + return nv50_gr_new_(>200_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gt215.c index fa103df32ec7..fcb5ead345a3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gt215.c @@ -44,7 +44,7 @@ gt215_gr = { }; int -gt215_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gt215_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv50_gr_new_(>215_gr, device, index, pgr); + return nv50_gr_new_(>215_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.c index 2189a8f4e644..4d043c1173ea 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.c @@ -141,7 +141,7 @@ gv100_gr_fwif[] = { }; int -gv100_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +gv100_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(gv100_gr_fwif, device, index, pgr); + return gf100_gr_new_(gv100_gr_fwif, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp79.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp79.c index eb1a90644752..cf782b64f62e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp79.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp79.c @@ -42,7 +42,7 @@ mcp79_gr = { }; int -mcp79_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +mcp79_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv50_gr_new_(&mcp79_gr, device, index, pgr); + return nv50_gr_new_(&mcp79_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp89.c index c91eb56e9327..6f90a6395453 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp89.c @@ -44,7 +44,7 @@ mcp89_gr = { }; int -mcp89_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +mcp89_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv50_gr_new_(&mcp89_gr, device, index, pgr); + return nv50_gr_new_(&mcp89_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c index 9c2e985dc079..0bc1a238de43 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.c @@ -1413,7 +1413,7 @@ nv04_gr = { }; int -nv04_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv04_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { struct nv04_gr *gr; @@ -1422,5 +1422,5 @@ nv04_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) spin_lock_init(&gr->lock); *pgr = &gr->base; - return nvkm_gr_ctor(&nv04_gr, device, index, true, &gr->base); + return nvkm_gr_ctor(&nv04_gr, device, type, inst, true, &gr->base); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c index 4ebbfbdd8240..942450b33bc6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.c @@ -1173,7 +1173,7 @@ nv10_gr_init(struct nvkm_gr *base) int nv10_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device, - int index, struct nvkm_gr **pgr) + enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { struct nv10_gr *gr; @@ -1182,7 +1182,7 @@ nv10_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device, spin_lock_init(&gr->lock); *pgr = &gr->base; - return nvkm_gr_ctor(func, device, index, true, &gr->base); + return nvkm_gr_ctor(func, device, type, inst, true, &gr->base); } static const struct nvkm_gr_func @@ -1215,7 +1215,7 @@ nv10_gr = { }; int -nv10_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv10_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv10_gr_new_(&nv10_gr, device, index, pgr); + return nv10_gr_new_(&nv10_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.h index 4327baea02af..5cfe927c9123 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.h @@ -3,7 +3,7 @@ #define __NV10_GR_H__ #include "priv.h" -int nv10_gr_new_(const struct nvkm_gr_func *, struct nvkm_device *, int index, +int nv10_gr_new_(const struct nvkm_gr_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_gr **); int nv10_gr_init(struct nvkm_gr *); void nv10_gr_intr(struct nvkm_gr *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv15.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv15.c index 3e2c6856b4c4..69ece259df86 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv15.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv15.c @@ -53,7 +53,7 @@ nv15_gr = { }; int -nv15_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv15_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv10_gr_new_(&nv15_gr, device, index, pgr); + return nv10_gr_new_(&nv15_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv17.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv17.c index 12437d085a73..e39dfc7d4077 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv17.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv17.c @@ -53,7 +53,7 @@ nv17_gr = { }; int -nv17_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv17_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv10_gr_new_(&nv17_gr, device, index, pgr); + return nv10_gr_new_(&nv17_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c index d837630a3625..6bff10cee71b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c @@ -330,7 +330,7 @@ nv20_gr_dtor(struct nvkm_gr *base) int nv20_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device, - int index, struct nvkm_gr **pgr) + enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { struct nv20_gr *gr; @@ -338,7 +338,7 @@ nv20_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device, return -ENOMEM; *pgr = &gr->base; - return nvkm_gr_ctor(func, device, index, true, &gr->base); + return nvkm_gr_ctor(func, device, type, inst, true, &gr->base); } static const struct nvkm_gr_func @@ -370,7 +370,7 @@ nv20_gr = { }; int -nv20_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv20_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv20_gr_new_(&nv20_gr, device, index, pgr); + return nv20_gr_new_(&nv20_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.h index e57407a8a7c3..c0d2be53413e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.h @@ -9,8 +9,8 @@ struct nv20_gr { struct nvkm_memory *ctxtab; }; -int nv20_gr_new_(const struct nvkm_gr_func *, struct nvkm_device *, - int, struct nvkm_gr **); +int nv20_gr_new_(const struct nvkm_gr_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_gr **); void *nv20_gr_dtor(struct nvkm_gr *); int nv20_gr_oneinit(struct nvkm_gr *); int nv20_gr_init(struct nvkm_gr *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c index 32d29d3faee0..f3a56f17d94a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.c @@ -129,7 +129,7 @@ nv25_gr = { }; int -nv25_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv25_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv20_gr_new_(&nv25_gr, device, index, pgr); + return nv20_gr_new_(&nv25_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c index f941062c66f0..f268d2642d29 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.c @@ -120,7 +120,7 @@ nv2a_gr = { }; int -nv2a_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv2a_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv20_gr_new_(&nv2a_gr, device, index, pgr); + return nv20_gr_new_(&nv2a_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c index 785ec956df0f..e5737cdf2fa1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.c @@ -194,7 +194,7 @@ nv30_gr = { }; int -nv30_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv30_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv20_gr_new_(&nv30_gr, device, index, pgr); + return nv20_gr_new_(&nv30_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c index bd610d75c677..1ab2da8ebf4e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.c @@ -131,7 +131,7 @@ nv34_gr = { }; int -nv34_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv34_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv20_gr_new_(&nv34_gr, device, index, pgr); + return nv20_gr_new_(&nv34_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c index 89db7f523037..591260f5676b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.c @@ -131,7 +131,7 @@ nv35_gr = { }; int -nv35_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv35_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv20_gr_new_(&nv35_gr, device, index, pgr); + return nv20_gr_new_(&nv35_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c index 5f1ad8344ea9..67f3535ff97e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c @@ -429,7 +429,7 @@ nv40_gr_init(struct nvkm_gr *base) int nv40_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device, - int index, struct nvkm_gr **pgr) + enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { struct nv40_gr *gr; @@ -438,7 +438,7 @@ nv40_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device, *pgr = &gr->base; INIT_LIST_HEAD(&gr->chan); - return nvkm_gr_ctor(func, device, index, true, &gr->base); + return nvkm_gr_ctor(func, device, type, inst, true, &gr->base); } static const struct nvkm_gr_func @@ -470,7 +470,7 @@ nv40_gr = { }; int -nv40_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv40_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv40_gr_new_(&nv40_gr, device, index, pgr); + return nv40_gr_new_(&nv40_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.h index e6128791b2d2..f3d3d3a5ae5b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.h @@ -10,7 +10,7 @@ struct nv40_gr { struct list_head chan; }; -int nv40_gr_new_(const struct nvkm_gr_func *, struct nvkm_device *, int index, +int nv40_gr_new_(const struct nvkm_gr_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_gr **); int nv40_gr_init(struct nvkm_gr *); void nv40_gr_intr(struct nvkm_gr *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv44.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv44.c index 45ff80254eb4..22b6a38a7031 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv44.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv44.c @@ -102,7 +102,7 @@ nv44_gr = { }; int -nv44_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv44_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv40_gr_new_(&nv44_gr, device, index, pgr); + return nv40_gr_new_(&nv44_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c index df16ffda1749..563a10097e95 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.c @@ -761,7 +761,7 @@ nv50_gr_init(struct nvkm_gr *base) int nv50_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device, - int index, struct nvkm_gr **pgr) + enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { struct nv50_gr *gr; @@ -770,7 +770,7 @@ nv50_gr_new_(const struct nvkm_gr_func *func, struct nvkm_device *device, spin_lock_init(&gr->lock); *pgr = &gr->base; - return nvkm_gr_ctor(func, device, index, true, &gr->base); + return nvkm_gr_ctor(func, device, type, inst, true, &gr->base); } static const struct nvkm_gr_func @@ -790,7 +790,7 @@ nv50_gr = { }; int -nv50_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +nv50_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return nv50_gr_new_(&nv50_gr, device, index, pgr); + return nv50_gr_new_(&nv50_gr, device, type, inst, pgr); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.h index 465f4da0ddfc..84388c42e5c6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.h @@ -11,7 +11,7 @@ struct nv50_gr { u32 size; }; -int nv50_gr_new_(const struct nvkm_gr_func *, struct nvkm_device *, int index, +int nv50_gr_new_(const struct nvkm_gr_func *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_gr **); int nv50_gr_init(struct nvkm_gr *); void nv50_gr_intr(struct nvkm_gr *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/priv.h index 3b30f24032cc..9b2c66e8be90 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/priv.h @@ -7,8 +7,8 @@ struct nvkm_fb_tile; struct nvkm_fifo_chan; -int nvkm_gr_ctor(const struct nvkm_gr_func *, struct nvkm_device *, - int index, bool enable, struct nvkm_gr *); +int nvkm_gr_ctor(const struct nvkm_gr_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + bool enable, struct nvkm_gr *); bool nv04_gr_idle(struct nvkm_gr *); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.c index 6039f9948aa2..1a8a21844e12 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.c @@ -198,7 +198,7 @@ tu102_gr_fwif[] = { }; int -tu102_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr) +tu102_gr_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_gr **pgr) { - return gf100_gr_new_(tu102_gr_fwif, device, index, pgr); + return gf100_gr_new_(tu102_gr_fwif, device, type, inst, pgr); } From ee307030e9e2a9d2d3f62a9655b97c30fdb3bcbf Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 15:40:42 +1000 Subject: [PATCH 69/87] drm/nouveau/ifb: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 2 -- drivers/gpu/drm/nouveau/include/nvkm/core/layout.h | 1 + drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 948ceef5207b..28d0b369ccbb 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *ifb; struct nvkm_engine *me; struct nvkm_engine *mpeg; struct nvkm_engine *msenc; @@ -115,7 +114,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*ifb )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*me )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*mpeg )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msenc )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index a10300ccd7be..3ca06513708f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -32,4 +32,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_DISP , struct nvkm_disp , disp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_DMAOBJ , struct nvkm_dma , dma) NVKM_LAYOUT_ONCE(NVKM_ENGINE_FIFO , struct nvkm_fifo , fifo) NVKM_LAYOUT_ONCE(NVKM_ENGINE_GR , struct nvkm_gr , gr) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_IFB , struct nvkm_engine , ifb) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index cea356d3e17a..616e005b8a58 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_IFB ] = "ifb", [NVKM_ENGINE_ME ] = "me", [NVKM_ENGINE_MPEG ] = "mpeg", [NVKM_ENGINE_MSENC ] = "msenc", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 9dbec04c050d..6712b8fe50a0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_IFB , ifb); _(NVKM_ENGINE_ME , me); _(NVKM_ENGINE_MPEG , mpeg); _(NVKM_ENGINE_MSENC , msenc); From aba5e97b890a7e038375398c71652860db54c4c3 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 15:41:33 +1000 Subject: [PATCH 70/87] drm/nouveau/me: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 2 -- drivers/gpu/drm/nouveau/include/nvkm/core/layout.h | 1 + drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 28d0b369ccbb..606e4ba5f6a4 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *me; struct nvkm_engine *mpeg; struct nvkm_engine *msenc; struct nvkm_engine *mspdec; @@ -114,7 +113,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*me )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*mpeg )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msenc )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*mspdec )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 3ca06513708f..87964d280330 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -33,4 +33,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_DMAOBJ , struct nvkm_dma , dma) NVKM_LAYOUT_ONCE(NVKM_ENGINE_FIFO , struct nvkm_fifo , fifo) NVKM_LAYOUT_ONCE(NVKM_ENGINE_GR , struct nvkm_gr , gr) NVKM_LAYOUT_ONCE(NVKM_ENGINE_IFB , struct nvkm_engine , ifb) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_ME , struct nvkm_engine , me) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 616e005b8a58..02b4b77b0683 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_ME ] = "me", [NVKM_ENGINE_MPEG ] = "mpeg", [NVKM_ENGINE_MSENC ] = "msenc", [NVKM_ENGINE_MSPDEC ] = "mspdec", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 6712b8fe50a0..713cfa5e5d3b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_ME , me); _(NVKM_ENGINE_MPEG , mpeg); _(NVKM_ENGINE_MSENC , msenc); _(NVKM_ENGINE_MSPDEC , mspdec); From e5e95a7639ed5f7dc3e404858ad7910de5fa2057 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:36:45 +1000 Subject: [PATCH 71/87] drm/nouveau/mpeg: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/engine.h | 6 +- .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/mpeg.h | 10 ++-- drivers/gpu/drm/nouveau/nvkm/core/engine.c | 4 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 55 +++++++++---------- .../gpu/drm/nouveau/nvkm/engine/mpeg/g84.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c | 10 ++-- .../gpu/drm/nouveau/nvkm/engine/mpeg/nv31.h | 4 +- .../gpu/drm/nouveau/nvkm/engine/mpeg/nv40.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c | 5 +- .../gpu/drm/nouveau/nvkm/engine/mpeg/nv50.c | 5 +- .../gpu/drm/nouveau/nvkm/subdev/devinit/g84.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/nv50.c | 2 +- 15 files changed, 57 insertions(+), 60 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 606e4ba5f6a4..659388e395d9 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *mpeg; struct nvkm_engine *msenc; struct nvkm_engine *mspdec; struct nvkm_engine *msppp; @@ -113,7 +112,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*mpeg )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msenc )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*mspdec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msppp )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h index 1a131aaa3a25..c1bd0e075075 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h @@ -53,12 +53,8 @@ int nvkm_engine_ctor_(const struct nvkm_engine_func *, bool old, struct nvkm_dev #define nvkm_engine_ctor_n(f,d,t,i,e,s) nvkm_engine_ctor_((f), false, (d), (t), (i), (e), (s)) #define nvkm_engine_ctor__(_1,_2,_3,_4,_5,_6,IMPL,...) IMPL #define nvkm_engine_ctor(A...) nvkm_engine_ctor__(A, nvkm_engine_ctor_n, nvkm_engine_ctor_o)(A) -int nvkm_engine_new__(const struct nvkm_engine_func *, bool old, struct nvkm_device *, +int nvkm_engine_new_(const struct nvkm_engine_func *, struct nvkm_device *, enum nvkm_subdev_type, int, bool enable, struct nvkm_engine **); -#define nvkm_engine_new__o(f,d,i, e,s) nvkm_engine_new__((f), true, (d), (i), -1 , (e), (s)) -#define nvkm_engine_new__n(f,d,t,i,e,s) nvkm_engine_new__((f), false, (d), (t), (i), (e), (s)) -#define nvkm_engine_new___(_1,_2,_3,_4,_5,_6,IMPL,...) IMPL -#define nvkm_engine_new_(A...) nvkm_engine_new___(A, nvkm_engine_new__n, nvkm_engine_new__o)(A) struct nvkm_engine *nvkm_engine_ref(struct nvkm_engine *); void nvkm_engine_unref(struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 87964d280330..4241048c20cb 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -34,4 +34,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_FIFO , struct nvkm_fifo , fifo) NVKM_LAYOUT_ONCE(NVKM_ENGINE_GR , struct nvkm_gr , gr) NVKM_LAYOUT_ONCE(NVKM_ENGINE_IFB , struct nvkm_engine , ifb) NVKM_LAYOUT_ONCE(NVKM_ENGINE_ME , struct nvkm_engine , me) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_MPEG , struct nvkm_engine , mpeg) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/mpeg.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/mpeg.h index 8585a31f5943..f137f277935f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/mpeg.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/mpeg.h @@ -2,9 +2,9 @@ #ifndef __NVKM_MPEG_H__ #define __NVKM_MPEG_H__ #include -int nv31_mpeg_new(struct nvkm_device *, int index, struct nvkm_engine **); -int nv40_mpeg_new(struct nvkm_device *, int index, struct nvkm_engine **); -int nv44_mpeg_new(struct nvkm_device *, int index, struct nvkm_engine **); -int nv50_mpeg_new(struct nvkm_device *, int index, struct nvkm_engine **); -int g84_mpeg_new(struct nvkm_device *, int index, struct nvkm_engine **); +int nv31_mpeg_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int nv40_mpeg_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int nv44_mpeg_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int nv50_mpeg_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int g84_mpeg_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c index 293b6c3f24d6..bb5440b0a602 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c @@ -194,11 +194,11 @@ nvkm_engine_ctor_(const struct nvkm_engine_func *func, bool old, struct nvkm_dev } int -nvkm_engine_new__(const struct nvkm_engine_func *func, bool old, struct nvkm_device *device, +nvkm_engine_new_(const struct nvkm_engine_func *func, struct nvkm_device *device, enum nvkm_subdev_type type, int inst, bool enable, struct nvkm_engine **pengine) { if (!(*pengine = kzalloc(sizeof(**pengine), GFP_KERNEL))) return -ENOMEM; - return nvkm_engine_ctor_(func, old, device, type, inst, enable, *pengine); + return nvkm_engine_ctor(func, device, type, inst, enable, *pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 02b4b77b0683..517a35f5e1ad 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_MPEG ] = "mpeg", [NVKM_ENGINE_MSENC ] = "msenc", [NVKM_ENGINE_MSPDEC ] = "mspdec", [NVKM_ENGINE_MSPPP ] = "msppp", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 713cfa5e5d3b..e3417d1b9398 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -397,7 +397,7 @@ nv31_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv30_gr_new }, - .mpeg = nv31_mpeg_new, + .mpeg = { 0x00000001, nv31_mpeg_new }, .sw = nv10_sw_new, }; @@ -420,7 +420,7 @@ nv34_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv34_gr_new }, - .mpeg = nv31_mpeg_new, + .mpeg = { 0x00000001, nv31_mpeg_new }, .sw = nv10_sw_new, }; @@ -465,7 +465,7 @@ nv36_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv35_gr_new }, - .mpeg = nv31_mpeg_new, + .mpeg = { 0x00000001, nv31_mpeg_new }, .sw = nv10_sw_new, }; @@ -490,7 +490,7 @@ nv40_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, - .mpeg = nv40_mpeg_new, + .mpeg = { 0x00000001, nv40_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -516,7 +516,7 @@ nv41_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, - .mpeg = nv40_mpeg_new, + .mpeg = { 0x00000001, nv40_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -542,7 +542,7 @@ nv42_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, - .mpeg = nv40_mpeg_new, + .mpeg = { 0x00000001, nv40_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -568,7 +568,7 @@ nv43_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, - .mpeg = nv40_mpeg_new, + .mpeg = { 0x00000001, nv40_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -594,7 +594,7 @@ nv44_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -620,7 +620,7 @@ nv45_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -646,7 +646,7 @@ nv46_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -672,7 +672,7 @@ nv47_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -698,7 +698,7 @@ nv49_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -724,7 +724,7 @@ nv4a_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -750,7 +750,7 @@ nv4b_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -776,7 +776,7 @@ nv4c_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -802,7 +802,7 @@ nv4e_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -831,7 +831,7 @@ nv50_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, nv50_fifo_new }, .gr = { 0x00000001, nv50_gr_new }, - .mpeg = nv50_mpeg_new, + .mpeg = { 0x00000001, nv50_mpeg_new }, .pm = nv50_pm_new, .sw = nv50_sw_new, }; @@ -857,7 +857,7 @@ nv63_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -883,7 +883,7 @@ nv67_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -909,7 +909,7 @@ nv68_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, - .mpeg = nv44_mpeg_new, + .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = nv40_pm_new, .sw = nv10_sw_new, }; @@ -940,7 +940,7 @@ nv84_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, - .mpeg = g84_mpeg_new, + .mpeg = { 0x00000001, g84_mpeg_new }, .pm = g84_pm_new, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, @@ -972,7 +972,7 @@ nv86_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, - .mpeg = g84_mpeg_new, + .mpeg = { 0x00000001, g84_mpeg_new }, .pm = g84_pm_new, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, @@ -1004,7 +1004,7 @@ nv92_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, - .mpeg = g84_mpeg_new, + .mpeg = { 0x00000001, g84_mpeg_new }, .pm = g84_pm_new, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, @@ -1036,7 +1036,7 @@ nv94_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, - .mpeg = g84_mpeg_new, + .mpeg = { 0x00000001, g84_mpeg_new }, .pm = g84_pm_new, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, @@ -1068,7 +1068,7 @@ nv96_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, - .mpeg = g84_mpeg_new, + .mpeg = { 0x00000001, g84_mpeg_new }, .pm = g84_pm_new, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, @@ -1132,7 +1132,7 @@ nva0_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt200_gr_new }, - .mpeg = g84_mpeg_new, + .mpeg = { 0x00000001, g84_mpeg_new }, .pm = gt200_pm_new, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, @@ -1164,7 +1164,7 @@ nva3_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt215_gr_new }, - .mpeg = g84_mpeg_new, + .mpeg = { 0x00000001, g84_mpeg_new }, .mspdec = gt215_mspdec_new, .msppp = gt215_msppp_new, .msvld = gt215_msvld_new, @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_MPEG , mpeg); _(NVKM_ENGINE_MSENC , msenc); _(NVKM_ENGINE_MSPDEC , mspdec); _(NVKM_ENGINE_MSPPP , msppp); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/g84.c index c0e11a071843..0fcc0ffa1e40 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/g84.c @@ -37,7 +37,8 @@ g84_mpeg = { }; int -g84_mpeg_new(struct nvkm_device *device, int index, struct nvkm_engine **pmpeg) +g84_mpeg_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pmpeg) { - return nvkm_engine_new_(&g84_mpeg, device, index, true, pmpeg); + return nvkm_engine_new_(&g84_mpeg, device, type, inst, true, pmpeg); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c index 7fea7d45202f..b1054db4c1b8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.c @@ -274,7 +274,7 @@ nv31_mpeg_ = { int nv31_mpeg_new_(const struct nv31_mpeg_func *func, struct nvkm_device *device, - int index, struct nvkm_engine **pmpeg) + enum nvkm_subdev_type type, int inst, struct nvkm_engine **pmpeg) { struct nv31_mpeg *mpeg; @@ -283,8 +283,7 @@ nv31_mpeg_new_(const struct nv31_mpeg_func *func, struct nvkm_device *device, mpeg->func = func; *pmpeg = &mpeg->engine; - return nvkm_engine_ctor(&nv31_mpeg_, device, index, - true, &mpeg->engine); + return nvkm_engine_ctor(&nv31_mpeg_, device, type, inst, true, &mpeg->engine); } static const struct nv31_mpeg_func @@ -293,7 +292,8 @@ nv31_mpeg = { }; int -nv31_mpeg_new(struct nvkm_device *device, int index, struct nvkm_engine **pmpeg) +nv31_mpeg_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pmpeg) { - return nv31_mpeg_new_(&nv31_mpeg, device, index, pmpeg); + return nv31_mpeg_new_(&nv31_mpeg, device, type, inst, pmpeg); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.h b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.h index b3e131538858..9f30aaaf809e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.h @@ -11,8 +11,8 @@ struct nv31_mpeg { struct nv31_mpeg_chan *chan; }; -int nv31_mpeg_new_(const struct nv31_mpeg_func *, struct nvkm_device *, - int index, struct nvkm_engine **); +int nv31_mpeg_new_(const struct nv31_mpeg_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_engine **); struct nv31_mpeg_func { bool (*mthd_dma)(struct nvkm_device *, u32 mthd, u32 data); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv40.c index b5ec7c504dc6..179167484ef1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv40.c @@ -76,7 +76,8 @@ nv40_mpeg = { }; int -nv40_mpeg_new(struct nvkm_device *device, int index, struct nvkm_engine **pmpeg) +nv40_mpeg_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pmpeg) { - return nv31_mpeg_new_(&nv40_mpeg, device, index, pmpeg); + return nv31_mpeg_new_(&nv40_mpeg, device, type, inst, pmpeg); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c index c3cf02ed468e..521ce43a2871 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.c @@ -203,7 +203,8 @@ nv44_mpeg = { }; int -nv44_mpeg_new(struct nvkm_device *device, int index, struct nvkm_engine **pmpeg) +nv44_mpeg_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pmpeg) { struct nv44_mpeg *mpeg; @@ -212,5 +213,5 @@ nv44_mpeg_new(struct nvkm_device *device, int index, struct nvkm_engine **pmpeg) INIT_LIST_HEAD(&mpeg->chan); *pmpeg = &mpeg->engine; - return nvkm_engine_ctor(&nv44_mpeg, device, index, true, &mpeg->engine); + return nvkm_engine_ctor(&nv44_mpeg, device, type, inst, true, &mpeg->engine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv50.c index 6df880a39019..e6374f36961c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv50.c @@ -129,7 +129,8 @@ nv50_mpeg = { }; int -nv50_mpeg_new(struct nvkm_device *device, int index, struct nvkm_engine **pmpeg) +nv50_mpeg_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pmpeg) { - return nvkm_engine_new_(&nv50_mpeg, device, index, true, pmpeg); + return nvkm_engine_new_(&nv50_mpeg, device, type, inst, true, pmpeg); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c index 09e8a5c743a4..c224702b7bed 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.c @@ -35,7 +35,7 @@ g84_devinit_disable(struct nvkm_devinit *init) u64 disable = 0ULL; if (!(r001540 & 0x40000000)) { - disable |= (1ULL << NVKM_ENGINE_MPEG); + nvkm_subdev_disable(device, NVKM_ENGINE_MPEG, 0); nvkm_subdev_disable(device, NVKM_ENGINE_VP, 0); nvkm_subdev_disable(device, NVKM_ENGINE_BSP, 0); nvkm_subdev_disable(device, NVKM_ENGINE_CIPHER, 0); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c index 088bdae042d3..380995d398b1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.c @@ -85,7 +85,7 @@ nv50_devinit_disable(struct nvkm_devinit *init) u64 disable = 0ULL; if (!(r001540 & 0x40000000)) - disable |= (1ULL << NVKM_ENGINE_MPEG); + nvkm_subdev_disable(device, NVKM_ENGINE_MPEG, 0); return disable; } From e9e9a219e4cd01e99f0f72710a283bd004b4c73c Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:37:29 +1000 Subject: [PATCH 72/87] drm/nouveau/msenc: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 2 -- drivers/gpu/drm/nouveau/include/nvkm/core/layout.h | 1 + drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 1 - drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c | 2 +- 5 files changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 659388e395d9..6530b4f5b147 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *msenc; struct nvkm_engine *mspdec; struct nvkm_engine *msppp; struct nvkm_engine *msvld; @@ -112,7 +111,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*msenc )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*mspdec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msppp )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msvld )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 4241048c20cb..d1ed1cf864f5 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -35,4 +35,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_GR , struct nvkm_gr , gr) NVKM_LAYOUT_ONCE(NVKM_ENGINE_IFB , struct nvkm_engine , ifb) NVKM_LAYOUT_ONCE(NVKM_ENGINE_ME , struct nvkm_engine , me) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MPEG , struct nvkm_engine , mpeg) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSENC , struct nvkm_engine , msenc) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 517a35f5e1ad..bfd366ba469b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_MSENC ] = "msenc", [NVKM_ENGINE_MSPDEC ] = "mspdec", [NVKM_ENGINE_MSPPP ] = "msppp", [NVKM_ENGINE_MSVLD ] = "msvld", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index e3417d1b9398..e256869dbb89 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_MSENC , msenc); _(NVKM_ENGINE_MSPDEC , mspdec); _(NVKM_ENGINE_MSPPP , msppp); _(NVKM_ENGINE_MSVLD , msvld); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c index 023bfbfd3b29..275616f192e2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c @@ -81,7 +81,7 @@ gf100_devinit_disable(struct nvkm_devinit *init) if (r022500 & 0x00000004) disable |= (1ULL << NVKM_ENGINE_MSVLD); if (r022500 & 0x00000008) - disable |= (1ULL << NVKM_ENGINE_MSENC); + nvkm_subdev_disable(device, NVKM_ENGINE_MSENC, 0); if (r022500 & 0x00000100) nvkm_subdev_disable(device, NVKM_ENGINE_CE, 0); if (r022500 & 0x00000200) From 963216061c00865a75943d0bd5cc371ae3bc934a Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:38:32 +1000 Subject: [PATCH 73/87] drm/nouveau/mspdec: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/mspdec.h | 8 ++-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 47 +++++++++---------- .../gpu/drm/nouveau/nvkm/engine/mspdec/base.c | 7 ++- .../gpu/drm/nouveau/nvkm/engine/mspdec/g98.c | 6 +-- .../drm/nouveau/nvkm/engine/mspdec/gf100.c | 4 +- .../drm/nouveau/nvkm/engine/mspdec/gk104.c | 4 +- .../drm/nouveau/nvkm/engine/mspdec/gt215.c | 6 +-- .../gpu/drm/nouveau/nvkm/engine/mspdec/priv.h | 4 +- .../gpu/drm/nouveau/nvkm/subdev/devinit/g98.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/gf100.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/gt215.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/mcp89.c | 2 +- 15 files changed, 47 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 6530b4f5b147..e8200e2a29d1 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *mspdec; struct nvkm_engine *msppp; struct nvkm_engine *msvld; struct nvkm_nvenc *nvenc[3]; @@ -111,7 +110,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*mspdec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msppp )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msvld )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*nvenc[3])(struct nvkm_device *, int idx, struct nvkm_nvenc **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index d1ed1cf864f5..cce050b2de56 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -36,4 +36,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_IFB , struct nvkm_engine , ifb) NVKM_LAYOUT_ONCE(NVKM_ENGINE_ME , struct nvkm_engine , me) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MPEG , struct nvkm_engine , mpeg) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSENC , struct nvkm_engine , msenc) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPDEC , struct nvkm_engine , mspdec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/mspdec.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/mspdec.h index 83bb2fcb2cbf..ac8f08ce183c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/mspdec.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/mspdec.h @@ -2,8 +2,8 @@ #ifndef __NVKM_MSPDEC_H__ #define __NVKM_MSPDEC_H__ #include -int g98_mspdec_new(struct nvkm_device *, int, struct nvkm_engine **); -int gt215_mspdec_new(struct nvkm_device *, int, struct nvkm_engine **); -int gf100_mspdec_new(struct nvkm_device *, int, struct nvkm_engine **); -int gk104_mspdec_new(struct nvkm_device *, int, struct nvkm_engine **); +int g98_mspdec_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gt215_mspdec_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gf100_mspdec_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gk104_mspdec_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index bfd366ba469b..09015ff40e3a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_MSPDEC ] = "mspdec", [NVKM_ENGINE_MSPPP ] = "msppp", [NVKM_ENGINE_MSVLD ] = "msvld", [NVKM_ENGINE_NVENC0 ] = "nvenc0", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index e256869dbb89..49d554e35927 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1098,7 +1098,7 @@ nv98_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, - .mspdec = g98_mspdec_new, + .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = g98_msppp_new, .msvld = g98_msvld_new, .pm = g84_pm_new, @@ -1165,7 +1165,7 @@ nva3_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt215_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, - .mspdec = gt215_mspdec_new, + .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = gt215_msppp_new, .msvld = gt215_msvld_new, .pm = gt215_pm_new, @@ -1198,7 +1198,7 @@ nva5_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt215_gr_new }, - .mspdec = gt215_mspdec_new, + .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = gt215_msppp_new, .msvld = gt215_msvld_new, .pm = gt215_pm_new, @@ -1231,7 +1231,7 @@ nva8_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt215_gr_new }, - .mspdec = gt215_mspdec_new, + .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = gt215_msppp_new, .msvld = gt215_msvld_new, .pm = gt215_pm_new, @@ -1262,7 +1262,7 @@ nvaa_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt200_gr_new }, - .mspdec = g98_mspdec_new, + .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = g98_msppp_new, .msvld = g98_msvld_new, .pm = g84_pm_new, @@ -1294,7 +1294,7 @@ nvac_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, mcp79_gr_new }, - .mspdec = g98_mspdec_new, + .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = g98_msppp_new, .msvld = g98_msvld_new, .pm = g84_pm_new, @@ -1328,7 +1328,7 @@ nvaf_chipset = { .dma = { 0x00000001, nv50_dma_new }, .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, mcp89_gr_new }, - .mspdec = gt215_mspdec_new, + .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = gt215_msppp_new, .msvld = mcp89_msvld_new, .pm = gt215_pm_new, @@ -1364,7 +1364,7 @@ nvc0_chipset = { .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf100_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf100_pm_new, @@ -1400,7 +1400,7 @@ nvc1_chipset = { .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf108_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf108_pm_new, @@ -1436,7 +1436,7 @@ nvc3_chipset = { .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf104_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf100_pm_new, @@ -1472,7 +1472,7 @@ nvc4_chipset = { .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf104_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf100_pm_new, @@ -1508,7 +1508,7 @@ nvc8_chipset = { .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf110_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf100_pm_new, @@ -1544,7 +1544,7 @@ nvce_chipset = { .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf104_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf100_pm_new, @@ -1580,7 +1580,7 @@ nvcf_chipset = { .dma = { 0x00000001, gf100_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf104_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf100_pm_new, @@ -1615,7 +1615,7 @@ nvd7_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf117_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf117_pm_new, @@ -1651,7 +1651,7 @@ nvd9_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf119_gr_new }, - .mspdec = gf100_mspdec_new, + .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gf100_msvld_new, .pm = gf117_pm_new, @@ -1688,7 +1688,7 @@ nve4_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk104_fifo_new }, .gr = { 0x00000001, gk104_gr_new }, - .mspdec = gk104_mspdec_new, + .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, .pm = gk104_pm_new, @@ -1725,7 +1725,7 @@ nve6_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk104_fifo_new }, .gr = { 0x00000001, gk104_gr_new }, - .mspdec = gk104_mspdec_new, + .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, .pm = gk104_pm_new, @@ -1762,7 +1762,7 @@ nve7_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk104_fifo_new }, .gr = { 0x00000001, gk104_gr_new }, - .mspdec = gk104_mspdec_new, + .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, .pm = gk104_pm_new, @@ -1824,7 +1824,7 @@ nvf0_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk110_fifo_new }, .gr = { 0x00000001, gk110_gr_new }, - .mspdec = gk104_mspdec_new, + .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, .sw = gf100_sw_new, @@ -1860,7 +1860,7 @@ nvf1_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk110_fifo_new }, .gr = { 0x00000001, gk110b_gr_new }, - .mspdec = gk104_mspdec_new, + .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, .sw = gf100_sw_new, @@ -1896,7 +1896,7 @@ nv106_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk208_fifo_new }, .gr = { 0x00000001, gk208_gr_new }, - .mspdec = gk104_mspdec_new, + .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, .sw = gf100_sw_new, @@ -1932,7 +1932,7 @@ nv108_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk208_fifo_new }, .gr = { 0x00000001, gk208_gr_new }, - .mspdec = gk104_mspdec_new, + .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = gf100_msppp_new, .msvld = gk104_msvld_new, .sw = gf100_sw_new, @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_MSPDEC , mspdec); _(NVKM_ENGINE_MSPPP , msppp); _(NVKM_ENGINE_MSVLD , msvld); _(NVKM_ENGINE_NVENC0 , nvenc[0]); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/base.c index 80211f76093b..842fcfbd28b8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/base.c @@ -24,9 +24,8 @@ #include "priv.h" int -nvkm_mspdec_new_(const struct nvkm_falcon_func *func, - struct nvkm_device *device, int index, - struct nvkm_engine **pengine) +nvkm_mspdec_new_(const struct nvkm_falcon_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_falcon_new_(func, device, index, true, 0x085000, pengine); + return nvkm_falcon_new_(func, device, type, inst, true, 0x085000, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/g98.c b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/g98.c index f30cf1dcfb30..ecb06d68f544 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/g98.c @@ -43,8 +43,8 @@ g98_mspdec = { }; int -g98_mspdec_new(struct nvkm_device *device, int index, - struct nvkm_engine **pengine) +g98_mspdec_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pengine) { - return nvkm_mspdec_new_(&g98_mspdec, device, index, pengine); + return nvkm_mspdec_new_(&g98_mspdec, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gf100.c index cfe1aa81bd14..0a69bd767d69 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gf100.c @@ -43,8 +43,8 @@ gf100_mspdec = { }; int -gf100_mspdec_new(struct nvkm_device *device, int index, +gf100_mspdec_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_mspdec_new_(&gf100_mspdec, device, index, pengine); + return nvkm_mspdec_new_(&gf100_mspdec, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gk104.c index 24272b4927bc..a08991dca428 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gk104.c @@ -35,8 +35,8 @@ gk104_mspdec = { }; int -gk104_mspdec_new(struct nvkm_device *device, int index, +gk104_mspdec_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_mspdec_new_(&gk104_mspdec, device, index, pengine); + return nvkm_mspdec_new_(&gk104_mspdec, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gt215.c index cf6e59ad6ee2..791fb03a32ad 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gt215.c @@ -35,8 +35,8 @@ gt215_mspdec = { }; int -gt215_mspdec_new(struct nvkm_device *device, int index, - struct nvkm_engine **pengine) +gt215_mspdec_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pengine) { - return nvkm_mspdec_new_(>215_mspdec, device, index, pengine); + return nvkm_mspdec_new_(>215_mspdec, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/priv.h index 86445a2600d0..2bc5537d40a3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/mspdec/priv.h @@ -3,8 +3,8 @@ #define __NVKM_MSPDEC_PRIV_H__ #include -int nvkm_mspdec_new_(const struct nvkm_falcon_func *, struct nvkm_device *, - int index, struct nvkm_engine **); +int nvkm_mspdec_new_(const struct nvkm_falcon_func *, struct nvkm_device *, enum nvkm_subdev_type, + int, struct nvkm_engine **); void g98_mspdec_init(struct nvkm_falcon *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c index 710eead0ce63..81a85f502495 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c @@ -35,7 +35,7 @@ g98_devinit_disable(struct nvkm_devinit *init) u64 disable = 0ULL; if (!(r001540 & 0x40000000)) { - disable |= (1ULL << NVKM_ENGINE_MSPDEC); + nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); disable |= (1ULL << NVKM_ENGINE_MSVLD); disable |= (1ULL << NVKM_ENGINE_MSPPP); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c index 275616f192e2..61b0d1b5e96f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c @@ -74,7 +74,7 @@ gf100_devinit_disable(struct nvkm_devinit *init) nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (r022500 & 0x00000002) { - disable |= (1ULL << NVKM_ENGINE_MSPDEC); + nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); disable |= (1ULL << NVKM_ENGINE_MSPPP); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c index ecaa6f8f7c5b..2cd999060a61 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c @@ -71,7 +71,7 @@ gt215_devinit_disable(struct nvkm_devinit *init) u64 disable = 0ULL; if (!(r001540 & 0x40000000)) { - disable |= (1ULL << NVKM_ENGINE_MSPDEC); + nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); disable |= (1ULL << NVKM_ENGINE_MSPPP); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c index 6f4a49ae7548..cb14ab804c97 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c @@ -35,7 +35,7 @@ mcp89_devinit_disable(struct nvkm_devinit *init) u64 disable = 0; if (!(r001540 & 0x40000000)) { - disable |= (1ULL << NVKM_ENGINE_MSPDEC); + nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); disable |= (1ULL << NVKM_ENGINE_MSPPP); } From 07a356bbe7723c4ba1473ea6a8c92caab9af6233 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:39:28 +1000 Subject: [PATCH 74/87] drm/nouveau/msppp: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/msppp.h | 6 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 47 +++++++++---------- .../gpu/drm/nouveau/nvkm/engine/msppp/base.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/msppp/g98.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/msppp/gf100.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/msppp/gt215.c | 6 +-- .../gpu/drm/nouveau/nvkm/engine/msppp/priv.h | 4 +- .../gpu/drm/nouveau/nvkm/subdev/devinit/g98.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/gf100.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/gt215.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/mcp89.c | 2 +- 14 files changed, 42 insertions(+), 45 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index e8200e2a29d1..3f632c86740b 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *msppp; struct nvkm_engine *msvld; struct nvkm_nvenc *nvenc[3]; struct nvkm_nvdec *nvdec[3]; @@ -110,7 +109,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*msppp )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*msvld )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*nvenc[3])(struct nvkm_device *, int idx, struct nvkm_nvenc **); int (*nvdec[3])(struct nvkm_device *, int idx, struct nvkm_nvdec **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index cce050b2de56..649c9ff51a3c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -37,4 +37,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_ME , struct nvkm_engine , me) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MPEG , struct nvkm_engine , mpeg) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSENC , struct nvkm_engine , msenc) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPDEC , struct nvkm_engine , mspdec) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPPP , struct nvkm_engine , msppp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/msppp.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/msppp.h index 69e09fd96e0c..81c2b6f0ad84 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/msppp.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/msppp.h @@ -2,7 +2,7 @@ #ifndef __NVKM_MSPPP_H__ #define __NVKM_MSPPP_H__ #include -int g98_msppp_new(struct nvkm_device *, int, struct nvkm_engine **); -int gt215_msppp_new(struct nvkm_device *, int, struct nvkm_engine **); -int gf100_msppp_new(struct nvkm_device *, int, struct nvkm_engine **); +int g98_msppp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gt215_msppp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gf100_msppp_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 09015ff40e3a..dff42fe7a12a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_MSPPP ] = "msppp", [NVKM_ENGINE_MSVLD ] = "msvld", [NVKM_ENGINE_NVENC0 ] = "nvenc0", [NVKM_ENGINE_NVENC1 ] = "nvenc1", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 49d554e35927..cabf6dc3234d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1099,7 +1099,7 @@ nv98_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, .mspdec = { 0x00000001, g98_mspdec_new }, - .msppp = g98_msppp_new, + .msppp = { 0x00000001, g98_msppp_new }, .msvld = g98_msvld_new, .pm = g84_pm_new, .sec = g98_sec_new, @@ -1166,7 +1166,7 @@ nva3_chipset = { .gr = { 0x00000001, gt215_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, .mspdec = { 0x00000001, gt215_mspdec_new }, - .msppp = gt215_msppp_new, + .msppp = { 0x00000001, gt215_msppp_new }, .msvld = gt215_msvld_new, .pm = gt215_pm_new, .sw = nv50_sw_new, @@ -1199,7 +1199,7 @@ nva5_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt215_gr_new }, .mspdec = { 0x00000001, gt215_mspdec_new }, - .msppp = gt215_msppp_new, + .msppp = { 0x00000001, gt215_msppp_new }, .msvld = gt215_msvld_new, .pm = gt215_pm_new, .sw = nv50_sw_new, @@ -1232,7 +1232,7 @@ nva8_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt215_gr_new }, .mspdec = { 0x00000001, gt215_mspdec_new }, - .msppp = gt215_msppp_new, + .msppp = { 0x00000001, gt215_msppp_new }, .msvld = gt215_msvld_new, .pm = gt215_pm_new, .sw = nv50_sw_new, @@ -1263,7 +1263,7 @@ nvaa_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt200_gr_new }, .mspdec = { 0x00000001, g98_mspdec_new }, - .msppp = g98_msppp_new, + .msppp = { 0x00000001, g98_msppp_new }, .msvld = g98_msvld_new, .pm = g84_pm_new, .sec = g98_sec_new, @@ -1295,7 +1295,7 @@ nvac_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, mcp79_gr_new }, .mspdec = { 0x00000001, g98_mspdec_new }, - .msppp = g98_msppp_new, + .msppp = { 0x00000001, g98_msppp_new }, .msvld = g98_msvld_new, .pm = g84_pm_new, .sec = g98_sec_new, @@ -1329,7 +1329,7 @@ nvaf_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, mcp89_gr_new }, .mspdec = { 0x00000001, gt215_mspdec_new }, - .msppp = gt215_msppp_new, + .msppp = { 0x00000001, gt215_msppp_new }, .msvld = mcp89_msvld_new, .pm = gt215_pm_new, .sw = nv50_sw_new, @@ -1365,7 +1365,7 @@ nvc0_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf100_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf100_pm_new, .sw = gf100_sw_new, @@ -1401,7 +1401,7 @@ nvc1_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf108_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf108_pm_new, .sw = gf100_sw_new, @@ -1437,7 +1437,7 @@ nvc3_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf104_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf100_pm_new, .sw = gf100_sw_new, @@ -1473,7 +1473,7 @@ nvc4_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf104_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf100_pm_new, .sw = gf100_sw_new, @@ -1509,7 +1509,7 @@ nvc8_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf110_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf100_pm_new, .sw = gf100_sw_new, @@ -1545,7 +1545,7 @@ nvce_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf104_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf100_pm_new, .sw = gf100_sw_new, @@ -1581,7 +1581,7 @@ nvcf_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf104_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf100_pm_new, .sw = gf100_sw_new, @@ -1616,7 +1616,7 @@ nvd7_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf117_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf117_pm_new, .sw = gf100_sw_new, @@ -1652,7 +1652,7 @@ nvd9_chipset = { .fifo = { 0x00000001, gf100_fifo_new }, .gr = { 0x00000001, gf119_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gf100_msvld_new, .pm = gf117_pm_new, .sw = gf100_sw_new, @@ -1689,7 +1689,7 @@ nve4_chipset = { .fifo = { 0x00000001, gk104_fifo_new }, .gr = { 0x00000001, gk104_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gk104_msvld_new, .pm = gk104_pm_new, .sw = gf100_sw_new, @@ -1726,7 +1726,7 @@ nve6_chipset = { .fifo = { 0x00000001, gk104_fifo_new }, .gr = { 0x00000001, gk104_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gk104_msvld_new, .pm = gk104_pm_new, .sw = gf100_sw_new, @@ -1763,7 +1763,7 @@ nve7_chipset = { .fifo = { 0x00000001, gk104_fifo_new }, .gr = { 0x00000001, gk104_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gk104_msvld_new, .pm = gk104_pm_new, .sw = gf100_sw_new, @@ -1825,7 +1825,7 @@ nvf0_chipset = { .fifo = { 0x00000001, gk110_fifo_new }, .gr = { 0x00000001, gk110_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gk104_msvld_new, .sw = gf100_sw_new, }; @@ -1861,7 +1861,7 @@ nvf1_chipset = { .fifo = { 0x00000001, gk110_fifo_new }, .gr = { 0x00000001, gk110b_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gk104_msvld_new, .sw = gf100_sw_new, }; @@ -1897,7 +1897,7 @@ nv106_chipset = { .fifo = { 0x00000001, gk208_fifo_new }, .gr = { 0x00000001, gk208_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gk104_msvld_new, .sw = gf100_sw_new, }; @@ -1933,7 +1933,7 @@ nv108_chipset = { .fifo = { 0x00000001, gk208_fifo_new }, .gr = { 0x00000001, gk208_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, - .msppp = gf100_msppp_new, + .msppp = { 0x00000001, gf100_msppp_new }, .msvld = gk104_msvld_new, .sw = gf100_sw_new, }; @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_MSPPP , msppp); _(NVKM_ENGINE_MSVLD , msvld); _(NVKM_ENGINE_NVENC0 , nvenc[0]); _(NVKM_ENGINE_NVENC1 , nvenc[1]); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/base.c index bfae5e60e925..45a9411ab2e2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/base.c @@ -25,7 +25,7 @@ int nvkm_msppp_new_(const struct nvkm_falcon_func *func, struct nvkm_device *device, - int index, struct nvkm_engine **pengine) + enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_falcon_new_(func, device, index, true, 0x086000, pengine); + return nvkm_falcon_new_(func, device, type, inst, true, 0x086000, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/g98.c b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/g98.c index c45dbf79d1f9..160120b9bd64 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/g98.c @@ -43,8 +43,8 @@ g98_msppp = { }; int -g98_msppp_new(struct nvkm_device *device, int index, +g98_msppp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_msppp_new_(&g98_msppp, device, index, pengine); + return nvkm_msppp_new_(&g98_msppp, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/gf100.c index 803c62ab516e..debed9ae8731 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/gf100.c @@ -43,8 +43,8 @@ gf100_msppp = { }; int -gf100_msppp_new(struct nvkm_device *device, int index, +gf100_msppp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_msppp_new_(&gf100_msppp, device, index, pengine); + return nvkm_msppp_new_(&gf100_msppp, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/gt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/gt215.c index 49cbf72cee4b..a2fd736fef94 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/gt215.c @@ -35,8 +35,8 @@ gt215_msppp = { }; int -gt215_msppp_new(struct nvkm_device *device, int index, - struct nvkm_engine **pengine) +gt215_msppp_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pengine) { - return nvkm_msppp_new_(>215_msppp, device, index, pengine); + return nvkm_msppp_new_(>215_msppp, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/priv.h index f20b10915db2..582ab8ce1425 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msppp/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msppp/priv.h @@ -3,8 +3,8 @@ #define __NVKM_MSPPP_PRIV_H__ #include -int nvkm_msppp_new_(const struct nvkm_falcon_func *, struct nvkm_device *, - int index, struct nvkm_engine **); +int nvkm_msppp_new_(const struct nvkm_falcon_func *, struct nvkm_device *, enum nvkm_subdev_type, + int, struct nvkm_engine **); void g98_msppp_init(struct nvkm_falcon *); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c index 81a85f502495..f274d6077319 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c @@ -37,7 +37,7 @@ g98_devinit_disable(struct nvkm_devinit *init) if (!(r001540 & 0x40000000)) { nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); disable |= (1ULL << NVKM_ENGINE_MSVLD); - disable |= (1ULL << NVKM_ENGINE_MSPPP); + nvkm_subdev_disable(device, NVKM_ENGINE_MSPPP, 0); } if (!(r00154c & 0x00000004)) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c index 61b0d1b5e96f..c5a5064bebc1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c @@ -75,7 +75,7 @@ gf100_devinit_disable(struct nvkm_devinit *init) if (r022500 & 0x00000002) { nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); - disable |= (1ULL << NVKM_ENGINE_MSPPP); + nvkm_subdev_disable(device, NVKM_ENGINE_MSPPP, 0); } if (r022500 & 0x00000004) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c index 2cd999060a61..88d70b34ee06 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c @@ -72,7 +72,7 @@ gt215_devinit_disable(struct nvkm_devinit *init) if (!(r001540 & 0x40000000)) { nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); - disable |= (1ULL << NVKM_ENGINE_MSPPP); + nvkm_subdev_disable(device, NVKM_ENGINE_MSPPP, 0); } if (!(r00154c & 0x00000004)) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c index cb14ab804c97..be59afa42189 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c @@ -36,7 +36,7 @@ mcp89_devinit_disable(struct nvkm_devinit *init) if (!(r001540 & 0x40000000)) { nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); - disable |= (1ULL << NVKM_ENGINE_MSPPP); + nvkm_subdev_disable(device, NVKM_ENGINE_MSPPP, 0); } if (!(r00154c & 0x00000004)) From b15147bd7170b5930ff3c5e8c17cbe03800ddcdb Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:40:18 +1000 Subject: [PATCH 75/87] drm/nouveau/msvld: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/msvld.h | 10 ++-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 47 +++++++++---------- .../gpu/drm/nouveau/nvkm/engine/msvld/base.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/msvld/g98.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/msvld/gf100.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/msvld/gk104.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/msvld/gt215.c | 6 +-- .../gpu/drm/nouveau/nvkm/engine/msvld/mcp89.c | 6 +-- .../gpu/drm/nouveau/nvkm/engine/msvld/priv.h | 4 +- .../gpu/drm/nouveau/nvkm/subdev/devinit/g98.c | 4 +- .../drm/nouveau/nvkm/subdev/devinit/gf100.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/gt215.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/mcp89.c | 2 +- 16 files changed, 50 insertions(+), 53 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 3f632c86740b..a504d7dd4112 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *msvld; struct nvkm_nvenc *nvenc[3]; struct nvkm_nvdec *nvdec[3]; struct nvkm_pm *pm; @@ -109,7 +108,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*msvld )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*nvenc[3])(struct nvkm_device *, int idx, struct nvkm_nvenc **); int (*nvdec[3])(struct nvkm_device *, int idx, struct nvkm_nvdec **); int (*pm )(struct nvkm_device *, int idx, struct nvkm_pm **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 649c9ff51a3c..dc718a462780 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -38,4 +38,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_MPEG , struct nvkm_engine , mpeg) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSENC , struct nvkm_engine , msenc) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPDEC , struct nvkm_engine , mspdec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPPP , struct nvkm_engine , msppp) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSVLD , struct nvkm_engine , msvld) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/msvld.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/msvld.h index 9e11cefc9649..2d5fa961ba66 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/msvld.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/msvld.h @@ -2,9 +2,9 @@ #ifndef __NVKM_MSVLD_H__ #define __NVKM_MSVLD_H__ #include -int g98_msvld_new(struct nvkm_device *, int, struct nvkm_engine **); -int gt215_msvld_new(struct nvkm_device *, int, struct nvkm_engine **); -int mcp89_msvld_new(struct nvkm_device *, int, struct nvkm_engine **); -int gf100_msvld_new(struct nvkm_device *, int, struct nvkm_engine **); -int gk104_msvld_new(struct nvkm_device *, int, struct nvkm_engine **); +int g98_msvld_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gt215_msvld_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int mcp89_msvld_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gf100_msvld_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); +int gk104_msvld_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index dff42fe7a12a..c1a3076eccf9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_MSVLD ] = "msvld", [NVKM_ENGINE_NVENC0 ] = "nvenc0", [NVKM_ENGINE_NVENC1 ] = "nvenc1", [NVKM_ENGINE_NVENC2 ] = "nvenc2", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index cabf6dc3234d..d18a24a61698 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1100,7 +1100,7 @@ nv98_chipset = { .gr = { 0x00000001, g84_gr_new }, .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = { 0x00000001, g98_msppp_new }, - .msvld = g98_msvld_new, + .msvld = { 0x00000001, g98_msvld_new }, .pm = g84_pm_new, .sec = g98_sec_new, .sw = nv50_sw_new, @@ -1167,7 +1167,7 @@ nva3_chipset = { .mpeg = { 0x00000001, g84_mpeg_new }, .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = { 0x00000001, gt215_msppp_new }, - .msvld = gt215_msvld_new, + .msvld = { 0x00000001, gt215_msvld_new }, .pm = gt215_pm_new, .sw = nv50_sw_new, }; @@ -1200,7 +1200,7 @@ nva5_chipset = { .gr = { 0x00000001, gt215_gr_new }, .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = { 0x00000001, gt215_msppp_new }, - .msvld = gt215_msvld_new, + .msvld = { 0x00000001, gt215_msvld_new }, .pm = gt215_pm_new, .sw = nv50_sw_new, }; @@ -1233,7 +1233,7 @@ nva8_chipset = { .gr = { 0x00000001, gt215_gr_new }, .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = { 0x00000001, gt215_msppp_new }, - .msvld = gt215_msvld_new, + .msvld = { 0x00000001, gt215_msvld_new }, .pm = gt215_pm_new, .sw = nv50_sw_new, }; @@ -1264,7 +1264,7 @@ nvaa_chipset = { .gr = { 0x00000001, gt200_gr_new }, .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = { 0x00000001, g98_msppp_new }, - .msvld = g98_msvld_new, + .msvld = { 0x00000001, g98_msvld_new }, .pm = g84_pm_new, .sec = g98_sec_new, .sw = nv50_sw_new, @@ -1296,7 +1296,7 @@ nvac_chipset = { .gr = { 0x00000001, mcp79_gr_new }, .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = { 0x00000001, g98_msppp_new }, - .msvld = g98_msvld_new, + .msvld = { 0x00000001, g98_msvld_new }, .pm = g84_pm_new, .sec = g98_sec_new, .sw = nv50_sw_new, @@ -1330,7 +1330,7 @@ nvaf_chipset = { .gr = { 0x00000001, mcp89_gr_new }, .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = { 0x00000001, gt215_msppp_new }, - .msvld = mcp89_msvld_new, + .msvld = { 0x00000001, mcp89_msvld_new }, .pm = gt215_pm_new, .sw = nv50_sw_new, }; @@ -1366,7 +1366,7 @@ nvc0_chipset = { .gr = { 0x00000001, gf100_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf100_pm_new, .sw = gf100_sw_new, }; @@ -1402,7 +1402,7 @@ nvc1_chipset = { .gr = { 0x00000001, gf108_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf108_pm_new, .sw = gf100_sw_new, }; @@ -1438,7 +1438,7 @@ nvc3_chipset = { .gr = { 0x00000001, gf104_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf100_pm_new, .sw = gf100_sw_new, }; @@ -1474,7 +1474,7 @@ nvc4_chipset = { .gr = { 0x00000001, gf104_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf100_pm_new, .sw = gf100_sw_new, }; @@ -1510,7 +1510,7 @@ nvc8_chipset = { .gr = { 0x00000001, gf110_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf100_pm_new, .sw = gf100_sw_new, }; @@ -1546,7 +1546,7 @@ nvce_chipset = { .gr = { 0x00000001, gf104_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf100_pm_new, .sw = gf100_sw_new, }; @@ -1582,7 +1582,7 @@ nvcf_chipset = { .gr = { 0x00000001, gf104_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf100_pm_new, .sw = gf100_sw_new, }; @@ -1617,7 +1617,7 @@ nvd7_chipset = { .gr = { 0x00000001, gf117_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf117_pm_new, .sw = gf100_sw_new, }; @@ -1653,7 +1653,7 @@ nvd9_chipset = { .gr = { 0x00000001, gf119_gr_new }, .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gf100_msvld_new, + .msvld = { 0x00000001, gf100_msvld_new }, .pm = gf117_pm_new, .sw = gf100_sw_new, }; @@ -1690,7 +1690,7 @@ nve4_chipset = { .gr = { 0x00000001, gk104_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gk104_msvld_new, + .msvld = { 0x00000001, gk104_msvld_new }, .pm = gk104_pm_new, .sw = gf100_sw_new, }; @@ -1727,7 +1727,7 @@ nve6_chipset = { .gr = { 0x00000001, gk104_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gk104_msvld_new, + .msvld = { 0x00000001, gk104_msvld_new }, .pm = gk104_pm_new, .sw = gf100_sw_new, }; @@ -1764,7 +1764,7 @@ nve7_chipset = { .gr = { 0x00000001, gk104_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gk104_msvld_new, + .msvld = { 0x00000001, gk104_msvld_new }, .pm = gk104_pm_new, .sw = gf100_sw_new, }; @@ -1826,7 +1826,7 @@ nvf0_chipset = { .gr = { 0x00000001, gk110_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gk104_msvld_new, + .msvld = { 0x00000001, gk104_msvld_new }, .sw = gf100_sw_new, }; @@ -1862,7 +1862,7 @@ nvf1_chipset = { .gr = { 0x00000001, gk110b_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gk104_msvld_new, + .msvld = { 0x00000001, gk104_msvld_new }, .sw = gf100_sw_new, }; @@ -1898,7 +1898,7 @@ nv106_chipset = { .gr = { 0x00000001, gk208_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gk104_msvld_new, + .msvld = { 0x00000001, gk104_msvld_new }, .sw = gf100_sw_new, }; @@ -1934,7 +1934,7 @@ nv108_chipset = { .gr = { 0x00000001, gk208_gr_new }, .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, - .msvld = gk104_msvld_new, + .msvld = { 0x00000001, gk104_msvld_new }, .sw = gf100_sw_new, }; @@ -3174,7 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_MSVLD , msvld); _(NVKM_ENGINE_NVENC0 , nvenc[0]); _(NVKM_ENGINE_NVENC1 , nvenc[1]); _(NVKM_ENGINE_NVENC2 , nvenc[2]); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/base.c index 745bbb653dc0..7be42b980e57 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/base.c @@ -25,7 +25,7 @@ int nvkm_msvld_new_(const struct nvkm_falcon_func *func, struct nvkm_device *device, - int index, struct nvkm_engine **pengine) + enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_falcon_new_(func, device, index, true, 0x084000, pengine); + return nvkm_falcon_new_(func, device, type, inst, true, 0x084000, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/g98.c b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/g98.c index 4a2a9f0494af..cfa2065319a6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/g98.c @@ -43,8 +43,8 @@ g98_msvld = { }; int -g98_msvld_new(struct nvkm_device *device, int index, +g98_msvld_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_msvld_new_(&g98_msvld, device, index, pengine); + return nvkm_msvld_new_(&g98_msvld, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gf100.c index 1695e532c081..8d58ad8e04d3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gf100.c @@ -43,8 +43,8 @@ gf100_msvld = { }; int -gf100_msvld_new(struct nvkm_device *device, int index, +gf100_msvld_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_msvld_new_(&gf100_msvld, device, index, pengine); + return nvkm_msvld_new_(&gf100_msvld, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gk104.c index b640cd63ebe8..b28be28046f1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gk104.c @@ -35,8 +35,8 @@ gk104_msvld = { }; int -gk104_msvld_new(struct nvkm_device *device, int index, +gk104_msvld_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_msvld_new_(&gk104_msvld, device, index, pengine); + return nvkm_msvld_new_(&gk104_msvld, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gt215.c index 201e8ef3519e..d7489f972c99 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/gt215.c @@ -35,8 +35,8 @@ gt215_msvld = { }; int -gt215_msvld_new(struct nvkm_device *device, int index, - struct nvkm_engine **pengine) +gt215_msvld_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pengine) { - return nvkm_msvld_new_(>215_msvld, device, index, pengine); + return nvkm_msvld_new_(>215_msvld, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/mcp89.c index a0f540ef257b..16c30b62ab09 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/mcp89.c @@ -35,8 +35,8 @@ mcp89_msvld = { }; int -mcp89_msvld_new(struct nvkm_device *device, int index, - struct nvkm_engine **pengine) +mcp89_msvld_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_engine **pengine) { - return nvkm_msvld_new_(&mcp89_msvld, device, index, pengine); + return nvkm_msvld_new_(&mcp89_msvld, device, type, inst, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/priv.h index 5cd1e83badbb..f729d919b054 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/msvld/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/msvld/priv.h @@ -3,8 +3,8 @@ #define __NVKM_MSVLD_PRIV_H__ #include -int nvkm_msvld_new_(const struct nvkm_falcon_func *, struct nvkm_device *, - int index, struct nvkm_engine **); +int nvkm_msvld_new_(const struct nvkm_falcon_func *, struct nvkm_device *, enum nvkm_subdev_type, + int, struct nvkm_engine **); void g98_msvld_init(struct nvkm_falcon *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c index f274d6077319..f4267429f59d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c @@ -36,14 +36,14 @@ g98_devinit_disable(struct nvkm_devinit *init) if (!(r001540 & 0x40000000)) { nvkm_subdev_disable(device, NVKM_ENGINE_MSPDEC, 0); - disable |= (1ULL << NVKM_ENGINE_MSVLD); + nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0); nvkm_subdev_disable(device, NVKM_ENGINE_MSPPP, 0); } if (!(r00154c & 0x00000004)) nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (!(r00154c & 0x00000020)) - disable |= (1ULL << NVKM_ENGINE_MSVLD); + nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0); if (!(r00154c & 0x00000040)) disable |= (1ULL << NVKM_ENGINE_SEC); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c index c5a5064bebc1..051cfd6a5caf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.c @@ -79,7 +79,7 @@ gf100_devinit_disable(struct nvkm_devinit *init) } if (r022500 & 0x00000004) - disable |= (1ULL << NVKM_ENGINE_MSVLD); + nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0); if (r022500 & 0x00000008) nvkm_subdev_disable(device, NVKM_ENGINE_MSENC, 0); if (r022500 & 0x00000100) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c index 88d70b34ee06..dc026ac1b595 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.c @@ -78,7 +78,7 @@ gt215_devinit_disable(struct nvkm_devinit *init) if (!(r00154c & 0x00000004)) nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (!(r00154c & 0x00000020)) - disable |= (1ULL << NVKM_ENGINE_MSVLD); + nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0); if (!(r00154c & 0x00000200)) nvkm_subdev_disable(device, NVKM_ENGINE_CE, 0); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c index be59afa42189..0c92550536cf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c @@ -42,7 +42,7 @@ mcp89_devinit_disable(struct nvkm_devinit *init) if (!(r00154c & 0x00000004)) nvkm_subdev_disable(device, NVKM_ENGINE_DISP, 0); if (!(r00154c & 0x00000020)) - disable |= (1ULL << NVKM_ENGINE_MSVLD); + nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0); if (!(r00154c & 0x00000040)) disable |= (1ULL << NVKM_ENGINE_VIC); if (!(r00154c & 0x00000200)) From f8aeb13303c277102f73a06b9ac444ce9a57d07e Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 16:01:06 +1000 Subject: [PATCH 76/87] drm/nouveau/nvdec: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/nvdec.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 7 ---- .../gpu/drm/nouveau/nvkm/engine/device/base.c | 40 +++++++++---------- .../gpu/drm/nouveau/nvkm/engine/nvdec/base.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/nvdec/gm107.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/nvdec/priv.h | 4 +- 8 files changed, 26 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index a504d7dd4112..74384ebc8705 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -61,7 +61,6 @@ struct nvkm_device { } acpi; struct nvkm_nvenc *nvenc[3]; - struct nvkm_nvdec *nvdec[3]; struct nvkm_pm *pm; struct nvkm_engine *sec; struct nvkm_sec2 *sec2; @@ -109,7 +108,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_ONCE int (*nvenc[3])(struct nvkm_device *, int idx, struct nvkm_nvenc **); - int (*nvdec[3])(struct nvkm_device *, int idx, struct nvkm_nvdec **); int (*pm )(struct nvkm_device *, int idx, struct nvkm_pm **); int (*sec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*sec2 )(struct nvkm_device *, int idx, struct nvkm_sec2 **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index dc718a462780..8f94b1da74de 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -39,4 +39,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSENC , struct nvkm_engine , msenc) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPDEC , struct nvkm_engine , mspdec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPPP , struct nvkm_engine , msppp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSVLD , struct nvkm_engine , msvld) +NVKM_LAYOUT_INST(NVKM_ENGINE_NVDEC , struct nvkm_nvdec , nvdec, 3) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/nvdec.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/nvdec.h index 1b3183e31606..97bd3092f68a 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/nvdec.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/nvdec.h @@ -11,5 +11,5 @@ struct nvkm_nvdec { struct nvkm_falcon falcon; }; -int gm107_nvdec_new(struct nvkm_device *, int, struct nvkm_nvdec **); +int gm107_nvdec_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_nvdec **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index c1a3076eccf9..77fe4e098dfa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -36,9 +36,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { [NVKM_ENGINE_NVENC0 ] = "nvenc0", [NVKM_ENGINE_NVENC1 ] = "nvenc1", [NVKM_ENGINE_NVENC2 ] = "nvenc2", - [NVKM_ENGINE_NVDEC0 ] = "nvdec0", - [NVKM_ENGINE_NVDEC1 ] = "nvdec1", - [NVKM_ENGINE_NVDEC2 ] = "nvdec2", [NVKM_ENGINE_PM ] = "pm", [NVKM_ENGINE_SEC ] = "sec", [NVKM_ENGINE_SEC2 ] = "sec2", @@ -194,10 +191,6 @@ nvkm_subdev_ctor_(const struct nvkm_subdev_func *func, bool old, subdev->type = NVKM_ENGINE_NVENC; subdev->inst = subdev->index - NVKM_ENGINE_NVENC0; break; - case NVKM_ENGINE_NVDEC0 ... NVKM_ENGINE_NVDEC_LAST: - subdev->type = NVKM_ENGINE_NVDEC; - subdev->inst = subdev->index - NVKM_ENGINE_NVDEC0; - break; default: break; } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index d18a24a61698..a7c7bc07a331 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1968,7 +1968,7 @@ nv117_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm107_fifo_new }, .gr = { 0x00000001, gm107_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .sw = gf100_sw_new, }; @@ -2036,7 +2036,7 @@ nv120_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm200_fifo_new }, .gr = { 0x00000001, gm200_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, .sw = gf100_sw_new, @@ -2072,7 +2072,7 @@ nv124_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm200_fifo_new }, .gr = { 0x00000001, gm200_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, .sw = gf100_sw_new, @@ -2108,7 +2108,7 @@ nv126_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm200_fifo_new }, .gr = { 0x00000001, gm200_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .sw = gf100_sw_new, }; @@ -2166,7 +2166,7 @@ nv130_chipset = { .disp = { 0x00000001, gp100_disp_new }, .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp100_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, .nvenc[2] = gm107_nvenc_new, @@ -2201,7 +2201,7 @@ nv132_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp102_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, .sec2 = gp102_sec2_new, @@ -2236,7 +2236,7 @@ nv134_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp104_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, .sec2 = gp102_sec2_new, @@ -2271,7 +2271,7 @@ nv136_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp104_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .sec2 = gp102_sec2_new, .sw = gf100_sw_new, @@ -2305,7 +2305,7 @@ nv137_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp107_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, .sec2 = gp102_sec2_new, @@ -2340,7 +2340,7 @@ nv138_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp108_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .sec2 = gp108_sec2_new, .sw = gf100_sw_new, }; @@ -2398,7 +2398,7 @@ nv140_chipset = { .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, gv100_fifo_new }, .gr = { 0x00000001, gv100_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .nvenc[1] = gm107_nvenc_new, .nvenc[2] = gm107_nvenc_new, @@ -2434,7 +2434,7 @@ nv162_chipset = { .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .sec2 = tu102_sec2_new, }; @@ -2468,8 +2468,7 @@ nv164_chipset = { .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, - .nvdec[0] = gm107_nvdec_new, - .nvdec[1] = gm107_nvdec_new, + .nvdec = { 0x00000003, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .sec2 = tu102_sec2_new, }; @@ -2503,9 +2502,7 @@ nv166_chipset = { .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, - .nvdec[0] = gm107_nvdec_new, - .nvdec[1] = gm107_nvdec_new, - .nvdec[2] = gm107_nvdec_new, + .nvdec = { 0x00000007, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .sec2 = tu102_sec2_new, }; @@ -2539,7 +2536,7 @@ nv167_chipset = { .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .sec2 = tu102_sec2_new, }; @@ -2573,7 +2570,7 @@ nv168_chipset = { .dma = { 0x00000001, gv100_dma_new }, .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, - .nvdec[0] = gm107_nvdec_new, + .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc[0] = gm107_nvenc_new, .sec2 = tu102_sec2_new, }; @@ -3177,9 +3174,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, _(NVKM_ENGINE_NVENC0 , nvenc[0]); _(NVKM_ENGINE_NVENC1 , nvenc[1]); _(NVKM_ENGINE_NVENC2 , nvenc[2]); - _(NVKM_ENGINE_NVDEC0 , nvdec[0]); - _(NVKM_ENGINE_NVDEC1 , nvdec[1]); - _(NVKM_ENGINE_NVDEC2 , nvdec[2]); _(NVKM_ENGINE_PM , pm); _(NVKM_ENGINE_SEC , sec); _(NVKM_ENGINE_SEC2 , sec2); @@ -3193,6 +3187,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func, case NVKM_ENGINE_CE6: case NVKM_ENGINE_CE7: case NVKM_ENGINE_CE8: + case NVKM_ENGINE_NVDEC1: + case NVKM_ENGINE_NVDEC2: break; default: WARN_ON(1); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c index b6f3ca8a5f46..b0181cc5953b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.c @@ -37,7 +37,7 @@ nvkm_nvdec = { int nvkm_nvdec_new_(const struct nvkm_nvdec_fwif *fwif, struct nvkm_device *device, - int index, struct nvkm_nvdec **pnvdec) + enum nvkm_subdev_type type, int inst, struct nvkm_nvdec **pnvdec) { struct nvkm_nvdec *nvdec; int ret; @@ -45,7 +45,7 @@ nvkm_nvdec_new_(const struct nvkm_nvdec_fwif *fwif, struct nvkm_device *device, if (!(nvdec = *pnvdec = kzalloc(sizeof(*nvdec), GFP_KERNEL))) return -ENOMEM; - ret = nvkm_engine_ctor(&nvkm_nvdec, device, index, true, + ret = nvkm_engine_ctor(&nvkm_nvdec, device, type, inst, true, &nvdec->engine); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/gm107.c index 0ab27ab4d8ee..8c44ce44a6d7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/gm107.c @@ -56,8 +56,8 @@ gm107_nvdec_fwif[] = { }; int -gm107_nvdec_new(struct nvkm_device *device, int index, +gm107_nvdec_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_nvdec **pnvdec) { - return nvkm_nvdec_new_(gm107_nvdec_fwif, device, index, pnvdec); + return nvkm_nvdec_new_(gm107_nvdec_fwif, device, type, inst, pnvdec); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/priv.h index e14da8b000d0..0920f6a887e2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvdec/priv.h @@ -14,6 +14,6 @@ struct nvkm_nvdec_fwif { const struct nvkm_nvdec_func *func; }; -int nvkm_nvdec_new_(const struct nvkm_nvdec_fwif *fwif, - struct nvkm_device *, int, struct nvkm_nvdec **); +int nvkm_nvdec_new_(const struct nvkm_nvdec_fwif *fwif, struct nvkm_device *, + enum nvkm_subdev_type, int, struct nvkm_nvdec **); #endif From ee532a8d0e644b6ef3dd8da9633b3b629a97e42c Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 16:04:23 +1000 Subject: [PATCH 77/87] drm/nouveau/nvenc: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/nvenc.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 15 ------- .../gpu/drm/nouveau/nvkm/engine/device/base.c | 44 +++++++------------ .../gpu/drm/nouveau/nvkm/engine/nvenc/base.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/nvenc/gm107.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/nvenc/priv.h | 2 +- 8 files changed, 24 insertions(+), 50 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 74384ebc8705..9b7e1c3642a6 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_nvenc *nvenc[3]; struct nvkm_pm *pm; struct nvkm_engine *sec; struct nvkm_sec2 *sec2; @@ -107,7 +106,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*nvenc[3])(struct nvkm_device *, int idx, struct nvkm_nvenc **); int (*pm )(struct nvkm_device *, int idx, struct nvkm_pm **); int (*sec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*sec2 )(struct nvkm_device *, int idx, struct nvkm_sec2 **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 8f94b1da74de..32c425965178 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -40,4 +40,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPDEC , struct nvkm_engine , mspdec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPPP , struct nvkm_engine , msppp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSVLD , struct nvkm_engine , msvld) NVKM_LAYOUT_INST(NVKM_ENGINE_NVDEC , struct nvkm_nvdec , nvdec, 3) +NVKM_LAYOUT_INST(NVKM_ENGINE_NVENC , struct nvkm_nvenc , nvenc, 3) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/nvenc.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/nvenc.h index 33e6ba8adc8d..1a259c5c9a71 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/nvenc.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/nvenc.h @@ -11,5 +11,5 @@ struct nvkm_nvenc { struct nvkm_falcon falcon; }; -int gm107_nvenc_new(struct nvkm_device *, int, struct nvkm_nvenc **); +int gm107_nvenc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_nvenc **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 77fe4e098dfa..d7e2d3e6f4db 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,9 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_NVENC0 ] = "nvenc0", - [NVKM_ENGINE_NVENC1 ] = "nvenc1", - [NVKM_ENGINE_NVENC2 ] = "nvenc2", [NVKM_ENGINE_PM ] = "pm", [NVKM_ENGINE_SEC ] = "sec", [NVKM_ENGINE_SEC2 ] = "sec2", @@ -185,18 +182,6 @@ nvkm_subdev_ctor_(const struct nvkm_subdev_func *func, bool old, subdev->inst = inst < 0 ? 0 : inst; subdev->index = type + subdev->inst; - if (old) { - switch (subdev->type) { - case NVKM_ENGINE_NVENC0 ... NVKM_ENGINE_NVENC_LAST: - subdev->type = NVKM_ENGINE_NVENC; - subdev->inst = subdev->index - NVKM_ENGINE_NVENC0; - break; - default: - break; - } - inst = -1; - } - if (inst >= 0) snprintf(subdev->name, sizeof(subdev->name), "%s%d", nvkm_subdev_type[type], inst); else diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index a7c7bc07a331..1894fb1760b4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1969,7 +1969,7 @@ nv117_chipset = { .fifo = { 0x00000001, gm107_fifo_new }, .gr = { 0x00000001, gm107_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, + .nvenc = { 0x00000001, gm107_nvenc_new }, .sw = gf100_sw_new, }; @@ -2037,8 +2037,7 @@ nv120_chipset = { .fifo = { 0x00000001, gm200_fifo_new }, .gr = { 0x00000001, gm200_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, - .nvenc[1] = gm107_nvenc_new, + .nvenc = { 0x00000003, gm107_nvenc_new }, .sw = gf100_sw_new, }; @@ -2073,8 +2072,7 @@ nv124_chipset = { .fifo = { 0x00000001, gm200_fifo_new }, .gr = { 0x00000001, gm200_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, - .nvenc[1] = gm107_nvenc_new, + .nvenc = { 0x00000003, gm107_nvenc_new }, .sw = gf100_sw_new, }; @@ -2109,7 +2107,7 @@ nv126_chipset = { .fifo = { 0x00000001, gm200_fifo_new }, .gr = { 0x00000001, gm200_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, + .nvenc = { 0x00000001, gm107_nvenc_new }, .sw = gf100_sw_new, }; @@ -2167,9 +2165,7 @@ nv130_chipset = { .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp100_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, - .nvenc[1] = gm107_nvenc_new, - .nvenc[2] = gm107_nvenc_new, + .nvenc = { 0x00000007, gm107_nvenc_new }, .sw = gf100_sw_new, }; @@ -2202,8 +2198,7 @@ nv132_chipset = { .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp102_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, - .nvenc[1] = gm107_nvenc_new, + .nvenc = { 0x00000003, gm107_nvenc_new }, .sec2 = gp102_sec2_new, .sw = gf100_sw_new, }; @@ -2237,8 +2232,7 @@ nv134_chipset = { .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp104_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, - .nvenc[1] = gm107_nvenc_new, + .nvenc = { 0x00000003, gm107_nvenc_new }, .sec2 = gp102_sec2_new, .sw = gf100_sw_new, }; @@ -2272,7 +2266,7 @@ nv136_chipset = { .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp104_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, + .nvenc = { 0x00000001, gm107_nvenc_new }, .sec2 = gp102_sec2_new, .sw = gf100_sw_new, }; @@ -2306,8 +2300,7 @@ nv137_chipset = { .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp107_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, - .nvenc[1] = gm107_nvenc_new, + .nvenc = { 0x00000003, gm107_nvenc_new }, .sec2 = gp102_sec2_new, .sw = gf100_sw_new, }; @@ -2399,9 +2392,7 @@ nv140_chipset = { .fifo = { 0x00000001, gv100_fifo_new }, .gr = { 0x00000001, gv100_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, - .nvenc[1] = gm107_nvenc_new, - .nvenc[2] = gm107_nvenc_new, + .nvenc = { 0x00000007, gm107_nvenc_new }, .sec2 = gp108_sec2_new, }; @@ -2435,7 +2426,7 @@ nv162_chipset = { .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, + .nvenc = { 0x00000001, gm107_nvenc_new }, .sec2 = tu102_sec2_new, }; @@ -2469,7 +2460,7 @@ nv164_chipset = { .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000003, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, + .nvenc = { 0x00000001, gm107_nvenc_new }, .sec2 = tu102_sec2_new, }; @@ -2503,7 +2494,7 @@ nv166_chipset = { .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000007, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, + .nvenc = { 0x00000001, gm107_nvenc_new }, .sec2 = tu102_sec2_new, }; @@ -2537,7 +2528,7 @@ nv167_chipset = { .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, + .nvenc = { 0x00000001, gm107_nvenc_new }, .sec2 = tu102_sec2_new, }; @@ -2571,7 +2562,7 @@ nv168_chipset = { .fifo = { 0x00000001, tu102_fifo_new }, .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .nvenc[0] = gm107_nvenc_new, + .nvenc = { 0x00000001, gm107_nvenc_new }, .sec2 = tu102_sec2_new, }; @@ -3171,9 +3162,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_NVENC0 , nvenc[0]); - _(NVKM_ENGINE_NVENC1 , nvenc[1]); - _(NVKM_ENGINE_NVENC2 , nvenc[2]); _(NVKM_ENGINE_PM , pm); _(NVKM_ENGINE_SEC , sec); _(NVKM_ENGINE_SEC2 , sec2); @@ -3189,6 +3177,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func, 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); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c index e4dbf05078cc..c39e797dc7c9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.c @@ -39,7 +39,7 @@ nvkm_nvenc = { int nvkm_nvenc_new_(const struct nvkm_nvenc_fwif *fwif, struct nvkm_device *device, - int index, struct nvkm_nvenc **pnvenc) + enum nvkm_subdev_type type, int inst, struct nvkm_nvenc **pnvenc) { struct nvkm_nvenc *nvenc; int ret; @@ -47,7 +47,7 @@ nvkm_nvenc_new_(const struct nvkm_nvenc_fwif *fwif, struct nvkm_device *device, if (!(nvenc = *pnvenc = kzalloc(sizeof(*nvenc), GFP_KERNEL))) return -ENOMEM; - ret = nvkm_engine_ctor(&nvkm_nvenc, device, index, true, + ret = nvkm_engine_ctor(&nvkm_nvenc, device, type, inst, true, &nvenc->engine); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/gm107.c index d249c8ffb2d5..f44d41bf2034 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/gm107.c @@ -56,8 +56,8 @@ gm107_nvenc_fwif[] = { }; int -gm107_nvenc_new(struct nvkm_device *device, int index, +gm107_nvenc_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_nvenc **pnvenc) { - return nvkm_nvenc_new_(gm107_nvenc_fwif, device, index, pnvenc); + return nvkm_nvenc_new_(gm107_nvenc_fwif, device, type, inst, pnvenc); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/priv.h index 100fa5ebbeef..4130a2bfbb4f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/nvenc/priv.h @@ -14,6 +14,6 @@ struct nvkm_nvenc_fwif { const struct nvkm_nvenc_func *func; }; -int nvkm_nvenc_new_(const struct nvkm_nvenc_fwif *, struct nvkm_device *, +int nvkm_nvenc_new_(const struct nvkm_nvenc_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_nvenc **pnvenc); #endif From e73d371a73c1e883395a0f8cec80f501d678d8bb Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 16:07:49 +1000 Subject: [PATCH 78/87] drm/nouveau/pm: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../gpu/drm/nouveau/include/nvkm/engine/pm.h | 18 ++-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 87 +++++++++---------- drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/pm/g84.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/pm/gf100.c | 8 +- .../gpu/drm/nouveau/nvkm/engine/pm/gf100.h | 4 +- .../gpu/drm/nouveau/nvkm/engine/pm/gf108.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/pm/gf117.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/pm/gk104.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/pm/gt200.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/pm/gt215.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c | 8 +- drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.h | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/pm/nv50.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h | 4 +- 18 files changed, 83 insertions(+), 86 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 9b7e1c3642a6..edb74df50575 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_pm *pm; struct nvkm_engine *sec; struct nvkm_sec2 *sec2; struct nvkm_sw *sw; @@ -106,7 +105,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*pm )(struct nvkm_device *, int idx, struct nvkm_pm **); int (*sec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*sec2 )(struct nvkm_device *, int idx, struct nvkm_sec2 **); int (*sw )(struct nvkm_device *, int idx, struct nvkm_sw **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 32c425965178..9d82580851f3 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -41,4 +41,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPPP , struct nvkm_engine , msppp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSVLD , struct nvkm_engine , msvld) NVKM_LAYOUT_INST(NVKM_ENGINE_NVDEC , struct nvkm_nvdec , nvdec, 3) NVKM_LAYOUT_INST(NVKM_ENGINE_NVENC , struct nvkm_nvenc , nvenc, 3) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_PM , struct nvkm_pm , pm) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/pm.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/pm.h index 005409052d38..af89d46ea360 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/pm.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/pm.h @@ -17,13 +17,13 @@ struct nvkm_pm { u32 sequence; }; -int nv40_pm_new(struct nvkm_device *, int, struct nvkm_pm **); -int nv50_pm_new(struct nvkm_device *, int, struct nvkm_pm **); -int g84_pm_new(struct nvkm_device *, int, struct nvkm_pm **); -int gt200_pm_new(struct nvkm_device *, int, struct nvkm_pm **); -int gt215_pm_new(struct nvkm_device *, int, struct nvkm_pm **); -int gf100_pm_new(struct nvkm_device *, int, struct nvkm_pm **); -int gf108_pm_new(struct nvkm_device *, int, struct nvkm_pm **); -int gf117_pm_new(struct nvkm_device *, int, struct nvkm_pm **); -int gk104_pm_new(struct nvkm_device *, int, struct nvkm_pm **); +int nv40_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); +int nv50_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); +int g84_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); +int gt200_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); +int gt215_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); +int gf100_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); +int gf108_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); +int gf117_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); +int gk104_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index d7e2d3e6f4db..5b49a6b56bd6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_PM ] = "pm", [NVKM_ENGINE_SEC ] = "sec", [NVKM_ENGINE_SEC2 ] = "sec2", [NVKM_ENGINE_SW ] = "sw", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 1894fb1760b4..a148176de12a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -491,7 +491,7 @@ nv40_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv40_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -517,7 +517,7 @@ nv41_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv40_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -543,7 +543,7 @@ nv42_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv40_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -569,7 +569,7 @@ nv43_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv40_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -595,7 +595,7 @@ nv44_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -621,7 +621,7 @@ nv45_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -647,7 +647,7 @@ nv46_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -673,7 +673,7 @@ nv47_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -699,7 +699,7 @@ nv49_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -725,7 +725,7 @@ nv4a_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -751,7 +751,7 @@ nv4b_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -777,7 +777,7 @@ nv4c_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -803,7 +803,7 @@ nv4e_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -832,7 +832,7 @@ nv50_chipset = { .fifo = { 0x00000001, nv50_fifo_new }, .gr = { 0x00000001, nv50_gr_new }, .mpeg = { 0x00000001, nv50_mpeg_new }, - .pm = nv50_pm_new, + .pm = { 0x00000001, nv50_pm_new }, .sw = nv50_sw_new, }; @@ -858,7 +858,7 @@ nv63_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -884,7 +884,7 @@ nv67_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -910,7 +910,7 @@ nv68_chipset = { .fifo = { 0x00000001, nv40_fifo_new }, .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, - .pm = nv40_pm_new, + .pm = { 0x00000001, nv40_pm_new }, .sw = nv10_sw_new, }; @@ -941,7 +941,7 @@ nv84_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, - .pm = g84_pm_new, + .pm = { 0x00000001, g84_pm_new }, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, }; @@ -973,7 +973,7 @@ nv86_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, - .pm = g84_pm_new, + .pm = { 0x00000001, g84_pm_new }, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, }; @@ -1005,7 +1005,7 @@ nv92_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, - .pm = g84_pm_new, + .pm = { 0x00000001, g84_pm_new }, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, }; @@ -1037,7 +1037,7 @@ nv94_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, - .pm = g84_pm_new, + .pm = { 0x00000001, g84_pm_new }, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, }; @@ -1069,7 +1069,7 @@ nv96_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, - .pm = g84_pm_new, + .pm = { 0x00000001, g84_pm_new }, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, }; @@ -1101,7 +1101,7 @@ nv98_chipset = { .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = { 0x00000001, g98_msppp_new }, .msvld = { 0x00000001, g98_msvld_new }, - .pm = g84_pm_new, + .pm = { 0x00000001, g84_pm_new }, .sec = g98_sec_new, .sw = nv50_sw_new, }; @@ -1133,7 +1133,7 @@ nva0_chipset = { .fifo = { 0x00000001, g84_fifo_new }, .gr = { 0x00000001, gt200_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, - .pm = gt200_pm_new, + .pm = { 0x00000001, gt200_pm_new }, .sw = nv50_sw_new, .vp = { 0x00000001, g84_vp_new }, }; @@ -1168,7 +1168,7 @@ nva3_chipset = { .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = { 0x00000001, gt215_msppp_new }, .msvld = { 0x00000001, gt215_msvld_new }, - .pm = gt215_pm_new, + .pm = { 0x00000001, gt215_pm_new }, .sw = nv50_sw_new, }; @@ -1201,7 +1201,7 @@ nva5_chipset = { .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = { 0x00000001, gt215_msppp_new }, .msvld = { 0x00000001, gt215_msvld_new }, - .pm = gt215_pm_new, + .pm = { 0x00000001, gt215_pm_new }, .sw = nv50_sw_new, }; @@ -1234,7 +1234,7 @@ nva8_chipset = { .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = { 0x00000001, gt215_msppp_new }, .msvld = { 0x00000001, gt215_msvld_new }, - .pm = gt215_pm_new, + .pm = { 0x00000001, gt215_pm_new }, .sw = nv50_sw_new, }; @@ -1265,7 +1265,7 @@ nvaa_chipset = { .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = { 0x00000001, g98_msppp_new }, .msvld = { 0x00000001, g98_msvld_new }, - .pm = g84_pm_new, + .pm = { 0x00000001, g84_pm_new }, .sec = g98_sec_new, .sw = nv50_sw_new, }; @@ -1297,7 +1297,7 @@ nvac_chipset = { .mspdec = { 0x00000001, g98_mspdec_new }, .msppp = { 0x00000001, g98_msppp_new }, .msvld = { 0x00000001, g98_msvld_new }, - .pm = g84_pm_new, + .pm = { 0x00000001, g84_pm_new }, .sec = g98_sec_new, .sw = nv50_sw_new, }; @@ -1331,7 +1331,7 @@ nvaf_chipset = { .mspdec = { 0x00000001, gt215_mspdec_new }, .msppp = { 0x00000001, gt215_msppp_new }, .msvld = { 0x00000001, mcp89_msvld_new }, - .pm = gt215_pm_new, + .pm = { 0x00000001, gt215_pm_new }, .sw = nv50_sw_new, }; @@ -1367,7 +1367,7 @@ nvc0_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf100_pm_new, + .pm = { 0x00000001, gf100_pm_new }, .sw = gf100_sw_new, }; @@ -1403,7 +1403,7 @@ nvc1_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf108_pm_new, + .pm = { 0x00000001, gf108_pm_new }, .sw = gf100_sw_new, }; @@ -1439,7 +1439,7 @@ nvc3_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf100_pm_new, + .pm = { 0x00000001, gf100_pm_new }, .sw = gf100_sw_new, }; @@ -1475,7 +1475,7 @@ nvc4_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf100_pm_new, + .pm = { 0x00000001, gf100_pm_new }, .sw = gf100_sw_new, }; @@ -1511,7 +1511,7 @@ nvc8_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf100_pm_new, + .pm = { 0x00000001, gf100_pm_new }, .sw = gf100_sw_new, }; @@ -1547,7 +1547,7 @@ nvce_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf100_pm_new, + .pm = { 0x00000001, gf100_pm_new }, .sw = gf100_sw_new, }; @@ -1583,7 +1583,7 @@ nvcf_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf100_pm_new, + .pm = { 0x00000001, gf100_pm_new }, .sw = gf100_sw_new, }; @@ -1618,7 +1618,7 @@ nvd7_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf117_pm_new, + .pm = { 0x00000001, gf117_pm_new }, .sw = gf100_sw_new, }; @@ -1654,7 +1654,7 @@ nvd9_chipset = { .mspdec = { 0x00000001, gf100_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, - .pm = gf117_pm_new, + .pm = { 0x00000001, gf117_pm_new }, .sw = gf100_sw_new, }; @@ -1691,7 +1691,7 @@ nve4_chipset = { .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, - .pm = gk104_pm_new, + .pm = { 0x00000001, gk104_pm_new }, .sw = gf100_sw_new, }; @@ -1728,7 +1728,7 @@ nve6_chipset = { .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, - .pm = gk104_pm_new, + .pm = { 0x00000001, gk104_pm_new }, .sw = gf100_sw_new, }; @@ -1765,7 +1765,7 @@ nve7_chipset = { .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, - .pm = gk104_pm_new, + .pm = { 0x00000001, gk104_pm_new }, .sw = gf100_sw_new, }; @@ -1790,7 +1790,7 @@ nvea_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gk20a_fifo_new }, .gr = { 0x00000001, gk20a_gr_new }, - .pm = gk104_pm_new, + .pm = { 0x00000001, gk104_pm_new }, .sw = gf100_sw_new, }; @@ -3162,7 +3162,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_PM , pm); _(NVKM_ENGINE_SEC , sec); _(NVKM_ENGINE_SEC2 , sec2); _(NVKM_ENGINE_SW , sw); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c index f875fb74f131..8fe0444f761e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c @@ -858,11 +858,11 @@ nvkm_pm = { int nvkm_pm_ctor(const struct nvkm_pm_func *func, struct nvkm_device *device, - int index, struct nvkm_pm *pm) + enum nvkm_subdev_type type, int inst, struct nvkm_pm *pm) { pm->func = func; INIT_LIST_HEAD(&pm->domains); INIT_LIST_HEAD(&pm->sources); spin_lock_init(&pm->client.lock); - return nvkm_engine_ctor(&nvkm_pm, device, index, true, &pm->engine); + return nvkm_engine_ctor(&nvkm_pm, device, type, inst, true, &pm->engine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/g84.c index 6e441ddafd86..0086d00eb162 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/g84.c @@ -159,7 +159,7 @@ g84_pm[] = { }; int -g84_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +g84_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return nv40_pm_new_(g84_pm, device, index, ppm); + return nv40_pm_new_(g84_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf100.c index fe2532ee4145..8e02701def8e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf100.c @@ -187,7 +187,7 @@ gf100_pm_ = { int gf100_pm_new_(const struct gf100_pm_func *func, struct nvkm_device *device, - int index, struct nvkm_pm **ppm) + enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { struct nvkm_pm *pm; u32 mask; @@ -196,7 +196,7 @@ gf100_pm_new_(const struct gf100_pm_func *func, struct nvkm_device *device, if (!(pm = *ppm = kzalloc(sizeof(*pm), GFP_KERNEL))) return -ENOMEM; - ret = nvkm_pm_ctor(&gf100_pm_, device, index, pm); + ret = nvkm_pm_ctor(&gf100_pm_, device, type, inst, pm); if (ret) return ret; @@ -237,7 +237,7 @@ gf100_pm = { }; int -gf100_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +gf100_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return gf100_pm_new_(&gf100_pm, device, index, ppm); + return gf100_pm_new_(&gf100_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf100.h b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf100.h index 461bb219b1c0..bc4b014c4e8e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf100.h @@ -9,8 +9,8 @@ struct gf100_pm_func { const struct nvkm_specdom *doms_part; }; -int gf100_pm_new_(const struct gf100_pm_func *, struct nvkm_device *, - int index, struct nvkm_pm **); +int gf100_pm_new_(const struct gf100_pm_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_pm **); extern const struct nvkm_funcdom gf100_perfctr_func; extern const struct nvkm_specdom gf100_pm_gpc[]; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf108.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf108.c index 49b24c98a7f7..505565866b59 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf108.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf108.c @@ -60,7 +60,7 @@ gf108_pm = { }; int -gf108_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +gf108_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return gf100_pm_new_(&gf108_pm, device, index, ppm); + return gf100_pm_new_(&gf108_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf117.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf117.c index 9170025fc988..c61e8c010bb3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf117.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gf117.c @@ -74,7 +74,7 @@ gf117_pm = { }; int -gf117_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +gf117_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return gf100_pm_new_(&gf117_pm, device, index, ppm); + return gf100_pm_new_(&gf117_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gk104.c index 07f946d26ac6..75bf3df1cb18 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gk104.c @@ -178,7 +178,7 @@ gk104_pm = { }; int -gk104_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +gk104_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return gf100_pm_new_(&gk104_pm, device, index, ppm); + return gf100_pm_new_(&gk104_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gt200.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gt200.c index 5cf5dd536fd0..25874c541486 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gt200.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gt200.c @@ -151,7 +151,7 @@ gt200_pm[] = { }; int -gt200_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +gt200_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return nv40_pm_new_(gt200_pm, device, index, ppm); + return nv40_pm_new_(gt200_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gt215.c index c9227ad41b04..54c23e2b6645 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/gt215.c @@ -132,7 +132,7 @@ gt215_pm[] = { }; int -gt215_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +gt215_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return nv40_pm_new_(gt215_pm, device, index, ppm); + return nv40_pm_new_(gt215_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c index 3fda594700e0..eba5b3b79340 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.c @@ -80,7 +80,7 @@ nv40_pm_ = { int nv40_pm_new_(const struct nvkm_specdom *doms, struct nvkm_device *device, - int index, struct nvkm_pm **ppm) + enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { struct nv40_pm *pm; int ret; @@ -89,7 +89,7 @@ nv40_pm_new_(const struct nvkm_specdom *doms, struct nvkm_device *device, return -ENOMEM; *ppm = &pm->base; - ret = nvkm_pm_ctor(&nv40_pm_, device, index, &pm->base); + ret = nvkm_pm_ctor(&nv40_pm_, device, type, inst, &pm->base); if (ret) return ret; @@ -117,7 +117,7 @@ nv40_pm[] = { }; int -nv40_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +nv40_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return nv40_pm_new_(nv40_pm, device, index, ppm); + return nv40_pm_new_(nv40_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.h b/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.h index 8ed19320fda1..afb79843723d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.h @@ -9,7 +9,7 @@ struct nv40_pm { u32 sequence; }; -int nv40_pm_new_(const struct nvkm_specdom *, struct nvkm_device *, - int index, struct nvkm_pm **); +int nv40_pm_new_(const struct nvkm_specdom *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_pm **); extern const struct nvkm_funcdom nv40_perfctr_func; #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv50.c index cc5a41d4c6f2..bbd3404901f9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/nv50.c @@ -169,7 +169,7 @@ nv50_pm[] = { }; int -nv50_pm_new(struct nvkm_device *device, int index, struct nvkm_pm **ppm) +nv50_pm_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_pm **ppm) { - return nv40_pm_new_(nv50_pm, device, index, ppm); + return nv40_pm_new_(nv50_pm, device, type, inst, ppm); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h index cd6f8f79b235..6ae25d3e7f45 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h @@ -4,8 +4,8 @@ #define nvkm_pm(p) container_of((p), struct nvkm_pm, engine) #include -int nvkm_pm_ctor(const struct nvkm_pm_func *, struct nvkm_device *, - int index, struct nvkm_pm *); +int nvkm_pm_ctor(const struct nvkm_pm_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_pm *); struct nvkm_pm_func { void (*fini)(struct nvkm_pm *); From 400c2a456ce4b89fd286f009dfad0429020ee834 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 08:40:52 +1000 Subject: [PATCH 79/87] drm/nouveau/sec: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 2 -- drivers/gpu/drm/nouveau/include/nvkm/core/layout.h | 1 + drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h | 6 +----- drivers/gpu/drm/nouveau/include/nvkm/engine/sec.h | 2 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 7 +++---- drivers/gpu/drm/nouveau/nvkm/engine/falcon.c | 4 ++-- drivers/gpu/drm/nouveau/nvkm/engine/sec/g98.c | 5 ++--- drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c | 2 +- 9 files changed, 11 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index edb74df50575..e8fd1ccf2381 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *sec; struct nvkm_sec2 *sec2; struct nvkm_sw *sw; struct nvkm_engine *vic; @@ -105,7 +104,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*sec )(struct nvkm_device *, int idx, struct nvkm_engine **); int (*sec2 )(struct nvkm_device *, int idx, struct nvkm_sec2 **); int (*sw )(struct nvkm_device *, int idx, struct nvkm_sw **); int (*vic )(struct nvkm_device *, int idx, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 9d82580851f3..13a3a2087f69 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -42,4 +42,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSVLD , struct nvkm_engine , msvld) NVKM_LAYOUT_INST(NVKM_ENGINE_NVDEC , struct nvkm_nvdec , nvdec, 3) NVKM_LAYOUT_INST(NVKM_ENGINE_NVENC , struct nvkm_nvenc , nvenc, 3) NVKM_LAYOUT_ONCE(NVKM_ENGINE_PM , struct nvkm_pm , pm) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC , struct nvkm_engine , sec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h index 8ab27a45b2c2..306125d17ece 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h @@ -63,12 +63,8 @@ void nvkm_falcon_del(struct nvkm_falcon **); int nvkm_falcon_get(struct nvkm_falcon *, const struct nvkm_subdev *); void nvkm_falcon_put(struct nvkm_falcon *, const struct nvkm_subdev *); -int nvkm_falcon_new__(const struct nvkm_falcon_func *, bool old, struct nvkm_device *, +int nvkm_falcon_new_(const struct nvkm_falcon_func *, struct nvkm_device *, enum nvkm_subdev_type, int inst, bool enable, u32 addr, struct nvkm_engine **); -#define nvkm_falcon_new__o(f,d,i, e,a,s) nvkm_falcon_new__((f), true, (d), (i), -1 , (e), (a), (s)) -#define nvkm_falcon_new__n(f,d,t,i,e,a,s) nvkm_falcon_new__((f), false, (d), (t), (i), (e), (a), (s)) -#define nvkm_falcon_new___(_1,_2,_3,_4,_5,_6,_7,IMPL,...) IMPL -#define nvkm_falcon_new_(A...) nvkm_falcon_new___(A, nvkm_falcon_new__n, nvkm_falcon_new__o)(A) struct nvkm_falcon_func { struct { diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/sec.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/sec.h index f14e98a8a0ca..37ed7ab8d050 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/sec.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/sec.h @@ -2,5 +2,5 @@ #ifndef __NVKM_SEC_H__ #define __NVKM_SEC_H__ #include -int g98_sec_new(struct nvkm_device *, int, struct nvkm_engine **); +int g98_sec_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_engine **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 5b49a6b56bd6..4c14f53e722f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_SEC ] = "sec", [NVKM_ENGINE_SEC2 ] = "sec2", [NVKM_ENGINE_SW ] = "sw", [NVKM_ENGINE_VIC ] = "vic", diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index a148176de12a..18db3d25612a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1102,7 +1102,7 @@ nv98_chipset = { .msppp = { 0x00000001, g98_msppp_new }, .msvld = { 0x00000001, g98_msvld_new }, .pm = { 0x00000001, g84_pm_new }, - .sec = g98_sec_new, + .sec = { 0x00000001, g98_sec_new }, .sw = nv50_sw_new, }; @@ -1266,7 +1266,7 @@ nvaa_chipset = { .msppp = { 0x00000001, g98_msppp_new }, .msvld = { 0x00000001, g98_msvld_new }, .pm = { 0x00000001, g84_pm_new }, - .sec = g98_sec_new, + .sec = { 0x00000001, g98_sec_new }, .sw = nv50_sw_new, }; @@ -1298,7 +1298,7 @@ nvac_chipset = { .msppp = { 0x00000001, g98_msppp_new }, .msvld = { 0x00000001, g98_msvld_new }, .pm = { 0x00000001, g84_pm_new }, - .sec = g98_sec_new, + .sec = { 0x00000001, g98_sec_new }, .sw = nv50_sw_new, }; @@ -3162,7 +3162,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_SEC , sec); _(NVKM_ENGINE_SEC2 , sec2); _(NVKM_ENGINE_SW , sw); _(NVKM_ENGINE_VIC , vic); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c index e5a585ce0b87..43b7dec45179 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/falcon.c @@ -335,7 +335,7 @@ nvkm_falcon = { }; int -nvkm_falcon_new__(const struct nvkm_falcon_func *func, bool old, struct nvkm_device *device, +nvkm_falcon_new_(const struct nvkm_falcon_func *func, struct nvkm_device *device, enum nvkm_subdev_type type, int inst, bool enable, u32 addr, struct nvkm_engine **pengine) { @@ -351,5 +351,5 @@ nvkm_falcon_new__(const struct nvkm_falcon_func *func, bool old, struct nvkm_dev falcon->data.size = func->data.size; *pengine = &falcon->engine; - return nvkm_engine_ctor_(&nvkm_falcon, old, device, type, inst, enable, &falcon->engine); + return nvkm_engine_ctor(&nvkm_falcon, device, type, inst, enable, &falcon->engine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec/g98.c b/drivers/gpu/drm/nouveau/nvkm/engine/sec/g98.c index 6d2a7f0afbb5..1b87df03c823 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sec/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec/g98.c @@ -74,9 +74,8 @@ g98_sec = { }; int -g98_sec_new(struct nvkm_device *device, int index, +g98_sec_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_engine **pengine) { - return nvkm_falcon_new_(&g98_sec, device, index, - true, 0x087000, pengine); + return nvkm_falcon_new_(&g98_sec, device, type, inst, true, 0x087000, pengine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c index f4267429f59d..05729ca19e9a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.c @@ -45,7 +45,7 @@ g98_devinit_disable(struct nvkm_devinit *init) if (!(r00154c & 0x00000020)) nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0); if (!(r00154c & 0x00000040)) - disable |= (1ULL << NVKM_ENGINE_SEC); + nvkm_subdev_disable(device, NVKM_ENGINE_SEC, 0); return disable; } From d1866250a22278859e1ec952ff62d2044ee37533 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 16:11:29 +1000 Subject: [PATCH 80/87] drm/nouveau/sec2: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 -- .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/engine/sec2.h | 6 ++--- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 23 +++++++++---------- .../gpu/drm/nouveau/nvkm/engine/sec2/base.c | 4 ++-- .../gpu/drm/nouveau/nvkm/engine/sec2/gp102.c | 5 ++-- .../gpu/drm/nouveau/nvkm/engine/sec2/gp108.c | 5 ++-- .../gpu/drm/nouveau/nvkm/engine/sec2/priv.h | 2 +- .../gpu/drm/nouveau/nvkm/engine/sec2/tu102.c | 5 ++-- 10 files changed, 27 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index e8fd1ccf2381..9e42463eef45 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_sec2 *sec2; struct nvkm_sw *sw; struct nvkm_engine *vic; @@ -104,7 +103,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*sec2 )(struct nvkm_device *, int idx, struct nvkm_sec2 **); int (*sw )(struct nvkm_device *, int idx, struct nvkm_sw **); int (*vic )(struct nvkm_device *, int idx, struct nvkm_engine **); }; diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 13a3a2087f69..1c543734a490 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -43,4 +43,5 @@ NVKM_LAYOUT_INST(NVKM_ENGINE_NVDEC , struct nvkm_nvdec , nvdec, 3) NVKM_LAYOUT_INST(NVKM_ENGINE_NVENC , struct nvkm_nvenc , nvenc, 3) NVKM_LAYOUT_ONCE(NVKM_ENGINE_PM , struct nvkm_pm , pm) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC , struct nvkm_engine , sec) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC2 , struct nvkm_sec2 , sec2) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/sec2.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/sec2.h index 34dc765648d5..06264c840eae 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/sec2.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/sec2.h @@ -18,7 +18,7 @@ struct nvkm_sec2 { bool initmsg_received; }; -int gp102_sec2_new(struct nvkm_device *, int, struct nvkm_sec2 **); -int gp108_sec2_new(struct nvkm_device *, int, struct nvkm_sec2 **); -int tu102_sec2_new(struct nvkm_device *, int, struct nvkm_sec2 **); +int gp102_sec2_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_sec2 **); +int gp108_sec2_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_sec2 **); +int tu102_sec2_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_sec2 **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index 4c14f53e722f..aa6a93ba32dd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_SEC2 ] = "sec2", [NVKM_ENGINE_SW ] = "sw", [NVKM_ENGINE_VIC ] = "vic", }; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 18db3d25612a..d5b5f9eb5082 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2199,7 +2199,7 @@ nv132_chipset = { .gr = { 0x00000001, gp102_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000003, gm107_nvenc_new }, - .sec2 = gp102_sec2_new, + .sec2 = { 0x00000001, gp102_sec2_new }, .sw = gf100_sw_new, }; @@ -2233,7 +2233,7 @@ nv134_chipset = { .gr = { 0x00000001, gp104_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000003, gm107_nvenc_new }, - .sec2 = gp102_sec2_new, + .sec2 = { 0x00000001, gp102_sec2_new }, .sw = gf100_sw_new, }; @@ -2267,7 +2267,7 @@ nv136_chipset = { .gr = { 0x00000001, gp104_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, - .sec2 = gp102_sec2_new, + .sec2 = { 0x00000001, gp102_sec2_new }, .sw = gf100_sw_new, }; @@ -2301,7 +2301,7 @@ nv137_chipset = { .gr = { 0x00000001, gp107_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000003, gm107_nvenc_new }, - .sec2 = gp102_sec2_new, + .sec2 = { 0x00000001, gp102_sec2_new }, .sw = gf100_sw_new, }; @@ -2334,7 +2334,7 @@ nv138_chipset = { .fifo = { 0x00000001, gp100_fifo_new }, .gr = { 0x00000001, gp108_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, - .sec2 = gp108_sec2_new, + .sec2 = { 0x00000001, gp108_sec2_new }, .sw = gf100_sw_new, }; @@ -2393,7 +2393,7 @@ nv140_chipset = { .gr = { 0x00000001, gv100_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000007, gm107_nvenc_new }, - .sec2 = gp108_sec2_new, + .sec2 = { 0x00000001, gp108_sec2_new }, }; static const struct nvkm_device_chip @@ -2427,7 +2427,7 @@ nv162_chipset = { .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, - .sec2 = tu102_sec2_new, + .sec2 = { 0x00000001, tu102_sec2_new }, }; static const struct nvkm_device_chip @@ -2461,7 +2461,7 @@ nv164_chipset = { .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000003, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, - .sec2 = tu102_sec2_new, + .sec2 = { 0x00000001, tu102_sec2_new }, }; static const struct nvkm_device_chip @@ -2495,7 +2495,7 @@ nv166_chipset = { .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000007, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, - .sec2 = tu102_sec2_new, + .sec2 = { 0x00000001, tu102_sec2_new }, }; static const struct nvkm_device_chip @@ -2529,7 +2529,7 @@ nv167_chipset = { .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, - .sec2 = tu102_sec2_new, + .sec2 = { 0x00000001, tu102_sec2_new }, }; static const struct nvkm_device_chip @@ -2563,7 +2563,7 @@ nv168_chipset = { .gr = { 0x00000001, tu102_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, - .sec2 = tu102_sec2_new, + .sec2 = { 0x00000001, tu102_sec2_new }, }; static const struct nvkm_device_chip @@ -3162,7 +3162,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_SEC2 , sec2); _(NVKM_ENGINE_SW , sw); _(NVKM_ENGINE_VIC , vic); case NVKM_ENGINE_CE1: diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c index 27591b2caf74..092c6d0b8e01 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/base.c @@ -85,7 +85,7 @@ nvkm_sec2 = { int nvkm_sec2_new_(const struct nvkm_sec2_fwif *fwif, struct nvkm_device *device, - int index, u32 addr, struct nvkm_sec2 **psec2) + enum nvkm_subdev_type type, int inst, u32 addr, struct nvkm_sec2 **psec2) { struct nvkm_sec2 *sec2; int ret; @@ -93,7 +93,7 @@ nvkm_sec2_new_(const struct nvkm_sec2_fwif *fwif, struct nvkm_device *device, if (!(sec2 = *psec2 = kzalloc(sizeof(*sec2), GFP_KERNEL))) return -ENOMEM; - ret = nvkm_engine_ctor(&nvkm_sec2, device, index, true, &sec2->engine); + ret = nvkm_engine_ctor(&nvkm_sec2, device, type, inst, true, &sec2->engine); if (ret) return ret; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp102.c b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp102.c index bccf7acb7f98..44e39f5743d5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp102.c @@ -343,7 +343,8 @@ gp102_sec2_fwif[] = { }; int -gp102_sec2_new(struct nvkm_device *device, int index, struct nvkm_sec2 **psec2) +gp102_sec2_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_sec2 **psec2) { - return nvkm_sec2_new_(gp102_sec2_fwif, device, index, 0, psec2); + return nvkm_sec2_new_(gp102_sec2_fwif, device, type, inst, 0, psec2); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c index e770c9497871..3e9f5c842f3c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp108.c @@ -36,7 +36,8 @@ gp108_sec2_fwif[] = { }; int -gp108_sec2_new(struct nvkm_device *device, int index, struct nvkm_sec2 **psec2) +gp108_sec2_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_sec2 **psec2) { - return nvkm_sec2_new_(gp108_sec2_fwif, device, index, 0, psec2); + return nvkm_sec2_new_(gp108_sec2_fwif, device, type, inst, 0, psec2); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/priv.h index 8cbc0b7d0a27..af19229e885d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/priv.h @@ -25,6 +25,6 @@ int gp102_sec2_load(struct nvkm_sec2 *, int, const struct nvkm_sec2_fwif *); extern const struct nvkm_sec2_func gp102_sec2; extern const struct nvkm_acr_lsf_func gp102_sec2_acr_1; -int nvkm_sec2_new_(const struct nvkm_sec2_fwif *, struct nvkm_device *, +int nvkm_sec2_new_(const struct nvkm_sec2_fwif *, struct nvkm_device *, enum nvkm_subdev_type, int, u32 addr, struct nvkm_sec2 **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c index a231c1c6c0a5..f3faeb705575 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c @@ -72,10 +72,11 @@ tu102_sec2_fwif[] = { }; int -tu102_sec2_new(struct nvkm_device *device, int index, struct nvkm_sec2 **psec2) +tu102_sec2_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_sec2 **psec2) { /* TOP info wasn't updated on Turing to reflect the PRI * address change for some reason. We override it here. */ - return nvkm_sec2_new_(tu102_sec2_fwif, device, index, 0x840000, psec2); + return nvkm_sec2_new_(tu102_sec2_fwif, device, type, inst, 0x840000, psec2); } From 8d6461d832df2544664eb0979cc849318e78cd0e Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 4 Dec 2020 16:13:27 +1000 Subject: [PATCH 81/87] drm/nouveau/sw: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 2 - .../drm/nouveau/include/nvkm/core/engine.h | 6 +- .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/core/subdev.h | 8 +- .../gpu/drm/nouveau/include/nvkm/engine/sw.h | 8 +- drivers/gpu/drm/nouveau/nvkm/core/engine.c | 6 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 6 +- .../gpu/drm/nouveau/nvkm/engine/device/base.c | 155 +++++++++--------- drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c | 4 +- .../gpu/drm/nouveau/nvkm/engine/sw/gf100.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/sw/priv.h | 4 +- 14 files changed, 102 insertions(+), 114 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index 9e42463eef45..a7fee7a22d73 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -60,7 +60,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_sw *sw; struct nvkm_engine *vic; #define NVKM_LAYOUT_ONCE(type,data,ptr) data *ptr; @@ -103,7 +102,6 @@ struct nvkm_device_chip { #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - int (*sw )(struct nvkm_device *, int idx, struct nvkm_sw **); int (*vic )(struct nvkm_device *, int idx, struct nvkm_engine **); }; diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h index c1bd0e075075..e58923b67d74 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/engine.h @@ -47,12 +47,8 @@ struct nvkm_engine_func { struct nvkm_sclass sclass[]; }; -int nvkm_engine_ctor_(const struct nvkm_engine_func *, bool old, struct nvkm_device *, +int nvkm_engine_ctor(const struct nvkm_engine_func *, struct nvkm_device *, enum nvkm_subdev_type, int inst, bool enable, struct nvkm_engine *); -#define nvkm_engine_ctor_o(f,d,i, e,s) nvkm_engine_ctor_((f), true, (d), (i), -1 , (e), (s)) -#define nvkm_engine_ctor_n(f,d,t,i,e,s) nvkm_engine_ctor_((f), false, (d), (t), (i), (e), (s)) -#define nvkm_engine_ctor__(_1,_2,_3,_4,_5,_6,IMPL,...) IMPL -#define nvkm_engine_ctor(A...) nvkm_engine_ctor__(A, nvkm_engine_ctor_n, nvkm_engine_ctor_o)(A) int nvkm_engine_new_(const struct nvkm_engine_func *, struct nvkm_device *, enum nvkm_subdev_type, int, bool enable, struct nvkm_engine **); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 1c543734a490..d365b1a386c2 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -44,4 +44,5 @@ NVKM_LAYOUT_INST(NVKM_ENGINE_NVENC , struct nvkm_nvenc , nvenc, 3) NVKM_LAYOUT_ONCE(NVKM_ENGINE_PM , struct nvkm_pm , pm) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC , struct nvkm_engine , sec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC2 , struct nvkm_sec2 , sec2) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_SW , struct nvkm_sw , sw) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index efde81b9b046..34146e5759e3 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -106,12 +106,8 @@ struct nvkm_subdev_func { extern const char *nvkm_subdev_type[NVKM_SUBDEV_NR]; int nvkm_subdev_new_(const struct nvkm_subdev_func *, struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); -void nvkm_subdev_ctor_(const struct nvkm_subdev_func *, bool old, struct nvkm_device *, - enum nvkm_subdev_type, int inst, struct nvkm_subdev *); -#define nvkm_subdev_ctor_o(f,d,i, s) nvkm_subdev_ctor_((f), true, (d), (i), -1 , (s)) -#define nvkm_subdev_ctor_n(f,d,t,i,s) nvkm_subdev_ctor_((f), false, (d), (t), (i), (s)) -#define nvkm_subdev_ctor__(_1,_2,_3,_4,_5,IMPL,...) IMPL -#define nvkm_subdev_ctor(A...) nvkm_subdev_ctor__(A, nvkm_subdev_ctor_n, nvkm_subdev_ctor_o)(A) +void nvkm_subdev_ctor(const struct nvkm_subdev_func *, struct nvkm_device *, + enum nvkm_subdev_type, int inst, struct nvkm_subdev *); void nvkm_subdev_disable(struct nvkm_device *, enum nvkm_subdev_type, int inst); void nvkm_subdev_del(struct nvkm_subdev **); int nvkm_subdev_preinit(struct nvkm_subdev *); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/sw.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/sw.h index 2e91769e3ee2..b1a53ffbfdef 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/sw.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/sw.h @@ -12,8 +12,8 @@ struct nvkm_sw { bool nvkm_sw_mthd(struct nvkm_sw *sw, int chid, int subc, u32 mthd, u32 data); -int nv04_sw_new(struct nvkm_device *, int, struct nvkm_sw **); -int nv10_sw_new(struct nvkm_device *, int, struct nvkm_sw **); -int nv50_sw_new(struct nvkm_device *, int, struct nvkm_sw **); -int gf100_sw_new(struct nvkm_device *, int, struct nvkm_sw **); +int nv04_sw_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_sw **); +int nv10_sw_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_sw **); +int nv50_sw_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_sw **); +int gf100_sw_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_sw **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c index bb5440b0a602..e41a39ae1597 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c @@ -176,10 +176,10 @@ nvkm_engine = { }; int -nvkm_engine_ctor_(const struct nvkm_engine_func *func, bool old, struct nvkm_device *device, - enum nvkm_subdev_type type, int inst, bool enable, struct nvkm_engine *engine) +nvkm_engine_ctor(const struct nvkm_engine_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, bool enable, struct nvkm_engine *engine) { - nvkm_subdev_ctor_(&nvkm_engine, old, device, type, inst, &engine->subdev); + nvkm_subdev_ctor(&nvkm_engine, device, type, inst, &engine->subdev); engine->func = func; refcount_set(&engine->use.refcount, 0); mutex_init(&engine->use.mutex); diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index aa6a93ba32dd..e97dbc26dc15 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_SW ] = "sw", [NVKM_ENGINE_VIC ] = "vic", }; @@ -169,9 +168,8 @@ nvkm_subdev_disable(struct nvkm_device *device, enum nvkm_subdev_type type, int } void -nvkm_subdev_ctor_(const struct nvkm_subdev_func *func, bool old, - struct nvkm_device *device, enum nvkm_subdev_type type, int inst, - struct nvkm_subdev *subdev) +nvkm_subdev_ctor(const struct nvkm_subdev_func *func, struct nvkm_device *device, + enum nvkm_subdev_type type, int inst, struct nvkm_subdev *subdev) { subdev->func = func; subdev->device = device; diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index d5b5f9eb5082..c994b9547a49 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -92,7 +92,7 @@ nv4_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv04_fifo_new }, .gr = { 0x00000001, nv04_gr_new }, - .sw = nv04_sw_new, + .sw = { 0x00000001, nv04_sw_new }, }; static const struct nvkm_device_chip @@ -113,7 +113,7 @@ nv5_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv04_fifo_new }, .gr = { 0x00000001, nv04_gr_new }, - .sw = nv04_sw_new, + .sw = { 0x00000001, nv04_sw_new }, }; static const struct nvkm_device_chip @@ -155,7 +155,7 @@ nv11_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv10_fifo_new }, .gr = { 0x00000001, nv15_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -177,7 +177,7 @@ nv15_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv10_fifo_new }, .gr = { 0x00000001, nv15_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -199,7 +199,7 @@ nv17_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv17_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -221,7 +221,7 @@ nv18_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv17_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -243,7 +243,7 @@ nv1a_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv10_fifo_new }, .gr = { 0x00000001, nv15_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -265,7 +265,7 @@ nv1f_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv17_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -287,7 +287,7 @@ nv20_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv20_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -309,7 +309,7 @@ nv25_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv25_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -331,7 +331,7 @@ nv28_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv25_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -353,7 +353,7 @@ nv2a_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv2a_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -375,7 +375,7 @@ nv30_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv30_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -398,7 +398,7 @@ nv31_chipset = { .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv30_gr_new }, .mpeg = { 0x00000001, nv31_mpeg_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -421,7 +421,7 @@ nv34_chipset = { .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv34_gr_new }, .mpeg = { 0x00000001, nv31_mpeg_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -443,7 +443,7 @@ nv35_chipset = { .dma = { 0x00000001, nv04_dma_new }, .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv35_gr_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -466,7 +466,7 @@ nv36_chipset = { .fifo = { 0x00000001, nv17_fifo_new }, .gr = { 0x00000001, nv35_gr_new }, .mpeg = { 0x00000001, nv31_mpeg_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -492,7 +492,7 @@ nv40_chipset = { .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv40_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -518,7 +518,7 @@ nv41_chipset = { .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv40_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -544,7 +544,7 @@ nv42_chipset = { .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv40_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -570,7 +570,7 @@ nv43_chipset = { .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv40_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -596,7 +596,7 @@ nv44_chipset = { .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -622,7 +622,7 @@ nv45_chipset = { .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -648,7 +648,7 @@ nv46_chipset = { .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -674,7 +674,7 @@ nv47_chipset = { .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -700,7 +700,7 @@ nv49_chipset = { .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -726,7 +726,7 @@ nv4a_chipset = { .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -752,7 +752,7 @@ nv4b_chipset = { .gr = { 0x00000001, nv40_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -778,7 +778,7 @@ nv4c_chipset = { .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -804,7 +804,7 @@ nv4e_chipset = { .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -833,7 +833,7 @@ nv50_chipset = { .gr = { 0x00000001, nv50_gr_new }, .mpeg = { 0x00000001, nv50_mpeg_new }, .pm = { 0x00000001, nv50_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, }; static const struct nvkm_device_chip @@ -859,7 +859,7 @@ nv63_chipset = { .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -885,7 +885,7 @@ nv67_chipset = { .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -911,7 +911,7 @@ nv68_chipset = { .gr = { 0x00000001, nv44_gr_new }, .mpeg = { 0x00000001, nv44_mpeg_new }, .pm = { 0x00000001, nv40_pm_new }, - .sw = nv10_sw_new, + .sw = { 0x00000001, nv10_sw_new }, }; static const struct nvkm_device_chip @@ -942,7 +942,7 @@ nv84_chipset = { .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, .pm = { 0x00000001, g84_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, .vp = { 0x00000001, g84_vp_new }, }; @@ -974,7 +974,7 @@ nv86_chipset = { .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, .pm = { 0x00000001, g84_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, .vp = { 0x00000001, g84_vp_new }, }; @@ -1006,7 +1006,7 @@ nv92_chipset = { .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, .pm = { 0x00000001, g84_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, .vp = { 0x00000001, g84_vp_new }, }; @@ -1038,7 +1038,7 @@ nv94_chipset = { .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, .pm = { 0x00000001, g84_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, .vp = { 0x00000001, g84_vp_new }, }; @@ -1070,7 +1070,7 @@ nv96_chipset = { .gr = { 0x00000001, g84_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, .pm = { 0x00000001, g84_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, .vp = { 0x00000001, g84_vp_new }, }; @@ -1103,7 +1103,7 @@ nv98_chipset = { .msvld = { 0x00000001, g98_msvld_new }, .pm = { 0x00000001, g84_pm_new }, .sec = { 0x00000001, g98_sec_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, }; static const struct nvkm_device_chip @@ -1134,7 +1134,7 @@ nva0_chipset = { .gr = { 0x00000001, gt200_gr_new }, .mpeg = { 0x00000001, g84_mpeg_new }, .pm = { 0x00000001, gt200_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, .vp = { 0x00000001, g84_vp_new }, }; @@ -1169,7 +1169,7 @@ nva3_chipset = { .msppp = { 0x00000001, gt215_msppp_new }, .msvld = { 0x00000001, gt215_msvld_new }, .pm = { 0x00000001, gt215_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, }; static const struct nvkm_device_chip @@ -1202,7 +1202,7 @@ nva5_chipset = { .msppp = { 0x00000001, gt215_msppp_new }, .msvld = { 0x00000001, gt215_msvld_new }, .pm = { 0x00000001, gt215_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, }; static const struct nvkm_device_chip @@ -1235,7 +1235,7 @@ nva8_chipset = { .msppp = { 0x00000001, gt215_msppp_new }, .msvld = { 0x00000001, gt215_msvld_new }, .pm = { 0x00000001, gt215_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, }; static const struct nvkm_device_chip @@ -1267,7 +1267,7 @@ nvaa_chipset = { .msvld = { 0x00000001, g98_msvld_new }, .pm = { 0x00000001, g84_pm_new }, .sec = { 0x00000001, g98_sec_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, }; static const struct nvkm_device_chip @@ -1299,7 +1299,7 @@ nvac_chipset = { .msvld = { 0x00000001, g98_msvld_new }, .pm = { 0x00000001, g84_pm_new }, .sec = { 0x00000001, g98_sec_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, }; static const struct nvkm_device_chip @@ -1332,7 +1332,7 @@ nvaf_chipset = { .msppp = { 0x00000001, gt215_msppp_new }, .msvld = { 0x00000001, mcp89_msvld_new }, .pm = { 0x00000001, gt215_pm_new }, - .sw = nv50_sw_new, + .sw = { 0x00000001, nv50_sw_new }, }; static const struct nvkm_device_chip @@ -1368,7 +1368,7 @@ nvc0_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf100_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1404,7 +1404,7 @@ nvc1_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf108_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1440,7 +1440,7 @@ nvc3_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf100_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1476,7 +1476,7 @@ nvc4_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf100_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1512,7 +1512,7 @@ nvc8_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf100_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1548,7 +1548,7 @@ nvce_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf100_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1584,7 +1584,7 @@ nvcf_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf100_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1619,7 +1619,7 @@ nvd7_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf117_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1655,7 +1655,7 @@ nvd9_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gf100_msvld_new }, .pm = { 0x00000001, gf117_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1692,7 +1692,7 @@ nve4_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, .pm = { 0x00000001, gk104_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1729,7 +1729,7 @@ nve6_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, .pm = { 0x00000001, gk104_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1766,7 +1766,7 @@ nve7_chipset = { .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, .pm = { 0x00000001, gk104_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1791,7 +1791,7 @@ nvea_chipset = { .fifo = { 0x00000001, gk20a_fifo_new }, .gr = { 0x00000001, gk20a_gr_new }, .pm = { 0x00000001, gk104_pm_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1827,7 +1827,7 @@ nvf0_chipset = { .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1863,7 +1863,7 @@ nvf1_chipset = { .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1899,7 +1899,7 @@ nv106_chipset = { .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1935,7 +1935,7 @@ nv108_chipset = { .mspdec = { 0x00000001, gk104_mspdec_new }, .msppp = { 0x00000001, gf100_msppp_new }, .msvld = { 0x00000001, gk104_msvld_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -1970,7 +1970,7 @@ nv117_chipset = { .gr = { 0x00000001, gm107_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2003,7 +2003,7 @@ nv118_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm107_fifo_new }, .gr = { 0x00000001, gm107_gr_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2038,7 +2038,7 @@ nv120_chipset = { .gr = { 0x00000001, gm200_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000003, gm107_nvenc_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2073,7 +2073,7 @@ nv124_chipset = { .gr = { 0x00000001, gm200_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000003, gm107_nvenc_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2108,7 +2108,7 @@ nv126_chipset = { .gr = { 0x00000001, gm200_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2133,7 +2133,7 @@ nv12b_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gm20b_fifo_new }, .gr = { 0x00000001, gm20b_gr_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2166,7 +2166,7 @@ nv130_chipset = { .gr = { 0x00000001, gp100_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000007, gm107_nvenc_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2200,7 +2200,7 @@ nv132_chipset = { .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000003, gm107_nvenc_new }, .sec2 = { 0x00000001, gp102_sec2_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2234,7 +2234,7 @@ nv134_chipset = { .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000003, gm107_nvenc_new }, .sec2 = { 0x00000001, gp102_sec2_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2268,7 +2268,7 @@ nv136_chipset = { .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000001, gm107_nvenc_new }, .sec2 = { 0x00000001, gp102_sec2_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2302,7 +2302,7 @@ nv137_chipset = { .nvdec = { 0x00000001, gm107_nvdec_new }, .nvenc = { 0x00000003, gm107_nvenc_new }, .sec2 = { 0x00000001, gp102_sec2_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2335,7 +2335,7 @@ nv138_chipset = { .gr = { 0x00000001, gp108_gr_new }, .nvdec = { 0x00000001, gm107_nvdec_new }, .sec2 = { 0x00000001, gp108_sec2_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -2359,7 +2359,7 @@ nv13b_chipset = { .dma = { 0x00000001, gf119_dma_new }, .fifo = { 0x00000001, gp10b_fifo_new }, .gr = { 0x00000001, gp10b_gr_new }, - .sw = gf100_sw_new, + .sw = { 0x00000001, gf100_sw_new }, }; static const struct nvkm_device_chip @@ -3162,7 +3162,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_SW , sw); _(NVKM_ENGINE_VIC , vic); case NVKM_ENGINE_CE1: case NVKM_ENGINE_CE2: diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c index 7be3198e11de..14871d0bd746 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/base.c @@ -97,7 +97,7 @@ nvkm_sw = { int nvkm_sw_new_(const struct nvkm_sw_func *func, struct nvkm_device *device, - int index, struct nvkm_sw **psw) + enum nvkm_subdev_type type, int inst, struct nvkm_sw **psw) { struct nvkm_sw *sw; @@ -106,5 +106,5 @@ nvkm_sw_new_(const struct nvkm_sw_func *func, struct nvkm_device *device, INIT_LIST_HEAD(&sw->chan); sw->func = func; - return nvkm_engine_ctor(&nvkm_sw, device, index, true, &sw->engine); + return nvkm_engine_ctor(&nvkm_sw, device, type, inst, true, &sw->engine); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c index ea8f4247b628..55abf839f29d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c @@ -149,7 +149,7 @@ gf100_sw = { }; int -gf100_sw_new(struct nvkm_device *device, int index, struct nvkm_sw **psw) +gf100_sw_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_sw **psw) { - return nvkm_sw_new_(&gf100_sw, device, index, psw); + return nvkm_sw_new_(&gf100_sw, device, type, inst, psw); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c index b6675fe1b0ce..4aa57573869c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c @@ -133,7 +133,7 @@ nv04_sw = { }; int -nv04_sw_new(struct nvkm_device *device, int index, struct nvkm_sw **psw) +nv04_sw_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_sw **psw) { - return nvkm_sw_new_(&nv04_sw, device, index, psw); + return nvkm_sw_new_(&nv04_sw, device, type, inst, psw); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c index 09d22fcd194c..e79e640ae535 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c @@ -62,7 +62,7 @@ nv10_sw = { }; int -nv10_sw_new(struct nvkm_device *device, int index, struct nvkm_sw **psw) +nv10_sw_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_sw **psw) { - return nvkm_sw_new_(&nv10_sw, device, index, psw); + return nvkm_sw_new_(&nv10_sw, device, type, inst, psw); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c index 01573d187f2c..1fdd094c8b7e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c @@ -142,7 +142,7 @@ nv50_sw = { }; int -nv50_sw_new(struct nvkm_device *device, int index, struct nvkm_sw **psw) +nv50_sw_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_sw **psw) { - return nvkm_sw_new_(&nv50_sw, device, index, psw); + return nvkm_sw_new_(&nv50_sw, device, type, inst, psw); } diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/sw/priv.h index 6d18fc6180f2..d9d83b1b8849 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/priv.h @@ -5,8 +5,8 @@ #include struct nvkm_sw_chan; -int nvkm_sw_new_(const struct nvkm_sw_func *, struct nvkm_device *, - int index, struct nvkm_sw **); +int nvkm_sw_new_(const struct nvkm_sw_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_sw **); struct nvkm_sw_chan_sclass { int (*ctor)(struct nvkm_sw_chan *, const struct nvkm_oclass *, From 0fa5680c28e6b848b88c153c9e1c7444298401dc Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Thu, 4 Feb 2021 16:56:07 +1000 Subject: [PATCH 82/87] drm/nouveau/vic: switch to instanced constructor Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/device.h | 5 ---- .../drm/nouveau/include/nvkm/core/layout.h | 1 + .../drm/nouveau/include/nvkm/subdev/devinit.h | 3 +-- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - .../gpu/drm/nouveau/nvkm/engine/device/base.c | 23 +------------------ .../drm/nouveau/nvkm/subdev/devinit/base.c | 4 ++-- .../drm/nouveau/nvkm/subdev/devinit/mcp89.c | 2 +- .../drm/nouveau/nvkm/subdev/devinit/priv.h | 1 + 8 files changed, 7 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index a7fee7a22d73..aa0ac7bf9db0 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -32,7 +32,6 @@ struct nvkm_device { struct nvkm_event event; - u64 disable_mask; u32 debug; const struct nvkm_device_chip *chip; @@ -60,8 +59,6 @@ struct nvkm_device { struct notifier_block nb; } acpi; - struct nvkm_engine *vic; - #define NVKM_LAYOUT_ONCE(type,data,ptr) data *ptr; #define NVKM_LAYOUT_INST(type,data,ptr,cnt) data *ptr[cnt]; #include @@ -101,8 +98,6 @@ struct nvkm_device_chip { #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - - int (*vic )(struct nvkm_device *, int idx, struct nvkm_engine **); }; struct nvkm_device *nvkm_device_find(u64 name); diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index d365b1a386c2..b1b1c4c0bcbe 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -45,4 +45,5 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_PM , struct nvkm_pm , pm) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC , struct nvkm_engine , sec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC2 , struct nvkm_sec2 , sec2) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SW , struct nvkm_sw , sw) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_VIC , struct nvkm_engine , vic) NVKM_LAYOUT_ONCE(NVKM_ENGINE_VP , struct nvkm_engine , vp) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h index d22d7239c272..848b5d9ce705 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/devinit.h @@ -14,8 +14,7 @@ struct nvkm_devinit { u32 nvkm_devinit_mmio(struct nvkm_devinit *, u32 addr); int nvkm_devinit_pll_set(struct nvkm_devinit *, u32 type, u32 khz); void nvkm_devinit_meminit(struct nvkm_devinit *); -u64 nvkm_devinit_disable(struct nvkm_devinit *); -int nvkm_devinit_post(struct nvkm_devinit *, u64 *disable); +int nvkm_devinit_post(struct nvkm_devinit *); int nv04_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); int nv05_devinit_new(struct nvkm_device *, enum nvkm_subdev_type, int, struct nvkm_devinit **); diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index e97dbc26dc15..fab794372c36 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { #include #undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_INST - [NVKM_ENGINE_VIC ] = "vic", }; void diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index c994b9547a49..044894940c15 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2644,9 +2644,6 @@ nvkm_device_subdev(struct nvkm_device *device, int type, int inst) { struct nvkm_subdev *subdev; - if (device->disable_mask & (1ULL << (type + inst))) - return NULL; - list_for_each_entry(subdev, &device->subdev, head) { if (subdev->index == type + inst) return subdev; @@ -2725,7 +2722,7 @@ nvkm_device_preinit(struct nvkm_device *device) goto fail; } - ret = nvkm_devinit_post(device->devinit, &device->disable_mask); + ret = nvkm_devinit_post(device->devinit); if (ret) goto fail; @@ -2790,7 +2787,6 @@ nvkm_device_del(struct nvkm_device **pdevice) struct nvkm_subdev *subdev, *subtmp; if (device) { mutex_lock(&nv_devices_mutex); - device->disable_mask = 0; list_for_each_entry_safe_reverse(subdev, subtmp, &device->subdev, head) nvkm_subdev_del(&subdev); @@ -3104,21 +3100,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, mutex_init(&device->mutex); for (i = 0; i < NVKM_SUBDEV_NR; i++) { -#define _(s,m) case s: \ - if (device->chip->m && (subdev_mask & (1ULL << (s)))) { \ - ret = device->chip->m(device, (s), &device->m); \ - if (ret) { \ - subdev = nvkm_device_subdev(device, (s), 0); \ - nvkm_subdev_del(&subdev); \ - device->m = NULL; \ - if (ret != -ENODEV) { \ - nvdev_error(device, "%s ctor failed, %d\n", \ - nvkm_subdev_type[(s)], ret); \ - goto done; \ - } \ - } \ - } \ - break switch (i) { #define NVKM_LAYOUT_ONCE(type,data,ptr) case type: \ if (device->chip->ptr.inst && (subdev_mask & (BIT_ULL(type)))) { \ @@ -3162,7 +3143,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, #include #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE - _(NVKM_ENGINE_VIC , vic); case NVKM_ENGINE_CE1: case NVKM_ENGINE_CE2: case NVKM_ENGINE_CE3: @@ -3180,7 +3160,6 @@ nvkm_device_ctor(const struct nvkm_device_func *func, WARN_ON(1); continue; } -#undef _ } ret = 0; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c index 1ccccc212d94..dd4981708fe4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.c @@ -56,12 +56,12 @@ nvkm_devinit_disable(struct nvkm_devinit *init) } int -nvkm_devinit_post(struct nvkm_devinit *init, u64 *disable) +nvkm_devinit_post(struct nvkm_devinit *init) { int ret = 0; if (init && init->func->post) ret = init->func->post(init, init->post); - *disable = nvkm_devinit_disable(init); + nvkm_devinit_disable(init); return ret; } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c index 0c92550536cf..fb90d47e1225 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.c @@ -44,7 +44,7 @@ mcp89_devinit_disable(struct nvkm_devinit *init) if (!(r00154c & 0x00000020)) nvkm_subdev_disable(device, NVKM_ENGINE_MSVLD, 0); if (!(r00154c & 0x00000040)) - disable |= (1ULL << NVKM_ENGINE_VIC); + nvkm_subdev_disable(device, NVKM_ENGINE_VIC, 0); if (!(r00154c & 0x00000200)) nvkm_subdev_disable(device, NVKM_ENGINE_CE, 0); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/priv.h index 257ed026b8f5..dd8b038a8cee 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/priv.h @@ -17,6 +17,7 @@ struct nvkm_devinit_func { void nvkm_devinit_ctor(const struct nvkm_devinit_func *, struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_devinit *); +u64 nvkm_devinit_disable(struct nvkm_devinit *); int nv04_devinit_post(struct nvkm_devinit *, bool); int tu102_devinit_post(struct nvkm_devinit *, bool); From be0ed63f9b2b835ffef67c5dd7034c57d8a0b0a7 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sun, 6 Dec 2020 21:07:14 +1000 Subject: [PATCH 83/87] drm/nouveau/nvkm: determine subdev id/order from layout Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/subdev.h | 81 +++---------------- .../gpu/drm/nouveau/nvkm/engine/device/base.c | 32 ++------ 2 files changed, 14 insertions(+), 99 deletions(-) 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: From 5ef25f068c5a4a7bc5c1825b4d4bf70f48173e43 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 8 Feb 2021 11:30:21 +1000 Subject: [PATCH 84/87] drm/nouveau/nvkm: remove nvkm_subdev.index Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 2 -- drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h | 9 ++------- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 1 - drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 2 +- 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h index aa0ac7bf9db0..a18b6cfda07e 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -5,8 +5,6 @@ #include enum nvkm_subdev_type; -#define nvkm_devidx nvkm_subdev_type - enum nvkm_device_type { NVKM_DEVICE_PCI, NVKM_DEVICE_AGP, diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h index 5e9a9cae66ed..1665738948fb 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/subdev.h @@ -4,13 +4,9 @@ #include enum nvkm_subdev_type { -#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) +#define NVKM_LAYOUT_ONCE(t,s,p,...) t, +#define NVKM_LAYOUT_INST NVKM_LAYOUT_ONCE #include -#undef NVKM_LAYOUT_INST_9 -#undef NVKM_LAYOUT_INST_3 #undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_ONCE NVKM_SUBDEV_NR @@ -19,7 +15,6 @@ enum nvkm_subdev_type { struct nvkm_subdev { const struct nvkm_subdev_func *func; struct nvkm_device *device; - enum nvkm_devidx index; enum nvkm_subdev_type type; int inst; char name[16]; diff --git a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c index fab794372c36..a74b7acb6832 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/subdev.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/subdev.c @@ -174,7 +174,6 @@ nvkm_subdev_ctor(const struct nvkm_subdev_func *func, struct nvkm_device *device subdev->device = device; subdev->type = type; subdev->inst = inst < 0 ? 0 : inst; - subdev->index = type + subdev->inst; if (inst >= 0) snprintf(subdev->name, sizeof(subdev->name), "%s%d", nvkm_subdev_type[type], inst); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 5ee675273fe3..35ad59c1aaaa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2645,7 +2645,7 @@ nvkm_device_subdev(struct nvkm_device *device, int type, int inst) struct nvkm_subdev *subdev; list_for_each_entry(subdev, &device->subdev, head) { - if (subdev->index == type + inst) + if (subdev->type == type && subdev->inst == inst) return subdev; } From 26fbb4c8c7c3ee9a4c3b4de555a8587b5a19154e Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sat, 16 Jan 2021 16:17:21 +1000 Subject: [PATCH 85/87] drm/nouveau/privring: rename from ibus Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/layout.h | 2 +- .../drm/nouveau/include/nvkm/subdev/ibus.h | 12 --- .../nouveau/include/nvkm/subdev/privring.h | 12 +++ .../gpu/drm/nouveau/nvkm/engine/device/base.c | 78 +++++++++---------- .../gpu/drm/nouveau/nvkm/engine/device/priv.h | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/Kbuild | 2 +- .../gpu/drm/nouveau/nvkm/subdev/bus/gf100.c | 2 +- .../gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild | 7 -- .../gpu/drm/nouveau/nvkm/subdev/ibus/priv.h | 9 --- .../gpu/drm/nouveau/nvkm/subdev/mc/gf100.c | 2 +- .../gpu/drm/nouveau/nvkm/subdev/mc/gk104.c | 2 +- .../gpu/drm/nouveau/nvkm/subdev/mc/gp100.c | 2 +- .../drm/nouveau/nvkm/subdev/privring/Kbuild | 7 ++ .../nvkm/subdev/{ibus => privring}/gf100.c | 44 +++++------ .../nvkm/subdev/{ibus => privring}/gf117.c | 16 ++-- .../nvkm/subdev/{ibus => privring}/gk104.c | 46 +++++------ .../nvkm/subdev/{ibus => privring}/gk20a.c | 30 +++---- .../nvkm/subdev/{ibus => privring}/gm200.c | 10 +-- .../nvkm/subdev/{ibus => privring}/gp10b.c | 18 ++--- .../drm/nouveau/nvkm/subdev/privring/priv.h | 8 ++ 20 files changed, 155 insertions(+), 156 deletions(-) delete mode 100644 drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h create mode 100644 drivers/gpu/drm/nouveau/include/nvkm/subdev/privring.h delete mode 100644 drivers/gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild delete mode 100644 drivers/gpu/drm/nouveau/nvkm/subdev/ibus/priv.h create mode 100644 drivers/gpu/drm/nouveau/nvkm/subdev/privring/Kbuild rename drivers/gpu/drm/nouveau/nvkm/subdev/{ibus => privring}/gf100.c (71%) rename drivers/gpu/drm/nouveau/nvkm/subdev/{ibus => privring}/gf117.c (79%) rename drivers/gpu/drm/nouveau/nvkm/subdev/{ibus => privring}/gk104.c (71%) rename drivers/gpu/drm/nouveau/nvkm/subdev/{ibus => privring}/gk20a.c (73%) rename drivers/gpu/drm/nouveau/nvkm/subdev/{ibus => privring}/gm200.c (83%) rename drivers/gpu/drm/nouveau/nvkm/subdev/{ibus => privring}/gp10b.c (78%) create mode 100644 drivers/gpu/drm/nouveau/nvkm/subdev/privring/priv.h diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index b1b1c4c0bcbe..9a4f54d0f850 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -3,7 +3,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_PCI , struct nvkm_pci , pci) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_VBIOS , struct nvkm_bios , bios) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_DEVINIT , struct nvkm_devinit , devinit) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_TOP , struct nvkm_top , top) -NVKM_LAYOUT_ONCE(NVKM_SUBDEV_IBUS , struct nvkm_subdev , ibus) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_PRIVRING, struct nvkm_subdev , privring) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GPIO , struct nvkm_gpio , gpio) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_I2C , struct nvkm_i2c , i2c) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FUSE , struct nvkm_fuse , fuse) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h deleted file mode 100644 index f5da256315cf..000000000000 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h +++ /dev/null @@ -1,12 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -#ifndef __NVKM_IBUS_H__ -#define __NVKM_IBUS_H__ -#include - -int gf100_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); -int gf117_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); -int gk104_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); -int gk20a_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); -int gm200_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); -int gp10b_ibus_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); -#endif diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/privring.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/privring.h new file mode 100644 index 000000000000..e1399f8a90ad --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/privring.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: MIT */ +#ifndef __NVKM_PRIVRING_H__ +#define __NVKM_PRIVRING_H__ +#include + +int gf100_privring_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gf117_privring_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gk104_privring_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gk20a_privring_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gm200_privring_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +int gp10b_privring_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_subdev **); +#endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 35ad59c1aaaa..48447352775e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -1347,7 +1347,6 @@ nvc0_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1356,6 +1355,7 @@ nvc0_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, + .privring = { 0x00000001, gf100_privring_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, @@ -1383,7 +1383,6 @@ nvc1_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1392,6 +1391,7 @@ nvc1_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, + .privring = { 0x00000001, gf100_privring_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, @@ -1419,7 +1419,6 @@ nvc3_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1428,6 +1427,7 @@ nvc3_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, + .privring = { 0x00000001, gf100_privring_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, @@ -1455,7 +1455,6 @@ nvc4_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1464,6 +1463,7 @@ nvc4_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, + .privring = { 0x00000001, gf100_privring_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, @@ -1491,7 +1491,6 @@ nvc8_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1500,6 +1499,7 @@ nvc8_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, + .privring = { 0x00000001, gf100_privring_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, @@ -1527,7 +1527,6 @@ nvce_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1536,6 +1535,7 @@ nvce_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf100_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, + .privring = { 0x00000001, gf100_privring_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, @@ -1563,7 +1563,6 @@ nvcf_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, g94_gpio_new }, .i2c = { 0x00000001, g94_i2c_new }, - .ibus = { 0x00000001, gf100_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1572,6 +1571,7 @@ nvcf_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf100_pmu_new }, + .privring = { 0x00000001, gf100_privring_new }, .therm = { 0x00000001, gt215_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, @@ -1599,7 +1599,6 @@ nvd7_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gf119_gpio_new }, .i2c = { 0x00000001, gf117_i2c_new }, - .ibus = { 0x00000001, gf117_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1607,6 +1606,7 @@ nvd7_chipset = { .mmu = { 0x00000001, gf100_mmu_new }, .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, + .privring = { 0x00000001, gf117_privring_new }, .therm = { 0x00000001, gf119_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf117_volt_new }, @@ -1634,7 +1634,6 @@ nvd9_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gf119_gpio_new }, .i2c = { 0x00000001, gf119_i2c_new }, - .ibus = { 0x00000001, gf117_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gf100_ltc_new }, @@ -1643,6 +1642,7 @@ nvd9_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gf106_pci_new }, .pmu = { 0x00000001, gf119_pmu_new }, + .privring = { 0x00000001, gf117_privring_new }, .therm = { 0x00000001, gf119_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .volt = { 0x00000001, gf100_volt_new }, @@ -1670,7 +1670,6 @@ nve4_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, @@ -1679,6 +1678,7 @@ nve4_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -1707,7 +1707,6 @@ nve6_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, @@ -1716,6 +1715,7 @@ nve6_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -1744,7 +1744,6 @@ nve7_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk104_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, @@ -1753,6 +1752,7 @@ nve7_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk104_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -1777,12 +1777,12 @@ nvea_chipset = { .clk = { 0x00000001, gk20a_clk_new }, .fb = { 0x00000001, gk20a_fb_new }, .fuse = { 0x00000001, gf100_fuse_new }, - .ibus = { 0x00000001, gk20a_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gk20a_mmu_new }, .pmu = { 0x00000001, gk20a_pmu_new }, + .privring = { 0x00000001, gk20a_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gk20a_volt_new }, @@ -1806,7 +1806,6 @@ nvf0_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, @@ -1815,6 +1814,7 @@ nvf0_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk110_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -1842,7 +1842,6 @@ nvf1_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, @@ -1851,6 +1850,7 @@ nvf1_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk110_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -1878,7 +1878,6 @@ nv106_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, @@ -1887,6 +1886,7 @@ nv106_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk208_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -1914,7 +1914,6 @@ nv108_chipset = { .fuse = { 0x00000001, gf100_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gk104_ltc_new }, @@ -1923,6 +1922,7 @@ nv108_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gk208_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gk104_therm_new }, .timer = { 0x00000001, nv41_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -1950,7 +1950,6 @@ nv117_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm107_ltc_new }, @@ -1959,6 +1958,7 @@ nv117_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm107_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gm107_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -1985,7 +1985,6 @@ nv118_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gk110_i2c_new }, - .ibus = { 0x00000001, gk104_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm107_ltc_new }, @@ -1994,6 +1993,7 @@ nv118_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm107_pmu_new }, + .privring = { 0x00000001, gk104_privring_new }, .therm = { 0x00000001, gm107_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2018,7 +2018,6 @@ nv120_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, @@ -2027,6 +2026,7 @@ nv120_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2053,7 +2053,6 @@ nv124_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, @@ -2062,6 +2061,7 @@ nv124_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2088,7 +2088,6 @@ nv126_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .iccsense = { 0x00000001, gf100_iccsense_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, @@ -2097,6 +2096,7 @@ nv126_chipset = { .mxm = { 0x00000001, nv50_mxm_new }, .pci = { 0x00000001, gk104_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gm200_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2120,12 +2120,12 @@ nv12b_chipset = { .clk = { 0x00000001, gm20b_clk_new }, .fb = { 0x00000001, gm20b_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .ibus = { 0x00000001, gk20a_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gm200_ltc_new }, .mc = { 0x00000001, gk20a_mc_new }, .mmu = { 0x00000001, gm20b_mmu_new }, .pmu = { 0x00000001, gm20b_pmu_new }, + .privring = { 0x00000001, gk20a_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .volt = { 0x00000001, gm20b_volt_new }, @@ -2149,7 +2149,6 @@ nv130_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp100_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, @@ -2157,6 +2156,7 @@ nv130_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gm200_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000003f, gp100_ce_new }, @@ -2182,7 +2182,6 @@ nv132_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, @@ -2190,6 +2189,7 @@ nv132_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, @@ -2216,7 +2216,6 @@ nv134_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, @@ -2224,6 +2223,7 @@ nv134_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, @@ -2250,7 +2250,6 @@ nv136_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, @@ -2258,6 +2257,7 @@ nv136_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, @@ -2284,7 +2284,6 @@ nv137_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, @@ -2292,6 +2291,7 @@ nv137_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, @@ -2318,7 +2318,6 @@ nv138_chipset = { .fuse = { 0x00000001, gm107_fuse_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, @@ -2326,6 +2325,7 @@ nv138_chipset = { .therm = { 0x00000001, gp100_therm_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x0000000f, gp102_ce_new }, @@ -2347,12 +2347,12 @@ nv13b_chipset = { .fault = { 0x00000001, gp10b_fault_new }, .fb = { 0x00000001, gp10b_fb_new }, .fuse = { 0x00000001, gm107_fuse_new }, - .ibus = { 0x00000001, gp10b_ibus_new }, .imem = { 0x00000001, gk20a_instmem_new }, .ltc = { 0x00000001, gp10b_ltc_new }, .mc = { 0x00000001, gp10b_mc_new }, .mmu = { 0x00000001, gp10b_mmu_new }, .pmu = { 0x00000001, gp10b_pmu_new }, + .privring = { 0x00000001, gp10b_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, .ce = { 0x00000001, gp100_ce_new }, @@ -2376,13 +2376,13 @@ nv140_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, gp100_mc_new }, .mmu = { 0x00000001, gv100_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2410,13 +2410,13 @@ nv162_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2444,13 +2444,13 @@ nv164_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2478,13 +2478,13 @@ nv166_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2512,13 +2512,13 @@ nv167_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2546,13 +2546,13 @@ nv168_chipset = { .gpio = { 0x00000001, gk104_gpio_new }, .gsp = { 0x00000001, gv100_gsp_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .ltc = { 0x00000001, gp102_ltc_new }, .mc = { 0x00000001, tu102_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, .pmu = { 0x00000001, gp102_pmu_new }, + .privring = { 0x00000001, gm200_privring_new }, .therm = { 0x00000001, gp100_therm_new }, .timer = { 0x00000001, gk20a_timer_new }, .top = { 0x00000001, gk104_top_new }, @@ -2575,11 +2575,11 @@ nv170_chipset = { .fb = { 0x00000001, ga100_fb_new }, .gpio = { 0x00000001, gk104_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, }; @@ -2592,11 +2592,11 @@ nv172_chipset = { .fb = { 0x00000001, ga102_fb_new }, .gpio = { 0x00000001, ga102_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .disp = { 0x00000001, ga102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, @@ -2611,11 +2611,11 @@ nv174_chipset = { .fb = { 0x00000001, ga102_fb_new }, .gpio = { 0x00000001, ga102_gpio_new }, .i2c = { 0x00000001, gm200_i2c_new }, - .ibus = { 0x00000001, gm200_ibus_new }, .imem = { 0x00000001, nv50_instmem_new }, .mc = { 0x00000001, ga100_mc_new }, .mmu = { 0x00000001, tu102_mmu_new }, .pci = { 0x00000001, gp100_pci_new }, + .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, .disp = { 0x00000001, ga102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/device/priv.h index 54eab5e04230..93949b3c7214 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/priv.h @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include @@ -24,6 +23,7 @@ #include #include #include +#include #include #include #include diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/Kbuild index fb4fff1222af..2cb24fff7e32 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/Kbuild @@ -11,7 +11,6 @@ include $(src)/nvkm/subdev/fuse/Kbuild include $(src)/nvkm/subdev/gpio/Kbuild include $(src)/nvkm/subdev/gsp/Kbuild include $(src)/nvkm/subdev/i2c/Kbuild -include $(src)/nvkm/subdev/ibus/Kbuild include $(src)/nvkm/subdev/iccsense/Kbuild include $(src)/nvkm/subdev/instmem/Kbuild include $(src)/nvkm/subdev/ltc/Kbuild @@ -20,6 +19,7 @@ include $(src)/nvkm/subdev/mmu/Kbuild include $(src)/nvkm/subdev/mxm/Kbuild include $(src)/nvkm/subdev/pci/Kbuild include $(src)/nvkm/subdev/pmu/Kbuild +include $(src)/nvkm/subdev/privring/Kbuild include $(src)/nvkm/subdev/therm/Kbuild include $(src)/nvkm/subdev/timer/Kbuild include $(src)/nvkm/subdev/top/Kbuild diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.c index 7f35bb87445d..53a6651ac225 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.c @@ -40,7 +40,7 @@ gf100_bus_intr(struct nvkm_bus *bus) (addr & 0x00000002) ? "write" : "read", data, (addr & 0x00fffffc), (stat & 0x00000002) ? "!ENGINE " : "", - (stat & 0x00000004) ? "IBUS " : "", + (stat & 0x00000004) ? "PRIVRING " : "", (stat & 0x00000008) ? "TIMEOUT " : ""); nvkm_wr32(device, 0x009084, 0x00000000); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild deleted file mode 100644 index 127efb51f67d..000000000000 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild +++ /dev/null @@ -1,7 +0,0 @@ -# SPDX-License-Identifier: MIT -nvkm-y += nvkm/subdev/ibus/gf100.o -nvkm-y += nvkm/subdev/ibus/gf117.o -nvkm-y += nvkm/subdev/ibus/gk104.o -nvkm-y += nvkm/subdev/ibus/gk20a.o -nvkm-y += nvkm/subdev/ibus/gm200.o -nvkm-y += nvkm/subdev/ibus/gp10b.o diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/priv.h deleted file mode 100644 index 302d69e384d8..000000000000 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/priv.h +++ /dev/null @@ -1,9 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -#ifndef __NVKM_IBUS_PRIV_H__ -#define __NVKM_IBUS_PRIV_H__ - -#include - -void gf100_ibus_intr(struct nvkm_subdev *); -void gk104_ibus_intr(struct nvkm_subdev *); -#endif diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c index 9e27356bb506..3a589c6f7fad 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c @@ -46,7 +46,7 @@ gf100_mc_intr[] = { { 0x00000040, NVKM_ENGINE_CE, 1 }, { 0x00000020, NVKM_ENGINE_CE, 0 }, { 0x00000001, NVKM_ENGINE_MSPPP }, - { 0x40000000, NVKM_SUBDEV_IBUS }, + { 0x40000000, NVKM_SUBDEV_PRIVRING }, { 0x10000000, NVKM_SUBDEV_BUS }, { 0x08000000, NVKM_SUBDEV_FB }, { 0x02000000, NVKM_SUBDEV_LTC }, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c index afe0d1dbd1f6..d9b9067fa93f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.c @@ -34,7 +34,7 @@ const struct nvkm_mc_map gk104_mc_intr[] = { { 0x04000000, NVKM_ENGINE_DISP }, { 0x00000100, NVKM_ENGINE_FIFO }, - { 0x40000000, NVKM_SUBDEV_IBUS }, + { 0x40000000, NVKM_SUBDEV_PRIVRING }, { 0x10000000, NVKM_SUBDEV_BUS }, { 0x08000000, NVKM_SUBDEV_FB }, { 0x02000000, NVKM_SUBDEV_LTC }, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.c index 00e8c73f64d3..5fd1a0595c33 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.c @@ -80,7 +80,7 @@ gp100_mc_intr[] = { { 0x04000000, NVKM_ENGINE_DISP }, { 0x00000100, NVKM_ENGINE_FIFO }, { 0x00000200, NVKM_SUBDEV_FAULT }, - { 0x40000000, NVKM_SUBDEV_IBUS }, + { 0x40000000, NVKM_SUBDEV_PRIVRING }, { 0x10000000, NVKM_SUBDEV_BUS }, { 0x08000000, NVKM_SUBDEV_FB }, { 0x02000000, NVKM_SUBDEV_LTC }, diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/privring/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/Kbuild new file mode 100644 index 000000000000..d47d1bdd0f2b --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/Kbuild @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT +nvkm-y += nvkm/subdev/privring/gf100.o +nvkm-y += nvkm/subdev/privring/gf117.o +nvkm-y += nvkm/subdev/privring/gk104.o +nvkm-y += nvkm/subdev/privring/gk20a.o +nvkm-y += nvkm/subdev/privring/gm200.o +nvkm-y += nvkm/subdev/privring/gp10b.o diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.c similarity index 71% rename from drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c rename to drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.c index 1213f990323e..ef7caca70372 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.c @@ -25,39 +25,39 @@ #include static void -gf100_ibus_intr_hub(struct nvkm_subdev *ibus, int i) +gf100_privring_intr_hub(struct nvkm_subdev *privring, int i) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 addr = nvkm_rd32(device, 0x122120 + (i * 0x0400)); u32 data = nvkm_rd32(device, 0x122124 + (i * 0x0400)); u32 stat = nvkm_rd32(device, 0x122128 + (i * 0x0400)); - nvkm_debug(ibus, "HUB%d: %06x %08x (%08x)\n", i, addr, data, stat); + nvkm_debug(privring, "HUB%d: %06x %08x (%08x)\n", i, addr, data, stat); } static void -gf100_ibus_intr_rop(struct nvkm_subdev *ibus, int i) +gf100_privring_intr_rop(struct nvkm_subdev *privring, int i) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 addr = nvkm_rd32(device, 0x124120 + (i * 0x0400)); u32 data = nvkm_rd32(device, 0x124124 + (i * 0x0400)); u32 stat = nvkm_rd32(device, 0x124128 + (i * 0x0400)); - nvkm_debug(ibus, "ROP%d: %06x %08x (%08x)\n", i, addr, data, stat); + nvkm_debug(privring, "ROP%d: %06x %08x (%08x)\n", i, addr, data, stat); } static void -gf100_ibus_intr_gpc(struct nvkm_subdev *ibus, int i) +gf100_privring_intr_gpc(struct nvkm_subdev *privring, int i) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 addr = nvkm_rd32(device, 0x128120 + (i * 0x0400)); u32 data = nvkm_rd32(device, 0x128124 + (i * 0x0400)); u32 stat = nvkm_rd32(device, 0x128128 + (i * 0x0400)); - nvkm_debug(ibus, "GPC%d: %06x %08x (%08x)\n", i, addr, data, stat); + nvkm_debug(privring, "GPC%d: %06x %08x (%08x)\n", i, addr, data, stat); } void -gf100_ibus_intr(struct nvkm_subdev *ibus) +gf100_privring_intr(struct nvkm_subdev *privring) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 intr0 = nvkm_rd32(device, 0x121c58); u32 intr1 = nvkm_rd32(device, 0x121c5c); u32 hubnr = nvkm_rd32(device, 0x121c70); @@ -68,7 +68,7 @@ gf100_ibus_intr(struct nvkm_subdev *ibus) for (i = 0; (intr0 & 0x0000ff00) && i < hubnr; i++) { u32 stat = 0x00000100 << i; if (intr0 & stat) { - gf100_ibus_intr_hub(ibus, i); + gf100_privring_intr_hub(privring, i); intr0 &= ~stat; } } @@ -76,7 +76,7 @@ gf100_ibus_intr(struct nvkm_subdev *ibus) for (i = 0; (intr0 & 0xffff0000) && i < ropnr; i++) { u32 stat = 0x00010000 << i; if (intr0 & stat) { - gf100_ibus_intr_rop(ibus, i); + gf100_privring_intr_rop(privring, i); intr0 &= ~stat; } } @@ -84,7 +84,7 @@ gf100_ibus_intr(struct nvkm_subdev *ibus) for (i = 0; intr1 && i < gpcnr; i++) { u32 stat = 0x00000001 << i; if (intr1 & stat) { - gf100_ibus_intr_gpc(ibus, i); + gf100_privring_intr_gpc(privring, i); intr1 &= ~stat; } } @@ -97,9 +97,9 @@ gf100_ibus_intr(struct nvkm_subdev *ibus) } static int -gf100_ibus_init(struct nvkm_subdev *ibus) +gf100_privring_init(struct nvkm_subdev *privring) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; nvkm_mask(device, 0x122310, 0x0003ffff, 0x00000800); nvkm_wr32(device, 0x12232c, 0x00100064); nvkm_wr32(device, 0x122330, 0x00100064); @@ -109,14 +109,14 @@ gf100_ibus_init(struct nvkm_subdev *ibus) } static const struct nvkm_subdev_func -gf100_ibus = { - .init = gf100_ibus_init, - .intr = gf100_ibus_intr, +gf100_privring = { + .init = gf100_privring_init, + .intr = gf100_privring_intr, }; int -gf100_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, - struct nvkm_subdev **pibus) +gf100_privring_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_subdev **pprivring) { - return nvkm_subdev_new_(&gf100_ibus, device, type, inst, pibus); + return nvkm_subdev_new_(&gf100_privring, device, type, inst, pprivring); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf117.c b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf117.c similarity index 79% rename from drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf117.c rename to drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf117.c index e4e545f4d893..c78721fcd729 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf117.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf117.c @@ -24,9 +24,9 @@ #include "priv.h" static int -gf117_ibus_init(struct nvkm_subdev *ibus) +gf117_privring_init(struct nvkm_subdev *privring) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; nvkm_mask(device, 0x122310, 0x0003ffff, 0x00000800); nvkm_mask(device, 0x122348, 0x0003ffff, 0x00000100); nvkm_mask(device, 0x1223b0, 0x0003ffff, 0x00000fff); @@ -34,14 +34,14 @@ gf117_ibus_init(struct nvkm_subdev *ibus) } static const struct nvkm_subdev_func -gf117_ibus = { - .init = gf117_ibus_init, - .intr = gf100_ibus_intr, +gf117_privring = { + .init = gf117_privring_init, + .intr = gf100_privring_intr, }; int -gf117_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, - struct nvkm_subdev **pibus) +gf117_privring_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_subdev **pprivring) { - return nvkm_subdev_new_(&gf117_ibus, device, type, inst, pibus); + return nvkm_subdev_new_(&gf117_privring, device, type, inst, pprivring); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk104.c similarity index 71% rename from drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c rename to drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk104.c index 36cae20b3195..568a4c0997bd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk104.c @@ -25,39 +25,39 @@ #include static void -gk104_ibus_intr_hub(struct nvkm_subdev *ibus, int i) +gk104_privring_intr_hub(struct nvkm_subdev *privring, int i) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 addr = nvkm_rd32(device, 0x122120 + (i * 0x0800)); u32 data = nvkm_rd32(device, 0x122124 + (i * 0x0800)); u32 stat = nvkm_rd32(device, 0x122128 + (i * 0x0800)); - nvkm_debug(ibus, "HUB%d: %06x %08x (%08x)\n", i, addr, data, stat); + nvkm_debug(privring, "HUB%d: %06x %08x (%08x)\n", i, addr, data, stat); } static void -gk104_ibus_intr_rop(struct nvkm_subdev *ibus, int i) +gk104_privring_intr_rop(struct nvkm_subdev *privring, int i) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 addr = nvkm_rd32(device, 0x124120 + (i * 0x0800)); u32 data = nvkm_rd32(device, 0x124124 + (i * 0x0800)); u32 stat = nvkm_rd32(device, 0x124128 + (i * 0x0800)); - nvkm_debug(ibus, "ROP%d: %06x %08x (%08x)\n", i, addr, data, stat); + nvkm_debug(privring, "ROP%d: %06x %08x (%08x)\n", i, addr, data, stat); } static void -gk104_ibus_intr_gpc(struct nvkm_subdev *ibus, int i) +gk104_privring_intr_gpc(struct nvkm_subdev *privring, int i) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 addr = nvkm_rd32(device, 0x128120 + (i * 0x0800)); u32 data = nvkm_rd32(device, 0x128124 + (i * 0x0800)); u32 stat = nvkm_rd32(device, 0x128128 + (i * 0x0800)); - nvkm_debug(ibus, "GPC%d: %06x %08x (%08x)\n", i, addr, data, stat); + nvkm_debug(privring, "GPC%d: %06x %08x (%08x)\n", i, addr, data, stat); } void -gk104_ibus_intr(struct nvkm_subdev *ibus) +gk104_privring_intr(struct nvkm_subdev *privring) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 intr0 = nvkm_rd32(device, 0x120058); u32 intr1 = nvkm_rd32(device, 0x12005c); u32 hubnr = nvkm_rd32(device, 0x120070); @@ -68,7 +68,7 @@ gk104_ibus_intr(struct nvkm_subdev *ibus) for (i = 0; (intr0 & 0x0000ff00) && i < hubnr; i++) { u32 stat = 0x00000100 << i; if (intr0 & stat) { - gk104_ibus_intr_hub(ibus, i); + gk104_privring_intr_hub(privring, i); intr0 &= ~stat; } } @@ -76,7 +76,7 @@ gk104_ibus_intr(struct nvkm_subdev *ibus) for (i = 0; (intr0 & 0xffff0000) && i < ropnr; i++) { u32 stat = 0x00010000 << i; if (intr0 & stat) { - gk104_ibus_intr_rop(ibus, i); + gk104_privring_intr_rop(privring, i); intr0 &= ~stat; } } @@ -84,7 +84,7 @@ gk104_ibus_intr(struct nvkm_subdev *ibus) for (i = 0; intr1 && i < gpcnr; i++) { u32 stat = 0x00000001 << i; if (intr1 & stat) { - gk104_ibus_intr_gpc(ibus, i); + gk104_privring_intr_gpc(privring, i); intr1 &= ~stat; } } @@ -97,9 +97,9 @@ gk104_ibus_intr(struct nvkm_subdev *ibus) } static int -gk104_ibus_init(struct nvkm_subdev *ibus) +gk104_privring_init(struct nvkm_subdev *privring) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; nvkm_mask(device, 0x122318, 0x0003ffff, 0x00001000); nvkm_mask(device, 0x12231c, 0x0003ffff, 0x00000200); nvkm_mask(device, 0x122310, 0x0003ffff, 0x00000800); @@ -111,15 +111,15 @@ gk104_ibus_init(struct nvkm_subdev *ibus) } static const struct nvkm_subdev_func -gk104_ibus = { - .preinit = gk104_ibus_init, - .init = gk104_ibus_init, - .intr = gk104_ibus_intr, +gk104_privring = { + .preinit = gk104_privring_init, + .init = gk104_privring_init, + .intr = gk104_privring_intr, }; int -gk104_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, - struct nvkm_subdev **pibus) +gk104_privring_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_subdev **pprivring) { - return nvkm_subdev_new_(&gk104_ibus, device, type, inst, pibus); + return nvkm_subdev_new_(&gk104_privring, device, type, inst, pprivring); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk20a.c similarity index 73% rename from drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk20a.c rename to drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk20a.c index ece073a1cc5a..55e4a60d8770 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk20a.c @@ -19,13 +19,13 @@ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ -#include +#include #include static void -gk20a_ibus_init_ibus_ring(struct nvkm_subdev *ibus) +gk20a_privring_init_privring_ring(struct nvkm_subdev *privring) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; nvkm_mask(device, 0x137250, 0x3f, 0); nvkm_mask(device, 0x000200, 0x20, 0); @@ -46,14 +46,14 @@ gk20a_ibus_init_ibus_ring(struct nvkm_subdev *ibus) } static void -gk20a_ibus_intr(struct nvkm_subdev *ibus) +gk20a_privring_intr(struct nvkm_subdev *privring) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; u32 status0 = nvkm_rd32(device, 0x120058); if (status0 & 0x7) { - nvkm_debug(ibus, "resetting ibus ring\n"); - gk20a_ibus_init_ibus_ring(ibus); + nvkm_debug(privring, "resetting privring ring\n"); + gk20a_privring_init_privring_ring(privring); } /* Acknowledge interrupt */ @@ -65,21 +65,21 @@ gk20a_ibus_intr(struct nvkm_subdev *ibus) } static int -gk20a_ibus_init(struct nvkm_subdev *ibus) +gk20a_privring_init(struct nvkm_subdev *privring) { - gk20a_ibus_init_ibus_ring(ibus); + gk20a_privring_init_privring_ring(privring); return 0; } static const struct nvkm_subdev_func -gk20a_ibus = { - .init = gk20a_ibus_init, - .intr = gk20a_ibus_intr, +gk20a_privring = { + .init = gk20a_privring_init, + .intr = gk20a_privring_intr, }; int -gk20a_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, - struct nvkm_subdev **pibus) +gk20a_privring_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_subdev **pprivring) { - return nvkm_subdev_new_(&gk20a_ibus, device, type, inst, pibus); + return nvkm_subdev_new_(&gk20a_privring, device, type, inst, pprivring); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gm200.c similarity index 83% rename from drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm200.c rename to drivers/gpu/drm/nouveau/nvkm/subdev/privring/gm200.c index 7973e603e031..b4eaf6db36d7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gm200.c @@ -24,13 +24,13 @@ #include "priv.h" static const struct nvkm_subdev_func -gm200_ibus = { - .intr = gk104_ibus_intr, +gm200_privring = { + .intr = gk104_privring_intr, }; int -gm200_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, - struct nvkm_subdev **pibus) +gm200_privring_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_subdev **pprivring) { - return nvkm_subdev_new_(&gm200_ibus, device, type, inst, pibus); + return nvkm_subdev_new_(&gm200_privring, device, type, inst, pprivring); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gp10b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gp10b.c similarity index 78% rename from drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gp10b.c rename to drivers/gpu/drm/nouveau/nvkm/subdev/privring/gp10b.c index 611341afc685..4534111cf907 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gp10b.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/gp10b.c @@ -19,14 +19,14 @@ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ -#include +#include #include "priv.h" static int -gp10b_ibus_init(struct nvkm_subdev *ibus) +gp10b_privring_init(struct nvkm_subdev *privring) { - struct nvkm_device *device = ibus->device; + struct nvkm_device *device = privring->device; nvkm_wr32(device, 0x1200a8, 0x0); @@ -42,14 +42,14 @@ gp10b_ibus_init(struct nvkm_subdev *ibus) } static const struct nvkm_subdev_func -gp10b_ibus = { - .init = gp10b_ibus_init, - .intr = gk104_ibus_intr, +gp10b_privring = { + .init = gp10b_privring_init, + .intr = gk104_privring_intr, }; int -gp10b_ibus_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, - struct nvkm_subdev **pibus) +gp10b_privring_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_subdev **pprivring) { - return nvkm_subdev_new_(&gp10b_ibus, device, type, inst, pibus); + return nvkm_subdev_new_(&gp10b_privring, device, type, inst, pprivring); } diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/privring/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/priv.h new file mode 100644 index 000000000000..b378c14bc8dc --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/privring/priv.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: MIT */ +#ifndef __NVKM_PRIVRING_PRIV_H__ +#define __NVKM_PRIVRING_PRIV_H__ +#include + +void gf100_privring_intr(struct nvkm_subdev *); +void gk104_privring_intr(struct nvkm_subdev *); +#endif From 18618fc6d1e35918eb23c23059da902a1286816a Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 8 Feb 2021 16:40:06 +1000 Subject: [PATCH 86/87] drm/nouveau/top: add ioctrl/nvjpg Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- drivers/gpu/drm/nouveau/include/nvkm/core/layout.h | 2 ++ drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 9a4f54d0f850..84633a98399d 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -24,6 +24,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ICCSENSE, struct nvkm_iccsense, iccsense) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_THERM , struct nvkm_therm , therm) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) +NVKM_LAYOUT_INST(NVKM_SUBDEV_IOCTRL , struct nvkm_subdev , ioctrl, 3) NVKM_LAYOUT_ONCE(NVKM_ENGINE_BSP , struct nvkm_engine , bsp) NVKM_LAYOUT_INST(NVKM_ENGINE_CE , struct nvkm_engine , ce, 9) @@ -41,6 +42,7 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPPP , struct nvkm_engine , msppp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSVLD , struct nvkm_engine , msvld) NVKM_LAYOUT_INST(NVKM_ENGINE_NVDEC , struct nvkm_nvdec , nvdec, 3) NVKM_LAYOUT_INST(NVKM_ENGINE_NVENC , struct nvkm_nvenc , nvenc, 3) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_NVJPG , struct nvkm_engine , nvjpg) NVKM_LAYOUT_ONCE(NVKM_ENGINE_PM , struct nvkm_pm , pm) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC , struct nvkm_engine , sec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC2 , struct nvkm_sec2 , sec2) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c index 870f926ec35f..4dcad97bd505 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.c @@ -86,8 +86,10 @@ gk104_top_oneinit(struct nvkm_top *top) case 0x0000000e: I_(NVKM_ENGINE_NVENC , inst); break; case 0x0000000f: O_(NVKM_ENGINE_NVENC , 1); break; case 0x00000010: I_(NVKM_ENGINE_NVDEC , inst); break; + case 0x00000012: I_(NVKM_SUBDEV_IOCTRL, inst); break; case 0x00000013: I_(NVKM_ENGINE_CE , inst); break; case 0x00000014: O_(NVKM_SUBDEV_GSP , 0); break; + case 0x00000015: O_(NVKM_ENGINE_NVJPG , 0); break; default: break; } From f6df392dddbb9e637b785e7e3d9337a74923dc10 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 8 Feb 2021 16:01:44 +1000 Subject: [PATCH 87/87] drm/nouveau/top/ga100: initial support Signed-off-by: Ben Skeggs Reviewed-by: Lyude Paul --- .../drm/nouveau/include/nvkm/core/layout.h | 6 +- .../gpu/drm/nouveau/include/nvkm/subdev/top.h | 1 + .../gpu/drm/nouveau/nvkm/engine/device/base.c | 3 + .../gpu/drm/nouveau/nvkm/subdev/top/Kbuild | 1 + .../gpu/drm/nouveau/nvkm/subdev/top/ga100.c | 107 ++++++++++++++++++ 5 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.c diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h index 84633a98399d..7afe1579b20f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/layout.h @@ -25,9 +25,10 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_THERM , struct nvkm_therm , therm) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_CLK , struct nvkm_clk , clk) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_GSP , struct nvkm_gsp , gsp) NVKM_LAYOUT_INST(NVKM_SUBDEV_IOCTRL , struct nvkm_subdev , ioctrl, 3) +NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FLA , struct nvkm_subdev , fla) NVKM_LAYOUT_ONCE(NVKM_ENGINE_BSP , struct nvkm_engine , bsp) -NVKM_LAYOUT_INST(NVKM_ENGINE_CE , struct nvkm_engine , ce, 9) +NVKM_LAYOUT_INST(NVKM_ENGINE_CE , struct nvkm_engine , ce, 10) NVKM_LAYOUT_ONCE(NVKM_ENGINE_CIPHER , struct nvkm_engine , cipher) NVKM_LAYOUT_ONCE(NVKM_ENGINE_DISP , struct nvkm_disp , disp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_DMAOBJ , struct nvkm_dma , dma) @@ -40,9 +41,10 @@ NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSENC , struct nvkm_engine , msenc) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPDEC , struct nvkm_engine , mspdec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSPPP , struct nvkm_engine , msppp) NVKM_LAYOUT_ONCE(NVKM_ENGINE_MSVLD , struct nvkm_engine , msvld) -NVKM_LAYOUT_INST(NVKM_ENGINE_NVDEC , struct nvkm_nvdec , nvdec, 3) +NVKM_LAYOUT_INST(NVKM_ENGINE_NVDEC , struct nvkm_nvdec , nvdec, 5) NVKM_LAYOUT_INST(NVKM_ENGINE_NVENC , struct nvkm_nvenc , nvenc, 3) NVKM_LAYOUT_ONCE(NVKM_ENGINE_NVJPG , struct nvkm_engine , nvjpg) +NVKM_LAYOUT_ONCE(NVKM_ENGINE_OFA , struct nvkm_engine , ofa) NVKM_LAYOUT_ONCE(NVKM_ENGINE_PM , struct nvkm_pm , pm) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC , struct nvkm_engine , sec) NVKM_LAYOUT_ONCE(NVKM_ENGINE_SEC2 , struct nvkm_sec2 , sec2) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h index a642f5c4ac45..ee75c5524c43 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h @@ -28,4 +28,5 @@ int nvkm_top_fault_id(struct nvkm_device *, enum nvkm_subdev_type, int); struct nvkm_subdev *nvkm_top_fault(struct nvkm_device *, int fault); int gk104_top_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_top **); +int ga100_top_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_top **); #endif diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 48447352775e..b930f539feec 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c @@ -2581,6 +2581,7 @@ nv170_chipset = { .pci = { 0x00000001, gp100_pci_new }, .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, + .top = { 0x00000001, ga100_top_new }, }; static const struct nvkm_device_chip @@ -2598,6 +2599,7 @@ nv172_chipset = { .pci = { 0x00000001, gp100_pci_new }, .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, + .top = { 0x00000001, ga100_top_new }, .disp = { 0x00000001, ga102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, }; @@ -2617,6 +2619,7 @@ nv174_chipset = { .pci = { 0x00000001, gp100_pci_new }, .privring = { 0x00000001, gm200_privring_new }, .timer = { 0x00000001, gk20a_timer_new }, + .top = { 0x00000001, ga100_top_new }, .disp = { 0x00000001, ga102_disp_new }, .dma = { 0x00000001, gv100_dma_new }, }; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/top/Kbuild index 438d9d78ab52..d5db845195dc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/top/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/Kbuild @@ -1,3 +1,4 @@ # SPDX-License-Identifier: MIT nvkm-y += nvkm/subdev/top/base.o nvkm-y += nvkm/subdev/top/gk104.o +nvkm-y += nvkm/subdev/top/ga100.o diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.c new file mode 100644 index 000000000000..31933f3e5a07 --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.c @@ -0,0 +1,107 @@ +/* + * Copyright 2021 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ +#include "priv.h" + +static int +ga100_top_oneinit(struct nvkm_top *top) +{ + struct nvkm_subdev *subdev = &top->subdev; + struct nvkm_device *device = subdev->device; + struct nvkm_top_device *info = NULL; + u32 data, type, inst; + int i, n, size = nvkm_rd32(device, 0x0224fc) >> 20; + + for (i = 0, n = 0; i < size; i++) { + if (!info) { + if (!(info = nvkm_top_device_new(top))) + return -ENOMEM; + type = ~0; + inst = 0; + } + + data = nvkm_rd32(device, 0x022800 + (i * 0x04)); + nvkm_trace(subdev, "%02x: %08x\n", i, data); + if (!data && n == 0) + continue; + + switch (n++) { + case 0: + type = (data & 0x3f000000) >> 24; + inst = (data & 0x000f0000) >> 16; + info->fault = (data & 0x0000007f); + break; + case 1: + info->addr = (data & 0x00fff000); + info->reset = (data & 0x0000001f); + break; + case 2: + info->runlist = (data & 0x0000fc00) >> 10; + info->engine = (data & 0x00000003); + break; + default: + break; + } + + if (data & 0x80000000) + continue; + n = 0; + + /* Translate engine type to NVKM engine identifier. */ +#define I_(T,I) do { info->type = (T); info->inst = (I); } while(0) +#define O_(T,I) do { WARN_ON(inst); I_(T, I); } while (0) + switch (type) { + case 0x00000000: O_(NVKM_ENGINE_GR , 0); break; + case 0x0000000d: O_(NVKM_ENGINE_SEC2 , 0); break; + case 0x0000000e: I_(NVKM_ENGINE_NVENC , inst); break; + case 0x00000010: I_(NVKM_ENGINE_NVDEC , inst); break; + case 0x00000012: I_(NVKM_SUBDEV_IOCTRL, inst); break; + case 0x00000013: I_(NVKM_ENGINE_CE , inst); break; + case 0x00000014: O_(NVKM_SUBDEV_GSP , 0); break; + case 0x00000015: O_(NVKM_ENGINE_NVJPG , 0); break; + case 0x00000016: O_(NVKM_ENGINE_OFA , 0); break; + case 0x00000017: O_(NVKM_SUBDEV_FLA , 0); break; + break; + default: + break; + } + + nvkm_debug(subdev, "%02x.%d (%8s): addr %06x fault %2d " + "runlist %2d engine %2d reset %2d\n", type, inst, + info->type == NVKM_SUBDEV_NR ? "????????" : nvkm_subdev_type[info->type], + info->addr, info->fault, info->runlist, info->engine, info->reset); + info = NULL; + } + + return 0; +} + +static const struct nvkm_top_func +ga100_top = { + .oneinit = ga100_top_oneinit, +}; + +int +ga100_top_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, + struct nvkm_top **ptop) +{ + return nvkm_top_new_(&ga100_top, device, type, inst, ptop); +}