fix pm-hibernat bug, when suspend/resume, dpm start failed.

Change-Id: I03784f0049563b11721ebe905d9bea40ecc82170
Signed-off-by: Rex Zhu <rex....@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c 
b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
index 966e5bf..27b1fb4 100644
--- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
@@ -5276,7 +5276,7 @@ static int ci_dpm_enable(struct amdgpu_device *adev)
        int ret;
 
        if (amdgpu_ci_is_smc_running(adev))
-               return -EINVAL;
+               return 0;
        if (pi->voltage_control != CISLANDS_VOLTAGE_CONTROL_NONE) {
                ci_enable_voltage_control(adev);
                ret = ci_construct_voltage_tables(adev);
@@ -6345,12 +6345,17 @@ static int ci_dpm_suspend(void *handle)
 
        if (adev->pm.dpm_enabled) {
                mutex_lock(&adev->pm.mutex);
-               /* disable dpm */
-               ci_dpm_disable(adev);
-               /* reset the power state */
-               adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = 
adev->pm.dpm.boot_ps;
+               amdgpu_irq_put(adev, &adev->pm.dpm.thermal.irq,
+                              AMDGPU_THERMAL_IRQ_LOW_TO_HIGH);
+               amdgpu_irq_put(adev, &adev->pm.dpm.thermal.irq,
+                              AMDGPU_THERMAL_IRQ_HIGH_TO_LOW);
+               adev->pm.dpm.user_state = POWER_STATE_TYPE_INTERNAL_BOOT;
+               adev->pm.dpm.state = POWER_STATE_TYPE_INTERNAL_BOOT;
                mutex_unlock(&adev->pm.mutex);
+               amdgpu_pm_compute_clocks(adev);
+
        }
+
        return 0;
 }
 
@@ -6368,6 +6373,8 @@ static int ci_dpm_resume(void *handle)
                        adev->pm.dpm_enabled = false;
                else
                        adev->pm.dpm_enabled = true;
+               adev->pm.dpm.user_state = POWER_STATE_TYPE_BALANCED;
+               adev->pm.dpm.state = POWER_STATE_TYPE_BALANCED;
                mutex_unlock(&adev->pm.mutex);
                if (adev->pm.dpm_enabled)
                        amdgpu_pm_compute_clocks(adev);
-- 
1.9.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to