]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amdgpu: Parse all deferred errors with UMC aca handle
authorXiang Liu <xiang.liu@amd.com>
Mon, 24 Mar 2025 09:19:54 +0000 (17:19 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 26 Mar 2025 21:44:41 +0000 (17:44 -0400)
We should only increase the deferred errors in UMC block.

Signed-off-by: Xiang Liu <xiang.liu@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
drivers/gpu/drm/amd/amdgpu/amdgpu_aca.h
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.c
drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c

index dc47f5fd4ea15ee6e5de59126ba33b7e68071c91..b4ad163f42a76f97d8f2b095410ed049943c99ca 100644 (file)
@@ -195,6 +195,10 @@ static bool aca_bank_is_valid(struct aca_handle *handle, struct aca_bank *bank,
 {
        const struct aca_bank_ops *bank_ops = handle->bank_ops;
 
+       /* Parse all deferred errors with UMC aca handle */
+       if (ACA_BANK_ERR_IS_DEFFERED(bank))
+               return handle->hwip == ACA_HWIP_TYPE_UMC;
+
        if (!aca_bank_hwip_is_matched(bank, handle->hwip))
                return false;
 
index 6b180f1b33fda9f84e818dcbe30d7ca537552a0c..38c88897e1ecb755912d0e26b0f85ae5a31cc7c6 100644 (file)
@@ -80,14 +80,6 @@ struct ras_query_context;
        (ACA_REG__STATUS__POISON((bank)->regs[ACA_REG_IDX_STATUS]) || \
         ACA_REG__STATUS__DEFERRED((bank)->regs[ACA_REG_IDX_STATUS]))
 
-#define ACA_BANK_ERR_CE_DE_DECODE(bank)                             \
-       (ACA_BANK_ERR_IS_DEFFERED(bank) ? ACA_ERROR_TYPE_DEFERRED : \
-                                         ACA_ERROR_TYPE_CE)
-
-#define ACA_BANK_ERR_UE_DE_DECODE(bank)                             \
-       (ACA_BANK_ERR_IS_DEFFERED(bank) ? ACA_ERROR_TYPE_DEFERRED : \
-                                         ACA_ERROR_TYPE_UE)
-
 enum aca_reg_idx {
        ACA_REG_IDX_CTL                 = 0,
        ACA_REG_IDX_STATUS              = 1,
index 6029a799074d587b5cee3d35c552814087b54d63..477424472bbee90b478a333824c6923958a34b25 100644 (file)
@@ -1172,7 +1172,7 @@ static int xgmi_v6_4_0_aca_bank_parser(struct aca_handle *handle, struct aca_ban
                break;
        case ACA_SMU_TYPE_CE:
                count = ext_error_code == 6 ? count : 0ULL;
-               bank->aca_err_type = ACA_BANK_ERR_CE_DE_DECODE(bank);
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, bank->aca_err_type, count);
                break;
        default:
index 3caac4a1564aa6a7d9b36c78c055130a9b08e33a..780563a97d2066ffbbf87541129131b31785987c 100644 (file)
@@ -867,15 +867,13 @@ static int gfx_v9_4_3_aca_bank_parser(struct aca_handle *handle,
 
        switch (type) {
        case ACA_SMU_TYPE_UE:
-               bank->aca_err_type = ACA_BANK_ERR_UE_DE_DECODE(bank);
+               bank->aca_err_type = ACA_ERROR_TYPE_UE;
                ret = aca_error_cache_log_bank_error(handle, &info, bank->aca_err_type, 1ULL);
                break;
        case ACA_SMU_TYPE_CE:
-               bank->aca_err_type = ACA_BANK_ERR_CE_DE_DECODE(bank);
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, bank->aca_err_type,
-                       (bank->aca_err_type == ACA_ERROR_TYPE_CE) ?
-                               ACA_REG__MISC0__ERRCNT(misc0) :
-                               1);
+                                                    ACA_REG__MISC0__ERRCNT(misc0));
                break;
        default:
                return -EINVAL;
index 5598a35f72afdf5122585f31f0b3f70edc5add20..a8ccae361ec78c30cf6ba91c529c8edc5d4f4cd8 100644 (file)
@@ -1328,7 +1328,7 @@ static int jpeg_v4_0_3_aca_bank_parser(struct aca_handle *handle, struct aca_ban
                                                     1ULL);
                break;
        case ACA_SMU_TYPE_CE:
-               bank->aca_err_type = ACA_BANK_ERR_CE_DE_DECODE(bank);
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, bank->aca_err_type,
                                                     ACA_REG__MISC0__ERRCNT(misc0));
                break;
index a54e7b92929599bb98cd38a0c71bdddcd01eb341..84cde1239ee458620f58a943fe34efdef2edbbbb 100644 (file)
@@ -751,7 +751,7 @@ static int mmhub_v1_8_aca_bank_parser(struct aca_handle *handle, struct aca_bank
                                                     1ULL);
                break;
        case ACA_SMU_TYPE_CE:
-               bank->aca_err_type = ACA_BANK_ERR_CE_DE_DECODE(bank);
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, bank->aca_err_type,
                                                     ACA_REG__MISC0__ERRCNT(misc0));
                break;
index dc94d58d33a6bfd333f2edc7d13874fecf5ea013..11f9c07f1e8d2db2185ced8d7a479adb31b94eab 100644 (file)
@@ -2595,7 +2595,7 @@ static int sdma_v4_4_2_aca_bank_parser(struct aca_handle *handle, struct aca_ban
                                                     1ULL);
                break;
        case ACA_SMU_TYPE_CE:
-               bank->aca_err_type = ACA_BANK_ERR_CE_DE_DECODE(bank);
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, bank->aca_err_type,
                                                     ACA_REG__MISC0__ERRCNT(misc0));
                break;
index 74f57b2d30a524b949895645501852ca010a32d5..0e404c0749753e67acc43189293d8da8dec6af05 100644 (file)
@@ -85,7 +85,8 @@ bool umc_v12_0_is_deferred_error(struct amdgpu_device *adev, uint64_t mc_umc_sta
 
        return (amdgpu_ras_is_poison_mode_supported(adev) &&
                (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, Val) == 1) &&
-               (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, Deferred) == 1));
+               ((REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, Deferred) == 1) ||
+               (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, Poison) == 1)));
 }
 
 bool umc_v12_0_is_uncorrectable_error(struct amdgpu_device *adev, uint64_t mc_umc_status)
index 7446ecc55714d87910581b33af440289f4aeb49b..3e176b4b7c69dd31b7d047aab43d5c4fb020fdb0 100644 (file)
@@ -1965,7 +1965,7 @@ static int vcn_v4_0_3_aca_bank_parser(struct aca_handle *handle, struct aca_bank
                                                     1ULL);
                break;
        case ACA_SMU_TYPE_CE:
-               bank->aca_err_type = ACA_BANK_ERR_CE_DE_DECODE(bank);
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, bank->aca_err_type,
                                                     ACA_REG__MISC0__ERRCNT(misc0));
                break;