diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 17 |
2 files changed, 15 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h index e5e0a9a1abaf..bd85e35998e7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h | |||
| @@ -404,6 +404,8 @@ struct amdgpu_dpm { | |||
| 404 | enum amd_vce_level vce_level; | 404 | enum amd_vce_level vce_level; |
| 405 | enum amd_pm_state_type state; | 405 | enum amd_pm_state_type state; |
| 406 | enum amd_pm_state_type user_state; | 406 | enum amd_pm_state_type user_state; |
| 407 | enum amd_pm_state_type last_state; | ||
| 408 | enum amd_pm_state_type last_user_state; | ||
| 407 | u32 platform_caps; | 409 | u32 platform_caps; |
| 408 | u32 voltage_response_time; | 410 | u32 voltage_response_time; |
| 409 | u32 backbias_response_time; | 411 | u32 backbias_response_time; |
diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c index 6ecfc4885b84..1c3b5c411ef7 100644 --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c | |||
| @@ -6345,12 +6345,19 @@ static int ci_dpm_suspend(void *handle) | |||
| 6345 | 6345 | ||
| 6346 | if (adev->pm.dpm_enabled) { | 6346 | if (adev->pm.dpm_enabled) { |
| 6347 | mutex_lock(&adev->pm.mutex); | 6347 | mutex_lock(&adev->pm.mutex); |
| 6348 | /* disable dpm */ | 6348 | amdgpu_irq_put(adev, &adev->pm.dpm.thermal.irq, |
| 6349 | ci_dpm_disable(adev); | 6349 | AMDGPU_THERMAL_IRQ_LOW_TO_HIGH); |
| 6350 | /* reset the power state */ | 6350 | amdgpu_irq_put(adev, &adev->pm.dpm.thermal.irq, |
| 6351 | adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps; | 6351 | AMDGPU_THERMAL_IRQ_HIGH_TO_LOW); |
| 6352 | adev->pm.dpm.last_user_state = adev->pm.dpm.user_state; | ||
| 6353 | adev->pm.dpm.last_state = adev->pm.dpm.state; | ||
| 6354 | adev->pm.dpm.user_state = POWER_STATE_TYPE_INTERNAL_BOOT; | ||
| 6355 | adev->pm.dpm.state = POWER_STATE_TYPE_INTERNAL_BOOT; | ||
| 6352 | mutex_unlock(&adev->pm.mutex); | 6356 | mutex_unlock(&adev->pm.mutex); |
| 6357 | amdgpu_pm_compute_clocks(adev); | ||
| 6358 | |||
| 6353 | } | 6359 | } |
| 6360 | |||
| 6354 | return 0; | 6361 | return 0; |
| 6355 | } | 6362 | } |
| 6356 | 6363 | ||
| @@ -6368,6 +6375,8 @@ static int ci_dpm_resume(void *handle) | |||
| 6368 | adev->pm.dpm_enabled = false; | 6375 | adev->pm.dpm_enabled = false; |
| 6369 | else | 6376 | else |
| 6370 | adev->pm.dpm_enabled = true; | 6377 | adev->pm.dpm_enabled = true; |
| 6378 | adev->pm.dpm.user_state = adev->pm.dpm.last_user_state; | ||
| 6379 | adev->pm.dpm.state = adev->pm.dpm.last_state; | ||
| 6371 | mutex_unlock(&adev->pm.mutex); | 6380 | mutex_unlock(&adev->pm.mutex); |
| 6372 | if (adev->pm.dpm_enabled) | 6381 | if (adev->pm.dpm_enabled) |
| 6373 | amdgpu_pm_compute_clocks(adev); | 6382 | amdgpu_pm_compute_clocks(adev); |
