Rev 5078 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5078 | Rev 5179 | ||
---|---|---|---|
Line 4747... | Line 4747... | ||
4747 | wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]); |
4747 | wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]); |
4748 | else |
4748 | else |
4749 | wptr = RREG32(IH_RB_WPTR); |
4749 | wptr = RREG32(IH_RB_WPTR); |
Line 4750... | Line 4750... | ||
4750 | 4750 | ||
- | 4751 | if (wptr & RB_OVERFLOW) { |
|
4751 | if (wptr & RB_OVERFLOW) { |
4752 | wptr &= ~RB_OVERFLOW; |
4752 | /* When a ring buffer overflow happen start parsing interrupt |
4753 | /* When a ring buffer overflow happen start parsing interrupt |
4753 | * from the last not overwritten vector (wptr + 16). Hopefully |
4754 | * from the last not overwritten vector (wptr + 16). Hopefully |
4754 | * this should allow us to catchup. |
4755 | * this should allow us to catchup. |
4755 | */ |
4756 | */ |
4756 | dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, %d, %d)\n", |
4757 | dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n", |
4757 | wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask); |
4758 | wptr, rdev->ih.rptr, (wptr + 16) & rdev->ih.ptr_mask); |
4758 | rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask; |
4759 | rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask; |
4759 | tmp = RREG32(IH_RB_CNTL); |
4760 | tmp = RREG32(IH_RB_CNTL); |
4760 | tmp |= IH_WPTR_OVERFLOW_CLEAR; |
4761 | tmp |= IH_WPTR_OVERFLOW_CLEAR; |
4761 | WREG32(IH_RB_CNTL, tmp); |
- | |
4762 | wptr &= ~RB_OVERFLOW; |
4762 | WREG32(IH_RB_CNTL, tmp); |
4763 | } |
4763 | } |
4764 | return (wptr & rdev->ih.ptr_mask); |
4764 | return (wptr & rdev->ih.ptr_mask); |
Line 4765... | Line 4765... | ||
4765 | } |
4765 | } |