drm/nouveau: decode PFIFO DMA_PUSHER error codes
authorMarcin Slusarz <marcin.slusarz@gmail.com>
Sun, 13 Feb 2011 19:46:40 +0000 (20:46 +0100)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 24 Feb 2011 20:45:26 +0000 (06:45 +1000)
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nv04_fifo.c

index f89d104698df55578bf91d699ab25cb99c10f21a..dfa600c46186606f1b6230c948f82c61306cd1a5 100644 (file)
@@ -379,6 +379,15 @@ out:
        return handled;
 }
 
+static const char *nv_dma_state_err(u32 state)
+{
+       static const char * const desc[] = {
+               "NONE", "CALL_SUBR_ACTIVE", "INVALID_MTHD", "RET_SUBR_INACTIVE",
+               "INVALID_CMD", "IB_EMPTY"/* NV50+ */, "MEM_FAULT", "UNK"
+       };
+       return desc[(state >> 29) & 0x7];
+}
+
 void
 nv04_fifo_isr(struct drm_device *dev)
 {
@@ -460,9 +469,10 @@ nv04_fifo_isr(struct drm_device *dev)
                                if (nouveau_ratelimit())
                                        NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%02x%08x "
                                             "Put 0x%02x%08x IbGet 0x%08x IbPut 0x%08x "
-                                            "State 0x%08x Push 0x%08x\n",
+                                            "State 0x%08x (err: %s) Push 0x%08x\n",
                                                chid, ho_get, dma_get, ho_put,
                                                dma_put, ib_get, ib_put, state,
+                                               nv_dma_state_err(state),
                                                push);
 
                                /* METHOD_COUNT, in DMA_STATE on earlier chipsets */
@@ -476,8 +486,9 @@ nv04_fifo_isr(struct drm_device *dev)
                                }
                        } else {
                                NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%08x "
-                                            "Put 0x%08x State 0x%08x Push 0x%08x\n",
-                                       chid, dma_get, dma_put, state, push);
+                                            "Put 0x%08x State 0x%08x (err: %s) Push 0x%08x\n",
+                                       chid, dma_get, dma_put, state,
+                                       nv_dma_state_err(state), push);
 
                                if (dma_get != dma_put)
                                        nv_wr32(dev, 0x003244, dma_put);