aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/nouveau')
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
index 1580aae7ef63..2a9919bbf77c 100644
--- a/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
@@ -517,12 +517,34 @@ nvc0_fifo_intr(struct nouveau_subdev *subdev)
517 u32 mask = nv_rd32(priv, 0x002140); 517 u32 mask = nv_rd32(priv, 0x002140);
518 u32 stat = nv_rd32(priv, 0x002100) & mask; 518 u32 stat = nv_rd32(priv, 0x002100) & mask;
519 519
520 if (stat & 0x00000001) {
521 u32 intr = nv_rd32(priv, 0x00252c);
522 nv_warn(priv, "INTR 0x00000001: 0x%08x\n", intr);
523 nv_wr32(priv, 0x002100, 0x00000001);
524 stat &= ~0x00000001;
525 }
526
520 if (stat & 0x00000100) { 527 if (stat & 0x00000100) {
521 nv_warn(priv, "unknown status 0x00000100\n"); 528 u32 intr = nv_rd32(priv, 0x00254c);
529 nv_warn(priv, "INTR 0x00000100: 0x%08x\n", intr);
522 nv_wr32(priv, 0x002100, 0x00000100); 530 nv_wr32(priv, 0x002100, 0x00000100);
523 stat &= ~0x00000100; 531 stat &= ~0x00000100;
524 } 532 }
525 533
534 if (stat & 0x00010000) {
535 u32 intr = nv_rd32(priv, 0x00256c);
536 nv_warn(priv, "INTR 0x00010000: 0x%08x\n", intr);
537 nv_wr32(priv, 0x002100, 0x00010000);
538 stat &= ~0x00010000;
539 }
540
541 if (stat & 0x01000000) {
542 u32 intr = nv_rd32(priv, 0x00258c);
543 nv_warn(priv, "INTR 0x01000000: 0x%08x\n", intr);
544 nv_wr32(priv, 0x002100, 0x01000000);
545 stat &= ~0x01000000;
546 }
547
526 if (stat & 0x10000000) { 548 if (stat & 0x10000000) {
527 u32 units = nv_rd32(priv, 0x00259c); 549 u32 units = nv_rd32(priv, 0x00259c);
528 u32 u = units; 550 u32 u = units;
@@ -552,11 +574,19 @@ nvc0_fifo_intr(struct nouveau_subdev *subdev)
552 } 574 }
553 575
554 if (stat & 0x40000000) { 576 if (stat & 0x40000000) {
555 nv_warn(priv, "unknown status 0x40000000\n"); 577 u32 intr0 = nv_rd32(priv, 0x0025a4);
556 nv_mask(priv, 0x002a00, 0x00000000, 0x00000000); 578 u32 intr1 = nv_mask(priv, 0x002a00, 0x00000000, 0x00000);
579 nv_debug(priv, "INTR 0x40000000: 0x%08x 0x%08x\n",
580 intr0, intr1);
557 stat &= ~0x40000000; 581 stat &= ~0x40000000;
558 } 582 }
559 583
584 if (stat & 0x80000000) {
585 u32 intr = nv_mask(priv, 0x0025a8, 0x00000000, 0x00000000);
586 nv_warn(priv, "INTR 0x80000000: 0x%08x\n", intr);
587 stat &= ~0x80000000;
588 }
589
560 if (stat) { 590 if (stat) {
561 nv_fatal(priv, "unhandled status 0x%08x\n", stat); 591 nv_fatal(priv, "unhandled status 0x%08x\n", stat);
562 nv_wr32(priv, 0x002100, stat); 592 nv_wr32(priv, 0x002100, stat);