]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: add function to check if pmfw eeprom is supported
authorGangliang Xie <ganglxie@amd.com>
Mon, 15 Sep 2025 04:55:36 +0000 (12:55 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 4 Nov 2025 16:53:58 +0000 (11:53 -0500)
add function to check if pmfw is supported, skip eeprom
check and recover when pmfw eeprom is supported

Signed-off-by: Gangliang Xie <ganglxie@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.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.h

index 0984928db042450878d1bb23ea6cb4cd9c6f9bbc..37999b3679573bd5cb104d91af2377582e4962c9 100644 (file)
@@ -3767,6 +3767,8 @@ int amdgpu_ras_init_badpage_info(struct amdgpu_device *adev)
                return 0;
 
        control = &con->eeprom_control;
+       con->ras_smu_drv = amdgpu_dpm_get_ras_smu_driver(adev);
+
        ret = amdgpu_ras_eeprom_init(control);
        control->is_eeprom_valid = !ret;
 
index 011fa474808406559cb32fd371e6cb0711cba2fd..89d0def82797d938d1d0a024a15709031fbfbb8f 100644 (file)
@@ -1546,7 +1546,8 @@ void amdgpu_ras_eeprom_check_and_recover(struct amdgpu_device *adev)
        struct amdgpu_ras_eeprom_control *control;
        int res;
 
-       if (!__is_ras_eeprom_supported(adev) || !ras)
+       if (!__is_ras_eeprom_supported(adev) || !ras ||
+           amdgpu_ras_smu_eeprom_supported(adev))
                return;
        control = &ras->eeprom_control;
        if (!control->is_eeprom_valid)
@@ -1566,4 +1567,45 @@ void amdgpu_ras_eeprom_check_and_recover(struct amdgpu_device *adev)
                control->is_eeprom_valid = false;
        }
        return;
-}
\ No newline at end of file
+}
+
+static const struct ras_smu_drv *amdgpu_ras_get_smu_ras_drv(struct amdgpu_device *adev)
+{
+       struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
+
+       if (!ras)
+               return NULL;
+
+       return ras->ras_smu_drv;
+}
+
+static uint64_t amdgpu_ras_smu_get_feature_flags(struct amdgpu_device *adev)
+{
+       const struct ras_smu_drv *ras_smu_drv = amdgpu_ras_get_smu_ras_drv(adev);
+       uint64_t flags = 0ULL;
+
+       if (!ras_smu_drv)
+               goto out;
+
+       if (ras_smu_drv->ras_smu_feature_flags)
+               ras_smu_drv->ras_smu_feature_flags(adev, &flags);
+
+out:
+       return flags;
+}
+
+bool amdgpu_ras_smu_eeprom_supported(struct amdgpu_device *adev)
+{
+       const struct ras_smu_drv *smu_ras_drv = amdgpu_ras_get_smu_ras_drv(adev);
+       uint64_t flags = 0ULL;
+
+       if (!__is_ras_eeprom_supported(adev) || !smu_ras_drv)
+               return false;
+
+       if (!smu_ras_drv->smu_eeprom_funcs)
+               return false;
+
+       flags = amdgpu_ras_smu_get_feature_flags(adev);
+
+       return !!(flags & RAS_SMU_FEATURE_BIT__RAS_EEPROM);
+}
index ebfca4cb5688b69a000c103707f155a33ef39f46..feff46b22b6ff5e7736cb174a67886fb48268d76 100644 (file)
@@ -163,6 +163,8 @@ int amdgpu_ras_eeprom_check(struct amdgpu_ras_eeprom_control *control);
 
 void amdgpu_ras_eeprom_check_and_recover(struct amdgpu_device *adev);
 
+bool amdgpu_ras_smu_eeprom_supported(struct amdgpu_device *adev);
+
 extern const struct file_operations amdgpu_ras_debugfs_eeprom_size_ops;
 extern const struct file_operations amdgpu_ras_debugfs_eeprom_table_ops;