OSDN Git Service

nouveau/nv40: Dump extra info on ucode state if ctx switch fails.
authorBen Skeggs <skeggsb@gmail.com>
Wed, 22 Aug 2007 03:17:19 +0000 (13:17 +1000)
committerBen Skeggs <skeggsb@gmail.com>
Wed, 22 Aug 2007 03:19:21 +0000 (13:19 +1000)
shared-core/nouveau_reg.h
shared-core/nv40_graph.c

index 6561462..1023e75 100644 (file)
 #define NV10_PGRAPH_CTX_CACHE5                             0x004001E0
 #define NV40_PGRAPH_CTXCTL_0304                            0x00400304
 #define NV40_PGRAPH_CTXCTL_0304_XFER_CTX                   0x00000001
+#define NV40_PGRAPH_CTXCTL_UCODE_STAT                      0x00400308
+#define NV40_PGRAPH_CTXCTL_UCODE_STAT_IP_MASK              0xff000000
+#define NV40_PGRAPH_CTXCTL_UCODE_STAT_IP_SHIFT                     24
+#define NV40_PGRAPH_CTXCTL_UCODE_STAT_OP_MASK              0x00ffffff
 #define NV40_PGRAPH_CTXCTL_0310                            0x00400310
 #define NV40_PGRAPH_CTXCTL_0310_XFER_SAVE                  0x00000020
 #define NV40_PGRAPH_CTXCTL_0310_XFER_LOAD                  0x00000040
index 8882e62..25ee5c7 100644 (file)
@@ -1310,7 +1310,11 @@ nv40_graph_transfer_context(struct drm_device *dev, uint32_t inst, int save)
        NV_WRITE(NV20_PGRAPH_CHANNEL_CTX_POINTER, old_cp);
 
        if (i == tv) {
-               DRM_ERROR("failed: inst=0x%08x save=%d\n", inst, save);
+               uint32_t ucstat = NV_READ(NV40_PGRAPH_CTXCTL_UCODE_STAT);
+               DRM_ERROR("Failed: Instance=0x%08x Save=%d\n", inst, save);
+               DRM_ERROR("IP: 0x%02x, Opcode: 0x%08x\n",
+                         ucstat >> NV40_PGRAPH_CTXCTL_UCODE_STAT_IP_SHIFT,
+                         ucstat  & NV40_PGRAPH_CTXCTL_UCODE_STAT_OP_MASK);
                DRM_ERROR("0x40030C = 0x%08x\n",
                          NV_READ(NV40_PGRAPH_CTXCTL_030C));
                return -EBUSY;