|
@@ -917,10 +917,13 @@ static void radeon_dpm_change_power_state_locked(struct radeon_device *rdev)
|
|
|
|
|
|
radeon_dpm_post_set_power_state(rdev);
|
|
|
|
|
|
- /* force low perf level for thermal */
|
|
|
- if (rdev->pm.dpm.thermal_active &&
|
|
|
- rdev->asic->dpm.force_performance_level) {
|
|
|
- radeon_dpm_force_performance_level(rdev, RADEON_DPM_FORCED_LEVEL_LOW);
|
|
|
+ if (rdev->asic->dpm.force_performance_level) {
|
|
|
+ if (rdev->pm.dpm.thermal_active)
|
|
|
+ /* force low perf level for thermal */
|
|
|
+ radeon_dpm_force_performance_level(rdev, RADEON_DPM_FORCED_LEVEL_LOW);
|
|
|
+ else
|
|
|
+ /* otherwise, enable auto */
|
|
|
+ radeon_dpm_force_performance_level(rdev, RADEON_DPM_FORCED_LEVEL_AUTO);
|
|
|
}
|
|
|
|
|
|
done:
|
|
@@ -1149,9 +1152,10 @@ static int radeon_pm_init_dpm(struct radeon_device *rdev)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- /* default to performance state */
|
|
|
+ /* default to balanced state */
|
|
|
rdev->pm.dpm.state = POWER_STATE_TYPE_BALANCED;
|
|
|
rdev->pm.dpm.user_state = POWER_STATE_TYPE_BALANCED;
|
|
|
+ rdev->pm.dpm.forced_level = RADEON_DPM_FORCED_LEVEL_AUTO;
|
|
|
rdev->pm.default_sclk = rdev->clock.default_sclk;
|
|
|
rdev->pm.default_mclk = rdev->clock.default_mclk;
|
|
|
rdev->pm.current_sclk = rdev->clock.default_sclk;
|