]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/nouveau/disp/gv100-: not all channel types support reporting error codes
authorBen Skeggs <bskeggs@redhat.com>
Tue, 28 Jan 2020 05:03:25 +0000 (15:03 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 29 Jan 2020 05:49:56 +0000 (15:49 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c

index 892be6c9b76ca9de64238d1e35567cbd13a65a65..3aa2cc3af1e2463b44de94a1dd2e119450af305d 100644 (file)
@@ -101,15 +101,26 @@ gv100_disp_exception(struct nv50_disp *disp, int chid)
        u32 stat = nvkm_rd32(device, 0x611020 + (chid * 12));
        u32 type = (stat & 0x00007000) >> 12;
        u32 mthd = (stat & 0x00000fff) << 2;
-       u32 data = nvkm_rd32(device, 0x611024 + (chid * 12));
-       u32 code = nvkm_rd32(device, 0x611028 + (chid * 12));
        const struct nvkm_enum *reason =
                nvkm_enum_find(nv50_disp_intr_error_type, type);
 
-       nvkm_error(subdev, "chid %d stat %08x reason %d [%s] mthd %04x "
-                          "data %08x code %08x\n",
-                  chid, stat, type, reason ? reason->name : "",
-                  mthd, data, code);
+       /*TODO: Suspect 33->41 are for WRBK channel exceptions, but we
+        *      don't support those currently.
+        *
+        *      CORE+WIN CHIDs map directly to the FE_EXCEPT() slots.
+        */
+       if (chid <= 32) {
+               u32 data = nvkm_rd32(device, 0x611024 + (chid * 12));
+               u32 code = nvkm_rd32(device, 0x611028 + (chid * 12));
+               nvkm_error(subdev, "chid %d stat %08x reason %d [%s] "
+                                  "mthd %04x data %08x code %08x\n",
+                          chid, stat, type, reason ? reason->name : "",
+                          mthd, data, code);
+       } else {
+               nvkm_error(subdev, "chid %d stat %08x reason %d [%s] "
+                                  "mthd %04x\n",
+                          chid, stat, type, reason ? reason->name : "", mthd);
+       }
 
        if (chid < ARRAY_SIZE(disp->chan) && disp->chan[chid]) {
                switch (mthd) {