diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/trinity_dpm.c')
-rw-r--r-- | drivers/gpu/drm/radeon/trinity_dpm.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/trinity_dpm.c b/drivers/gpu/drm/radeon/trinity_dpm.c index 8a32bcc6bbb5..a1eb5f59939f 100644 --- a/drivers/gpu/drm/radeon/trinity_dpm.c +++ b/drivers/gpu/drm/radeon/trinity_dpm.c | |||
@@ -1158,6 +1158,37 @@ static void trinity_setup_nbp_sim(struct radeon_device *rdev, | |||
1158 | } | 1158 | } |
1159 | } | 1159 | } |
1160 | 1160 | ||
1161 | int trinity_dpm_force_performance_level(struct radeon_device *rdev, | ||
1162 | enum radeon_dpm_forced_level level) | ||
1163 | { | ||
1164 | struct trinity_power_info *pi = trinity_get_pi(rdev); | ||
1165 | struct radeon_ps *rps = &pi->current_rps; | ||
1166 | struct trinity_ps *ps = trinity_get_ps(rps); | ||
1167 | int i, ret; | ||
1168 | |||
1169 | if (ps->num_levels <= 1) | ||
1170 | return 0; | ||
1171 | |||
1172 | if (level == RADEON_DPM_FORCED_LEVEL_HIGH) { | ||
1173 | /* not supported by the hw */ | ||
1174 | return -EINVAL; | ||
1175 | } else if (level == RADEON_DPM_FORCED_LEVEL_LOW) { | ||
1176 | ret = trinity_dpm_n_levels_disabled(rdev, ps->num_levels - 1); | ||
1177 | if (ret) | ||
1178 | return ret; | ||
1179 | } else { | ||
1180 | for (i = 0; i < ps->num_levels; i++) { | ||
1181 | ret = trinity_dpm_n_levels_disabled(rdev, 0); | ||
1182 | if (ret) | ||
1183 | return ret; | ||
1184 | } | ||
1185 | } | ||
1186 | |||
1187 | rdev->pm.dpm.forced_level = level; | ||
1188 | |||
1189 | return 0; | ||
1190 | } | ||
1191 | |||
1161 | int trinity_dpm_pre_set_power_state(struct radeon_device *rdev) | 1192 | int trinity_dpm_pre_set_power_state(struct radeon_device *rdev) |
1162 | { | 1193 | { |
1163 | struct trinity_power_info *pi = trinity_get_pi(rdev); | 1194 | struct trinity_power_info *pi = trinity_get_pi(rdev); |
@@ -1190,6 +1221,7 @@ int trinity_dpm_set_power_state(struct radeon_device *rdev) | |||
1190 | trinity_force_level_0(rdev); | 1221 | trinity_force_level_0(rdev); |
1191 | trinity_unforce_levels(rdev); | 1222 | trinity_unforce_levels(rdev); |
1192 | trinity_set_uvd_clock_after_set_eng_clock(rdev, new_ps, old_ps); | 1223 | trinity_set_uvd_clock_after_set_eng_clock(rdev, new_ps, old_ps); |
1224 | rdev->pm.dpm.forced_level = RADEON_DPM_FORCED_LEVEL_AUTO; | ||
1193 | } | 1225 | } |
1194 | trinity_release_mutex(rdev); | 1226 | trinity_release_mutex(rdev); |
1195 | 1227 | ||