aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/trinity_dpm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/trinity_dpm.c')
-rw-r--r--drivers/gpu/drm/radeon/trinity_dpm.c32
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
1161int 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
1161int trinity_dpm_pre_set_power_state(struct radeon_device *rdev) 1192int 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