OSDN Git Service

drm/amdgpu/pm: look up current_level for asics without pm callback
authorAlex Deucher <alexander.deucher@amd.com>
Mon, 25 Oct 2021 19:02:33 +0000 (15:02 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 Oct 2021 18:26:13 +0000 (14:26 -0400)
For asics without a callback, use the current level rather than 0xff.
This can avoid an unnecesary forced level set on older asics when
set by the user.

Reviewed-by: Kevin Wang <kevinyang.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/amdgpu_pm.c

index 01cca08..49fe415 100644 (file)
@@ -310,7 +310,7 @@ static ssize_t amdgpu_set_power_dpm_force_performance_level(struct device *dev,
        struct amdgpu_device *adev = drm_to_adev(ddev);
        const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
        enum amd_dpm_forced_level level;
-       enum amd_dpm_forced_level current_level = 0xff;
+       enum amd_dpm_forced_level current_level;
        int ret = 0;
 
        if (amdgpu_in_reset(adev))
@@ -350,6 +350,8 @@ static ssize_t amdgpu_set_power_dpm_force_performance_level(struct device *dev,
 
        if (pp_funcs->get_performance_level)
                current_level = amdgpu_dpm_get_performance_level(adev);
+       else
+               current_level = adev->pm.dpm.forced_level;
 
        if (current_level == level) {
                pm_runtime_mark_last_busy(ddev->dev);