]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu: Modify the count method of defer error
authorCe Sun <cesun102@amd.com>
Tue, 6 May 2025 12:17:33 +0000 (20:17 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 13 May 2025 13:35:12 +0000 (09:35 -0400)
The number of newly added de counts and the number of
newly added error addresses remain consistent

Signed-off-by: Ce Sun <cesun102@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_umc.c
drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h
drivers/gpu/drm/amd/amdgpu/umc_v12_0.c

index 0a1ef95b28668c8a7f304269f2fbf488b4b4e3cd..8c6e55b5b967931a2e7247a2e39d4b5ff84026af 100644 (file)
@@ -529,6 +529,7 @@ int amdgpu_umc_lookup_bad_pages_in_a_row(struct amdgpu_device *adev,
                pfns[i] = err_data.err_addr[i].retired_page;
        }
        ret = i;
+       adev->umc.err_addr_cnt = err_data.err_addr_cnt;
 
 out:
        kfree(err_data.err_addr);
index 78a8b8654573b2db4af7c18d1d16b6d613368bdf..29ce6b1d214a6c6b44f6a4a76aaa5c77692bcfd5 100644 (file)
@@ -145,6 +145,8 @@ struct amdgpu_umc {
        unsigned long active_mask;
 
        struct amdgpu_umc_flip_bits flip_bits;
+
+       unsigned long err_addr_cnt;
 };
 
 int amdgpu_umc_ras_sw_init(struct amdgpu_device *adev);
index 410ba014ed929fcfe5651bf01d605ae28166f9ca..e44422509c048f173d676cad1f48354c445e9744 100644 (file)
@@ -482,8 +482,12 @@ static int umc_v12_0_aca_bank_parser(struct aca_handle *handle, struct aca_bank
                bank->regs[ACA_REG_IDX_ADDR]);
 
        ext_error_code = ACA_REG__STATUS__ERRORCODEEXT(status);
-       count = ext_error_code == 0 ?
-               ACA_REG__MISC0__ERRCNT(bank->regs[ACA_REG_IDX_MISC0]) : 1ULL;
+       if (umc_v12_0_is_deferred_error(adev, status))
+               count = ext_error_code == 0 ?
+                       adev->umc.err_addr_cnt / adev->umc.retire_unit : 1ULL;
+       else
+               count = ext_error_code == 0 ?
+                       ACA_REG__MISC0__ERRCNT(bank->regs[ACA_REG_IDX_MISC0]) : 1ULL;
 
        return aca_error_cache_log_bank_error(handle, &info, err_type, count);
 }