drm/nouveau/ltc/gm107-: decode interrupt status to human-readable strings
authorBen Skeggs <bskeggs@redhat.com>
Tue, 21 Jun 2016 02:41:36 +0000 (12:41 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 14 Jul 2016 01:53:25 +0000 (11:53 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c
drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c
drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h

index c9eb677967a84455d325f7eef9fc9f0128ca41b2..4a0fa0a9b80287b5f68b292764f985502a27277d 100644 (file)
@@ -23,7 +23,6 @@
  */
 #include "priv.h"
 
-#include <core/enum.h>
 #include <subdev/fb.h>
 #include <subdev/timer.h>
 
@@ -71,7 +70,7 @@ gf100_ltc_zbc_clear_depth(struct nvkm_ltc *ltc, int i, const u32 depth)
        nvkm_wr32(device, 0x17ea58, depth);
 }
 
-static const struct nvkm_bitfield
+const struct nvkm_bitfield
 gf100_ltc_lts_intr_name[] = {
        { 0x00000001, "IDLE_ERROR_IQ" },
        { 0x00000002, "IDLE_ERROR_CBC" },
index 389fb13a19985aa68bf40cfb7c0909fbb4fde3d5..d65708c6a85f041b87f2098770dd3c6865efa4a8 100644 (file)
@@ -74,12 +74,16 @@ gm107_ltc_intr_lts(struct nvkm_ltc *ltc, int c, int s)
        struct nvkm_subdev *subdev = &ltc->subdev;
        struct nvkm_device *device = subdev->device;
        u32 base = 0x140400 + (c * 0x2000) + (s * 0x200);
-       u32 stat = nvkm_rd32(device, base + 0x00c);
+       u32 intr = nvkm_rd32(device, base + 0x00c);
+       u16 stat = intr & 0x0000ffff;
+       char msg[128];
 
        if (stat) {
-               nvkm_error(subdev, "LTC%d_LTS%d: %08x\n", c, s, stat);
-               nvkm_wr32(device, base + 0x00c, stat);
+               nvkm_snprintbf(msg, sizeof(msg), gf100_ltc_lts_intr_name, stat);
+               nvkm_error(subdev, "LTC%d_LTS%d: %08x [%s]\n", c, s, intr, msg);
        }
+
+       nvkm_wr32(device, base + 0x00c, intr);
 }
 
 void
index 6d81c695ed0d9f5312f85be51b6f1829ccee093b..0da5766a9d3d8dbcb58f5d9db314b9fd9e41b8a3 100644 (file)
@@ -2,6 +2,7 @@
 #define __NVKM_LTC_PRIV_H__
 #define nvkm_ltc(p) container_of((p), struct nvkm_ltc, subdev)
 #include <subdev/ltc.h>
+#include <core/enum.h>
 
 int nvkm_ltc_new_(const struct nvkm_ltc_func *, struct nvkm_device *,
                  int index, struct nvkm_ltc **);
@@ -31,6 +32,7 @@ void gf100_ltc_zbc_clear_color(struct nvkm_ltc *, int, const u32[4]);
 void gf100_ltc_zbc_clear_depth(struct nvkm_ltc *, int, const u32);
 void gf100_ltc_invalidate(struct nvkm_ltc *);
 void gf100_ltc_flush(struct nvkm_ltc *);
+extern const struct nvkm_bitfield gf100_ltc_lts_intr_name[];
 
 void gm107_ltc_intr(struct nvkm_ltc *);
 void gm107_ltc_cbc_clear(struct nvkm_ltc *, u32, u32);