]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: Reset RAS table if header is invalid
authorLijo Lazar <lijo.lazar@amd.com>
Tue, 8 Apr 2025 03:25:33 +0000 (08:55 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 8 Apr 2025 20:48:14 +0000 (16:48 -0400)
If a valid header is not found during RAS eeprom init, consider it as
new and reset RAS table info.

Signed-off-by: Lijo Lazar <lijo.lazar@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_ras_eeprom.c

index e979a6086178c73c0d91b28bf11292faf057e3ea..c985d58fdd7ddc452151f9c74c80c5c6307d7989 100644 (file)
@@ -1392,6 +1392,12 @@ int amdgpu_ras_eeprom_init(struct amdgpu_ras_eeprom_control *control)
 
        __decode_table_header_from_buf(hdr, buf);
 
+       if (hdr->header != RAS_TABLE_HDR_VAL &&
+           hdr->header != RAS_TABLE_HDR_BAD) {
+               dev_info(adev->dev, "Creating a new EEPROM table");
+               return amdgpu_ras_eeprom_reset_table(control);
+       }
+
        switch (hdr->version) {
        case RAS_TABLE_VER_V2_1:
        case RAS_TABLE_VER_V3:
@@ -1429,7 +1435,7 @@ int amdgpu_ras_eeprom_check(struct amdgpu_ras_eeprom_control *control)
        struct amdgpu_device *adev = to_amdgpu_device(control);
        struct amdgpu_ras_eeprom_table_header *hdr = &control->tbl_hdr;
        struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
-       int res;
+       int res = 0;
 
        if (!__is_ras_eeprom_supported(adev))
                return 0;
@@ -1510,10 +1516,6 @@ int amdgpu_ras_eeprom_check(struct amdgpu_ras_eeprom_control *control)
                                         "User defined threshold is set, runtime service will be halt when threshold is reached\n");
                        }
                }
-       } else {
-               DRM_INFO("Creating a new EEPROM table");
-
-               res = amdgpu_ras_eeprom_reset_table(control);
        }
 
        return res < 0 ? res : 0;