]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/nouveau/fifo/gf100-: switch static mmu fault id list to type+inst
authorBen Skeggs <bskeggs@redhat.com>
Sat, 6 Feb 2021 11:47:44 +0000 (21:47 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 11 Feb 2021 01:49:57 +0000 (11:49 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
drivers/gpu/drm/nouveau/include/nvkm/core/enum.h
drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c
drivers/gpu/drm/nouveau/nvkm/subdev/top/base.c

index ce98efd4b209f5f0e814599c25c8e1ea2ca2b2e1..070462be35d9668381935df55fcc058d1d88ee4c 100644 (file)
@@ -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);
index b652d7c99dda71ecb4e952f818a96a9152d4de32..ea82b5db7c432536f9eb99ec59949f4a92b07d4a 100644 (file)
@@ -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 **);
index f339d18191dc8f43aae8d9f74fa071c87812a7b2..8b4f36b3e34b5d8960835376ed848fba4b035c45 100644 (file)
@@ -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_CE0 },
+       { 0x16, "PCE1", NULL, NVKM_ENGINE_CE1 },
        { 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;
                }
        }
index 6d2b77e3535bdcf3fb78706aa3e361c1742515ba..fc6603b5a6e4829880aa1b54bc38e3af1a6c71e9 100644 (file)
@@ -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_CE0 },
+       { 0x16, "CE1", NULL, NVKM_ENGINE_CE1 },
        { 0x17, "PMU" },
        { 0x18, "PTP" },
        { 0x19, "MSENC", NULL, NVKM_ENGINE_MSENC },
-       { 0x1b, "CE2", NULL, NVKM_ENGINE_CE2 },
+       { 0x1b, "CE2", NULL, NVKM_ENGINE_CE2 },
        {}
 };
 
index 10fc23b3bf3747c77d1052be6317411c85bd2a1c..c34046803e0d1cdcbe315a978a1c5430a610f881 100644 (file)
@@ -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;
        }