Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -404,6 +404,8 @@ struct amdgpu_dpm {
	enum amd_vce_level vce_level;
	enum amd_pm_state_type 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                     voltage_response_time;
	u32                     backbias_response_time;
+13 −4
Original line number Diff line number Diff line
@@ -6345,12 +6345,19 @@ 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.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);
		amdgpu_pm_compute_clocks(adev);

	}

	return 0;
}

@@ -6368,6 +6375,8 @@ static int ci_dpm_resume(void *handle)
			adev->pm.dpm_enabled = false;
		else
			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);
		if (adev->pm.dpm_enabled)
			amdgpu_pm_compute_clocks(adev);