Useful output on a FIFO error interrupt.
authorBen Skeggs <darktama@iinet.net.au>
Tue, 17 Oct 2006 12:44:05 +0000 (23:44 +1100)
committerBen Skeggs <darktama@iinet.net.au>
Tue, 17 Oct 2006 12:44:05 +0000 (23:44 +1100)
shared-core/nouveau_irq.c
shared-core/nouveau_object.c
shared-core/nouveau_reg.h

index 086c064..af6109e 100644 (file)
@@ -146,8 +146,25 @@ static void nouveau_fifo_irq_handler(drm_device_t *dev)
        DRM_DEBUG("NV: PFIFO interrupt! Channel=%d, INTSTAT=0x%08x/MODE=0x%08x/PEND=0x%08x\n", channel, status, chmode, chstat);
 
        if (status & NV_PFIFO_INTR_CACHE_ERROR) {
+               uint32_t c1get, c1method, c1data;
+
                DRM_ERROR("NV: PFIFO error interrupt\n");
 
+               c1get = NV_READ(NV_PFIFO_CACH1_GET) >> 2;
+               if (dev_priv->card_type < NV_40) {
+                       /* Untested, so it may not work.. */
+                       c1method = NV_READ(NV_PFIFO_CACH1_METHOD(c1get));
+                       c1data   = NV_READ(NV_PFIFO_CACH1_DATA(c1get));
+               } else {
+                       c1method = NV_READ(NV40_PFIFO_CACH1_METHOD(c1get));
+                       c1data   = NV_READ(NV40_PFIFO_CACH1_DATA(c1get));
+               }
+
+               DRM_ERROR("NV: Channel %d/%d - Method 0x%04x, Data 0x%08x\n",
+                               channel, (c1method >> 13) & 3,
+                               c1method & 0x1ffc, c1data
+                        );
+
                status &= ~NV_PFIFO_INTR_CACHE_ERROR;
                NV_WRITE(NV_PFIFO_INTSTAT, NV_PFIFO_INTR_CACHE_ERROR);
        }
index 18c5076..78a4b78 100644 (file)
@@ -290,7 +290,6 @@ static void nouveau_object_instance_free(drm_device_t *dev,
 void nouveau_hash_table_init(drm_device_t* dev)
 {
        drm_nouveau_private_t *dev_priv=dev->dev_private;
-       int ht_start, ht_end;
        int i;
 
        dev_priv->objs.ht_bits = 9;
index 7a0f429..b393e87 100644 (file)
 #define NV_PFIFO_CACH1_PUL0                                0x00003250
 #define NV_PFIFO_CACH1_PUL1                                0x00003254
 #define NV_PFIFO_CACH1_HASH                                0x00003258
+#define NV_PFIFO_CACH1_GET                                 0x00003270
 #define NV_PFIFO_CACH1_ENG                                 0x00003280
+#define NV_PFIFO_CACH1_METHOD(i)                   (0x00003800+(i*8))
+#define NV_PFIFO_CACH1_DATA(i)                     (0x00003804+(i*8))
+#define NV40_PFIFO_CACH1_METHOD(i)                 (0x00090000+(i*8))
+#define NV40_PFIFO_CACH1_DATA(i)                   (0x00090004+(i*8))
 
 #define NV_CRTC0_INTSTAT                                   0x00600100
 #define NV_CRTC0_INTEN                                     0x00600140