Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: add function to clear MMEA error status for aldebaran

For aldebaran, hardware will not clear error status automatically when
reading error status register, insteadly driver should set clear bit of
the error status register explicitly to clear error status.

Signed-off-by: Dennis Li <Dennis.Li@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Dennis Li and committed by
Alex Deucher
7780f503 4f64f1c8

+24
+1
drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.h
··· 28 28 void *ras_error_status); 29 29 void (*query_ras_error_status)(struct amdgpu_device *adev); 30 30 void (*reset_ras_error_count)(struct amdgpu_device *adev); 31 + void (*reset_ras_error_status)(struct amdgpu_device *adev); 31 32 }; 32 33 33 34 struct amdgpu_mmhub_funcs {
+4
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
··· 938 938 if (adev->mmhub.ras_funcs && 939 939 adev->mmhub.ras_funcs->reset_ras_error_count) 940 940 adev->mmhub.ras_funcs->reset_ras_error_count(adev); 941 + 942 + if (adev->mmhub.ras_funcs && 943 + adev->mmhub.ras_funcs->reset_ras_error_status) 944 + adev->mmhub.ras_funcs->reset_ras_error_status(adev); 941 945 break; 942 946 case AMDGPU_RAS_BLOCK__SDMA: 943 947 if (adev->sdma.funcs->reset_ras_error_count)
+19
drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c
··· 1315 1315 } 1316 1316 } 1317 1317 1318 + static void mmhub_v1_7_reset_ras_error_status(struct amdgpu_device *adev) 1319 + { 1320 + int i; 1321 + uint32_t reg_value; 1322 + 1323 + if (!amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__MMHUB)) 1324 + return; 1325 + 1326 + for (i = 0; i < ARRAY_SIZE(mmhub_v1_7_ea_err_status_regs); i++) { 1327 + reg_value = RREG32(SOC15_REG_ENTRY_OFFSET( 1328 + mmhub_v1_7_ea_err_status_regs[i])); 1329 + reg_value = REG_SET_FIELD(reg_value, MMEA0_ERR_STATUS, 1330 + CLEAR_ERROR_STATUS, 0x01); 1331 + WREG32(SOC15_REG_ENTRY_OFFSET(mmhub_v1_7_ea_err_status_regs[i]), 1332 + reg_value); 1333 + } 1334 + } 1335 + 1318 1336 const struct amdgpu_mmhub_ras_funcs mmhub_v1_7_ras_funcs = { 1319 1337 .ras_late_init = amdgpu_mmhub_ras_late_init, 1320 1338 .ras_fini = amdgpu_mmhub_ras_fini, 1321 1339 .query_ras_error_count = mmhub_v1_7_query_ras_error_count, 1322 1340 .reset_ras_error_count = mmhub_v1_7_reset_ras_error_count, 1323 1341 .query_ras_error_status = mmhub_v1_7_query_ras_error_status, 1342 + .reset_ras_error_status = mmhub_v1_7_reset_ras_error_status, 1324 1343 }; 1325 1344 1326 1345 const struct amdgpu_mmhub_funcs mmhub_v1_7_funcs = {