summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Wang <kevinyang.wang@amd.com>2024-02-21 09:36:13 +0300
committerAlex Deucher <alexander.deucher@amd.com>2024-03-20 20:38:15 +0300
commitb93d759f540a3d3145b985bbbdbeb98b22862df0 (patch)
treea8912a1ec966e2cae2658a04e29fe06505014b37
parent865d3397630b806f2df156e2143cdfa416db1e01 (diff)
downloadlinux-b93d759f540a3d3145b985bbbdbeb98b22862df0.tar.xz
drm/amdgpu: add umc v12.0.0 deferred error support
add umc v12.0.0 deferred error support. Signed-off-by: Yang Wang <kevinyang.wang@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/umc_v12_0.c37
1 files changed, 13 insertions, 24 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c b/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
index e2e18ccbbc62..d29ea2fde025 100644
--- a/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
@@ -509,36 +509,25 @@ static int umc_v12_0_aca_bank_parser(struct aca_handle *handle, struct aca_bank
{
struct amdgpu_device *adev = handle->adev;
struct aca_bank_info info;
+ enum aca_error_type err_type;
u64 status;
int ret;
+ status = bank->regs[ACA_REG_IDX_STATUS];
+ if (umc_v12_0_is_deferred_error(adev, status))
+ err_type = ACA_ERROR_TYPE_DEFERRED;
+ else if (umc_v12_0_is_uncorrectable_error(adev, status))
+ err_type = ACA_ERROR_TYPE_UE;
+ else if (umc_v12_0_is_correctable_error(adev, status))
+ err_type = ACA_ERROR_TYPE_CE;
+ else
+ return 0;
+
ret = aca_bank_info_decode(bank, &info);
if (ret)
return ret;
- status = bank->regs[ACA_REG_IDX_STATUS];
- switch (type) {
- case ACA_SMU_TYPE_UE:
- if (umc_v12_0_is_uncorrectable_error(adev, status)) {
- ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_UE,
- 1ULL);
- if (ret)
- return ret;
- }
- break;
- case ACA_SMU_TYPE_CE:
- if (umc_v12_0_is_correctable_error(adev, status)) {
- ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_UE,
- 1ULL);
- if (ret)
- return ret;
- }
- break;
- default:
- return -EINVAL;
- }
-
- return 0;
+ return aca_error_cache_log_bank_error(handle, &info, err_type, 1ULL);
}
static const struct aca_bank_ops umc_v12_0_aca_bank_ops = {
@@ -547,7 +536,7 @@ static const struct aca_bank_ops umc_v12_0_aca_bank_ops = {
const struct aca_info umc_v12_0_aca_info = {
.hwip = ACA_HWIP_TYPE_UMC,
- .mask = ACA_ERROR_UE_MASK | ACA_ERROR_CE_MASK,
+ .mask = ACA_ERROR_UE_MASK | ACA_ERROR_CE_MASK | ACA_ERROR_DEFERRED_MASK,
.bank_ops = &umc_v12_0_aca_bank_ops,
};