]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu: refine bad page loading when in the same nps mode
authorganglxie <ganglxie@amd.com>
Fri, 11 Jul 2025 08:20:12 +0000 (16:20 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Jul 2025 18:07:53 +0000 (14:07 -0400)
when loading bad page in the same nps mode, need to set the other fields
fields in eeprom records manually besides retired_page

Signed-off-by: ganglxie <ganglxie@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c

index c508697a34122edbe70264384d001c834b7260b2..a0a14370745e4ed410a01bc3a062b277dfd072b8 100644 (file)
@@ -2857,6 +2857,13 @@ static int __amdgpu_ras_convert_rec_array_from_rom(struct amdgpu_device *adev,
                        if (amdgpu_umc_pages_in_a_row(adev, err_data,
                                        bps[0].retired_page << AMDGPU_GPU_PAGE_SHIFT))
                                return -EINVAL;
+                       for (i = 0; i < adev->umc.retire_unit; i++) {
+                               err_data->err_addr[i].address = bps[0].address;
+                               err_data->err_addr[i].mem_channel = bps[0].mem_channel;
+                               err_data->err_addr[i].bank = bps[0].bank;
+                               err_data->err_addr[i].err_type = bps[0].err_type;
+                               err_data->err_addr[i].mcumc_id = bps[0].mcumc_id;
+                       }
                } else {
                        if (amdgpu_ras_mca2pa_by_idx(adev, &bps[0], err_data))
                                return -EINVAL;
@@ -2888,6 +2895,7 @@ static int __amdgpu_ras_convert_rec_from_rom(struct amdgpu_device *adev,
                                struct eeprom_table_record *bps, struct ras_err_data *err_data,
                                enum amdgpu_memory_partition nps)
 {
+       int i = 0;
        enum amdgpu_memory_partition save_nps;
 
        save_nps = (bps->retired_page >> UMC_NPS_SHIFT) & UMC_NPS_MASK;
@@ -2897,6 +2905,13 @@ static int __amdgpu_ras_convert_rec_from_rom(struct amdgpu_device *adev,
                if (amdgpu_umc_pages_in_a_row(adev, err_data,
                                bps->retired_page << AMDGPU_GPU_PAGE_SHIFT))
                        return -EINVAL;
+               for (i = 0; i < adev->umc.retire_unit; i++) {
+                       err_data->err_addr[i].address = bps->address;
+                       err_data->err_addr[i].mem_channel = bps->mem_channel;
+                       err_data->err_addr[i].bank = bps->bank;
+                       err_data->err_addr[i].err_type = bps->err_type;
+                       err_data->err_addr[i].mcumc_id = bps->mcumc_id;
+               }
        } else {
                if (bps->address) {
                        if (amdgpu_ras_mca2pa_by_idx(adev, bps, err_data))