diff options
author | Christian König <christian.koenig@amd.com> | 2015-09-10 09:00:39 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-10-14 16:16:39 -0400 |
commit | ce0c6bcda6d0d9fc9df65dccb46a68b79ba6f018 (patch) | |
tree | 73105180178d171b457051b66df63277ba70ba0d /drivers/gpu/drm/amd | |
parent | 39ff8449c5680466f568be57fbf79845ff5529ab (diff) |
drm/amdgpu: only print meaningful VM faults
Port of radeon commit 9b7d786b900baf7c0d1a7e211570aef1cb27590f.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c index 774528ab8704..fab5471d25d7 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | |||
@@ -1262,6 +1262,12 @@ static int gmc_v7_0_process_interrupt(struct amdgpu_device *adev, | |||
1262 | addr = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_ADDR); | 1262 | addr = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_ADDR); |
1263 | status = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_STATUS); | 1263 | status = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_STATUS); |
1264 | mc_client = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_MCCLIENT); | 1264 | mc_client = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_MCCLIENT); |
1265 | /* reset addr and status */ | ||
1266 | WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1); | ||
1267 | |||
1268 | if (!addr && !status) | ||
1269 | return 0; | ||
1270 | |||
1265 | dev_err(adev->dev, "GPU fault detected: %d 0x%08x\n", | 1271 | dev_err(adev->dev, "GPU fault detected: %d 0x%08x\n", |
1266 | entry->src_id, entry->src_data); | 1272 | entry->src_id, entry->src_data); |
1267 | dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n", | 1273 | dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n", |
@@ -1269,8 +1275,6 @@ static int gmc_v7_0_process_interrupt(struct amdgpu_device *adev, | |||
1269 | dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", | 1275 | dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", |
1270 | status); | 1276 | status); |
1271 | gmc_v7_0_vm_decode_fault(adev, status, addr, mc_client); | 1277 | gmc_v7_0_vm_decode_fault(adev, status, addr, mc_client); |
1272 | /* reset addr and status */ | ||
1273 | WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1); | ||
1274 | 1278 | ||
1275 | return 0; | 1279 | return 0; |
1276 | } | 1280 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c index 9a07742620d0..7bc9e9fcf3d2 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | |||
@@ -1262,6 +1262,12 @@ static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev, | |||
1262 | addr = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_ADDR); | 1262 | addr = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_ADDR); |
1263 | status = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_STATUS); | 1263 | status = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_STATUS); |
1264 | mc_client = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_MCCLIENT); | 1264 | mc_client = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_MCCLIENT); |
1265 | /* reset addr and status */ | ||
1266 | WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1); | ||
1267 | |||
1268 | if (!addr && !status) | ||
1269 | return 0; | ||
1270 | |||
1265 | dev_err(adev->dev, "GPU fault detected: %d 0x%08x\n", | 1271 | dev_err(adev->dev, "GPU fault detected: %d 0x%08x\n", |
1266 | entry->src_id, entry->src_data); | 1272 | entry->src_id, entry->src_data); |
1267 | dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n", | 1273 | dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_ADDR 0x%08X\n", |
@@ -1269,8 +1275,6 @@ static int gmc_v8_0_process_interrupt(struct amdgpu_device *adev, | |||
1269 | dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", | 1275 | dev_err(adev->dev, " VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x%08X\n", |
1270 | status); | 1276 | status); |
1271 | gmc_v8_0_vm_decode_fault(adev, status, addr, mc_client); | 1277 | gmc_v8_0_vm_decode_fault(adev, status, addr, mc_client); |
1272 | /* reset addr and status */ | ||
1273 | WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1); | ||
1274 | 1278 | ||
1275 | return 0; | 1279 | return 0; |
1276 | } | 1280 | } |