summaryrefslogtreecommitdiff
path: root/shared-core/nouveau_irq.c
diff options
context:
space:
mode:
authorBen Skeggs <darktama@iinet.net.au>2006-10-17 23:44:05 +1100
committerBen Skeggs <darktama@iinet.net.au>2006-10-17 23:44:05 +1100
commit55de3f763f0de66b99f1afde9872f0072a84a9e3 (patch)
tree87f062e3086bb21d19e31fe55ff1a5f1dedc3a83 /shared-core/nouveau_irq.c
parent07059f427819755e13b051e1422c6e8671c70f92 (diff)
Useful output on a FIFO error interrupt.
Diffstat (limited to 'shared-core/nouveau_irq.c')
-rw-r--r--shared-core/nouveau_irq.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/shared-core/nouveau_irq.c b/shared-core/nouveau_irq.c
index 086c064c..af6109e9 100644
--- a/shared-core/nouveau_irq.c
+++ b/shared-core/nouveau_irq.c
@@ -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);
}