diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau')
-rw-r--r-- | drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c | 36 |
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); |