|
@@ -2426,9 +2426,20 @@ static int si_pcie_gart_enable(struct radeon_device *rdev)
|
|
|
/* enable context1-15 */
|
|
|
WREG32(VM_CONTEXT1_PROTECTION_FAULT_DEFAULT_ADDR,
|
|
|
(u32)(rdev->dummy_page.addr >> 12));
|
|
|
- WREG32(VM_CONTEXT1_CNTL2, 0);
|
|
|
+ WREG32(VM_CONTEXT1_CNTL2, 4);
|
|
|
WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) |
|
|
|
- RANGE_PROTECTION_FAULT_ENABLE_DEFAULT);
|
|
|
+ RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT |
|
|
|
+ RANGE_PROTECTION_FAULT_ENABLE_DEFAULT |
|
|
|
+ DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT |
|
|
|
+ DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT |
|
|
|
+ PDE0_PROTECTION_FAULT_ENABLE_INTERRUPT |
|
|
|
+ PDE0_PROTECTION_FAULT_ENABLE_DEFAULT |
|
|
|
+ VALID_PROTECTION_FAULT_ENABLE_INTERRUPT |
|
|
|
+ VALID_PROTECTION_FAULT_ENABLE_DEFAULT |
|
|
|
+ READ_PROTECTION_FAULT_ENABLE_INTERRUPT |
|
|
|
+ READ_PROTECTION_FAULT_ENABLE_DEFAULT |
|
|
|
+ WRITE_PROTECTION_FAULT_ENABLE_INTERRUPT |
|
|
|
+ WRITE_PROTECTION_FAULT_ENABLE_DEFAULT);
|
|
|
|
|
|
si_pcie_gart_tlb_flush(rdev);
|
|
|
DRM_INFO("PCIE GART of %uM enabled (table at 0x%016llX).\n",
|
|
@@ -3684,6 +3695,16 @@ restart_ih:
|
|
|
break;
|
|
|
}
|
|
|
break;
|
|
|
+ case 146:
|
|
|
+ case 147:
|
|
|
+ dev_err(rdev->dev, "GPU fault detected: %d 0x%08x\n", src_id, src_data);
|
|
|
+ dev_err(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n",
|
|
|
+ RREG32(VM_CONTEXT1_PROTECTION_FAULT_ADDR));
|
|
|
+ dev_err(rdev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n",
|
|
|
+ RREG32(VM_CONTEXT1_PROTECTION_FAULT_STATUS));
|
|
|
+ /* reset addr and status */
|
|
|
+ WREG32_P(VM_CONTEXT1_CNTL2, 1, ~1);
|
|
|
+ break;
|
|
|
case 176: /* RINGID0 CP_INT */
|
|
|
radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX);
|
|
|
break;
|