drm/amdgpu: Include ACA error type in aca bank
authorHawking Zhang <Hawking.Zhang@amd.com>
Sun, 26 Jan 2025 08:32:57 +0000 (16:32 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 17 Feb 2025 19:09:29 +0000 (14:09 -0500)
ACA error types managed by driver a direct 1:1
correspondence with those managed by firmware.

To address this, for each ACA bank, include
both the ACA error type and the ACA SMU type.

This addition is useful for creating CPER records.

Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Yang Wang <keivnyang.wang@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@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 9d6345146495fc8510b40b565feba4a0c851e091..1a26b8ad14cb471fd8b374234386d45a84689b90 100644 (file)
@@ -168,7 +168,7 @@ static int aca_smu_get_valid_aca_banks(struct amdgpu_device *adev, enum aca_smu_
                if (ret)
                        return ret;
 
-               bank.type = type;
+               bank.smu_err_type = type;
 
                aca_smu_bank_dump(adev, i, count, &bank, qctx);
 
index f3289d2899130a90898569a1ef9042e1ffded0e6..3cd0115b02448410a1436f6c0cae766d7dc029e4 100644 (file)
@@ -108,13 +108,15 @@ enum aca_error_type {
 };
 
 enum aca_smu_type {
+       ACA_SMU_TYPE_INVALID = -1,
        ACA_SMU_TYPE_UE = 0,
        ACA_SMU_TYPE_CE,
        ACA_SMU_TYPE_COUNT,
 };
 
 struct aca_bank {
-       enum aca_smu_type type;
+       enum aca_error_type aca_err_type;
+       enum aca_smu_type smu_err_type;
        u64 regs[ACA_MAX_REGS_COUNT];
 };
 
index 74b4349e345a6bf1f2fc171b30d4bf224a2a66d9..c98b6b35cfdfdaae1b700da3933abea133a021ce 100644 (file)
@@ -1123,10 +1123,12 @@ static int xgmi_v6_4_0_aca_bank_parser(struct aca_handle *handle, struct aca_ban
                if (ext_error_code != 0 && ext_error_code != 9)
                        count = 0ULL;
 
+               bank->aca_err_type = ACA_ERROR_TYPE_UE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_UE, count);
                break;
        case ACA_SMU_TYPE_CE:
                count = ext_error_code == 6 ? count : 0ULL;
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_CE, count);
                break;
        default:
index f4635fc8a7ca48cd2fe5c3e48313712832a1642f..f5b1d2edf8054ff467e4fcd99fa066dc08a552e2 100644 (file)
@@ -891,10 +891,12 @@ 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_ERROR_TYPE_UE;
                ret = aca_error_cache_log_bank_error(handle, &info,
                                                     ACA_ERROR_TYPE_UE, 1ULL);
                break;
        case ACA_SMU_TYPE_CE:
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info,
                                                     ACA_ERROR_TYPE_CE, ACA_REG__MISC0__ERRCNT(misc0));
                break;
index 574083c7378e8fd341e278490fdf40dcf245a111..c67ba961de91a8be891ac466fce8d6905a192ffd 100644 (file)
@@ -1291,10 +1291,12 @@ static int jpeg_v4_0_3_aca_bank_parser(struct aca_handle *handle, struct aca_ban
        misc0 = bank->regs[ACA_REG_IDX_MISC0];
        switch (type) {
        case ACA_SMU_TYPE_UE:
+               bank->aca_err_type = ACA_ERROR_TYPE_UE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_UE,
                                                     1ULL);
                break;
        case ACA_SMU_TYPE_CE:
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_CE,
                                                     ACA_REG__MISC0__ERRCNT(misc0));
                break;
index ce013a715b8644317f3e2bd81abc59b43559b9a5..58d22f0d5a68fc5e0418587404beea0aeefabfe4 100644 (file)
@@ -746,10 +746,12 @@ static int mmhub_v1_8_aca_bank_parser(struct aca_handle *handle, struct aca_bank
        misc0 = bank->regs[ACA_REG_IDX_MISC0];
        switch (type) {
        case ACA_SMU_TYPE_UE:
+               bank->aca_err_type = ACA_ERROR_TYPE_UE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_UE,
                                                     1ULL);
                break;
        case ACA_SMU_TYPE_CE:
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_CE,
                                                     ACA_REG__MISC0__ERRCNT(misc0));
                break;
index 5e0066cd6c515e9e2f089c5ce6b79975a23f0ea8..3dc0ffa81484cacce42a6e5c220070bd9cda8671 100644 (file)
@@ -2392,10 +2392,12 @@ static int sdma_v4_4_2_aca_bank_parser(struct aca_handle *handle, struct aca_ban
        misc0 = bank->regs[ACA_REG_IDX_MISC0];
        switch (type) {
        case ACA_SMU_TYPE_UE:
+               bank->aca_err_type = ACA_ERROR_TYPE_UE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_UE,
                                                     1ULL);
                break;
        case ACA_SMU_TYPE_CE:
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_CE,
                                                     ACA_REG__MISC0__ERRCNT(misc0));
                break;
index a7b9c358a2d4c5101a815131c6f0387fbc1ea55e..74f57b2d30a524b949895645501852ca010a32d5 100644 (file)
@@ -415,6 +415,7 @@ static int umc_v12_0_aca_bank_parser(struct aca_handle *handle, struct aca_bank
                err_type = ACA_ERROR_TYPE_CE;
        else
                return 0;
+       bank->aca_err_type = err_type;
 
        ret = aca_bank_info_decode(bank, &info);
        if (ret)
index f1f07badb9b7fee0da252917c61409f63d4ad3f9..75211366f8f6684c1cd0b9b76472386cbe0e58be 100644 (file)
@@ -1925,10 +1925,12 @@ static int vcn_v4_0_3_aca_bank_parser(struct aca_handle *handle, struct aca_bank
        misc0 = bank->regs[ACA_REG_IDX_MISC0];
        switch (type) {
        case ACA_SMU_TYPE_UE:
+               bank->aca_err_type = ACA_ERROR_TYPE_UE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_UE,
                                                     1ULL);
                break;
        case ACA_SMU_TYPE_CE:
+               bank->aca_err_type = ACA_ERROR_TYPE_CE;
                ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_CE,
                                                     ACA_REG__MISC0__ERRCNT(misc0));
                break;