Sometimes user may want to enable the od feature by setting ppfeaturemask when loading amdgpu driver. However,not all Asics support this feature. So we need to restore the ppfeature value and print a warning info. Signed-off-by: Ma Jun <Jun.Ma2@xxxxxxx> --- drivers/gpu/drm/amd/pm/amdgpu_dpm.c | 15 ++++++++++++--- drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c index f84bfed50681..d777056b2f9d 100644 --- a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c +++ b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c @@ -1548,12 +1548,14 @@ int amdgpu_dpm_get_smu_prv_buf_details(struct amdgpu_device *adev, return ret; } -int amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev) +bool amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev) { + bool od_support; + if (is_support_sw_smu(adev)) { struct smu_context *smu = adev->powerplay.pp_handle; - return (smu->od_enabled || smu->is_apu); + od_support = (smu->od_enabled || smu->is_apu); } else { struct pp_hwmgr *hwmgr; @@ -1566,8 +1568,15 @@ int amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev) hwmgr = (struct pp_hwmgr *)adev->powerplay.pp_handle; - return hwmgr->od_enabled; + od_support = hwmgr->od_enabled; + } + + if (!od_support && (adev->pm.pp_feature & PP_OVERDRIVE_MASK)) { + adev->pm.pp_feature &= ~PP_OVERDRIVE_MASK; + DRM_WARN("overdrive feature is not supported\n"); } + + return od_support; } int amdgpu_dpm_set_pp_table(struct amdgpu_device *adev, diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h index 621200e0823f..0635f9d3a61a 100644 --- a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h +++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h @@ -551,7 +551,7 @@ int amdgpu_dpm_debugfs_print_current_performance_level(struct amdgpu_device *ade int amdgpu_dpm_get_smu_prv_buf_details(struct amdgpu_device *adev, void **addr, size_t *size); -int amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev); +bool amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev); int amdgpu_dpm_set_pp_table(struct amdgpu_device *adev, const char *buf, size_t size); -- 2.34.1