Commit 86f8c599 authored by Rex Zhu's avatar Rex Zhu Committed by Alex Deucher

drm/amdgpu: when suspend, set boot state instand of disable dpm.

fix pm-hibernate bug, when suspend/resume, dpm start failed.
Signed-off-by: default avatarRex Zhu <Rex.Zhu@amd.com>
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 8ed8147a
...@@ -404,6 +404,8 @@ struct amdgpu_dpm { ...@@ -404,6 +404,8 @@ struct amdgpu_dpm {
enum amd_vce_level vce_level; enum amd_vce_level vce_level;
enum amd_pm_state_type state; enum amd_pm_state_type state;
enum amd_pm_state_type user_state; enum amd_pm_state_type user_state;
enum amd_pm_state_type last_state;
enum amd_pm_state_type last_user_state;
u32 platform_caps; u32 platform_caps;
u32 voltage_response_time; u32 voltage_response_time;
u32 backbias_response_time; u32 backbias_response_time;
......
...@@ -6345,12 +6345,19 @@ static int ci_dpm_suspend(void *handle) ...@@ -6345,12 +6345,19 @@ static int ci_dpm_suspend(void *handle)
if (adev->pm.dpm_enabled) { if (adev->pm.dpm_enabled) {
mutex_lock(&adev->pm.mutex); mutex_lock(&adev->pm.mutex);
/* disable dpm */ amdgpu_irq_put(adev, &adev->pm.dpm.thermal.irq,
ci_dpm_disable(adev); AMDGPU_THERMAL_IRQ_LOW_TO_HIGH);
/* reset the power state */ amdgpu_irq_put(adev, &adev->pm.dpm.thermal.irq,
adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps; AMDGPU_THERMAL_IRQ_HIGH_TO_LOW);
adev->pm.dpm.last_user_state = adev->pm.dpm.user_state;
adev->pm.dpm.last_state = adev->pm.dpm.state;
adev->pm.dpm.user_state = POWER_STATE_TYPE_INTERNAL_BOOT;
adev->pm.dpm.state = POWER_STATE_TYPE_INTERNAL_BOOT;
mutex_unlock(&adev->pm.mutex); mutex_unlock(&adev->pm.mutex);
amdgpu_pm_compute_clocks(adev);
} }
return 0; return 0;
} }
...@@ -6368,6 +6375,8 @@ static int ci_dpm_resume(void *handle) ...@@ -6368,6 +6375,8 @@ static int ci_dpm_resume(void *handle)
adev->pm.dpm_enabled = false; adev->pm.dpm_enabled = false;
else else
adev->pm.dpm_enabled = true; adev->pm.dpm_enabled = true;
adev->pm.dpm.user_state = adev->pm.dpm.last_user_state;
adev->pm.dpm.state = adev->pm.dpm.last_state;
mutex_unlock(&adev->pm.mutex); mutex_unlock(&adev->pm.mutex);
if (adev->pm.dpm_enabled) if (adev->pm.dpm_enabled)
amdgpu_pm_compute_clocks(adev); amdgpu_pm_compute_clocks(adev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment