Lines Matching refs:rdev
50 static int radeon_debugfs_pm_init(struct radeon_device *rdev);
51 static bool radeon_pm_in_vbl(struct radeon_device *rdev);
52 static bool radeon_pm_debug_check_in_vbl(struct radeon_device *rdev, bool finish);
53 static void radeon_pm_update_profile(struct radeon_device *rdev);
54 static void radeon_pm_set_clocks(struct radeon_device *rdev);
56 int radeon_pm_get_type_index(struct radeon_device *rdev, in radeon_pm_get_type_index() argument
63 for (i = 0; i < rdev->pm.num_power_states; i++) { in radeon_pm_get_type_index()
64 if (rdev->pm.power_state[i].type == ps_type) { in radeon_pm_get_type_index()
71 return rdev->pm.default_power_state_index; in radeon_pm_get_type_index()
74 void radeon_pm_acpi_event_handler(struct radeon_device *rdev) in radeon_pm_acpi_event_handler() argument
76 if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) { in radeon_pm_acpi_event_handler()
77 mutex_lock(&rdev->pm.mutex); in radeon_pm_acpi_event_handler()
79 rdev->pm.dpm.ac_power = true; in radeon_pm_acpi_event_handler()
81 rdev->pm.dpm.ac_power = false; in radeon_pm_acpi_event_handler()
82 if (rdev->family == CHIP_ARUBA) { in radeon_pm_acpi_event_handler()
83 if (rdev->asic->dpm.enable_bapm) in radeon_pm_acpi_event_handler()
84 radeon_dpm_enable_bapm(rdev, rdev->pm.dpm.ac_power); in radeon_pm_acpi_event_handler()
86 mutex_unlock(&rdev->pm.mutex); in radeon_pm_acpi_event_handler()
87 } else if (rdev->pm.pm_method == PM_METHOD_PROFILE) { in radeon_pm_acpi_event_handler()
88 if (rdev->pm.profile == PM_PROFILE_AUTO) { in radeon_pm_acpi_event_handler()
89 mutex_lock(&rdev->pm.mutex); in radeon_pm_acpi_event_handler()
90 radeon_pm_update_profile(rdev); in radeon_pm_acpi_event_handler()
91 radeon_pm_set_clocks(rdev); in radeon_pm_acpi_event_handler()
92 mutex_unlock(&rdev->pm.mutex); in radeon_pm_acpi_event_handler()
97 static void radeon_pm_update_profile(struct radeon_device *rdev) in radeon_pm_update_profile() argument
99 switch (rdev->pm.profile) { in radeon_pm_update_profile()
101 rdev->pm.profile_index = PM_PROFILE_DEFAULT_IDX; in radeon_pm_update_profile()
105 if (rdev->pm.active_crtc_count > 1) in radeon_pm_update_profile()
106 rdev->pm.profile_index = PM_PROFILE_HIGH_MH_IDX; in radeon_pm_update_profile()
108 rdev->pm.profile_index = PM_PROFILE_HIGH_SH_IDX; in radeon_pm_update_profile()
110 if (rdev->pm.active_crtc_count > 1) in radeon_pm_update_profile()
111 rdev->pm.profile_index = PM_PROFILE_MID_MH_IDX; in radeon_pm_update_profile()
113 rdev->pm.profile_index = PM_PROFILE_MID_SH_IDX; in radeon_pm_update_profile()
117 if (rdev->pm.active_crtc_count > 1) in radeon_pm_update_profile()
118 rdev->pm.profile_index = PM_PROFILE_LOW_MH_IDX; in radeon_pm_update_profile()
120 rdev->pm.profile_index = PM_PROFILE_LOW_SH_IDX; in radeon_pm_update_profile()
123 if (rdev->pm.active_crtc_count > 1) in radeon_pm_update_profile()
124 rdev->pm.profile_index = PM_PROFILE_MID_MH_IDX; in radeon_pm_update_profile()
126 rdev->pm.profile_index = PM_PROFILE_MID_SH_IDX; in radeon_pm_update_profile()
129 if (rdev->pm.active_crtc_count > 1) in radeon_pm_update_profile()
130 rdev->pm.profile_index = PM_PROFILE_HIGH_MH_IDX; in radeon_pm_update_profile()
132 rdev->pm.profile_index = PM_PROFILE_HIGH_SH_IDX; in radeon_pm_update_profile()
136 if (rdev->pm.active_crtc_count == 0) { in radeon_pm_update_profile()
137 rdev->pm.requested_power_state_index = in radeon_pm_update_profile()
138 rdev->pm.profiles[rdev->pm.profile_index].dpms_off_ps_idx; in radeon_pm_update_profile()
139 rdev->pm.requested_clock_mode_index = in radeon_pm_update_profile()
140 rdev->pm.profiles[rdev->pm.profile_index].dpms_off_cm_idx; in radeon_pm_update_profile()
142 rdev->pm.requested_power_state_index = in radeon_pm_update_profile()
143 rdev->pm.profiles[rdev->pm.profile_index].dpms_on_ps_idx; in radeon_pm_update_profile()
144 rdev->pm.requested_clock_mode_index = in radeon_pm_update_profile()
145 rdev->pm.profiles[rdev->pm.profile_index].dpms_on_cm_idx; in radeon_pm_update_profile()
149 static void radeon_unmap_vram_bos(struct radeon_device *rdev) in radeon_unmap_vram_bos() argument
153 if (list_empty(&rdev->gem.objects)) in radeon_unmap_vram_bos()
156 list_for_each_entry_safe(bo, n, &rdev->gem.objects, list) { in radeon_unmap_vram_bos()
162 static void radeon_sync_with_vblank(struct radeon_device *rdev) in radeon_sync_with_vblank() argument
164 if (rdev->pm.active_crtcs) { in radeon_sync_with_vblank()
165 rdev->pm.vblank_sync = false; in radeon_sync_with_vblank()
167 rdev->irq.vblank_queue, rdev->pm.vblank_sync, in radeon_sync_with_vblank()
172 static void radeon_set_power_state(struct radeon_device *rdev) in radeon_set_power_state() argument
177 if ((rdev->pm.requested_clock_mode_index == rdev->pm.current_clock_mode_index) && in radeon_set_power_state()
178 (rdev->pm.requested_power_state_index == rdev->pm.current_power_state_index)) in radeon_set_power_state()
181 if (radeon_gui_idle(rdev)) { in radeon_set_power_state()
182 sclk = rdev->pm.power_state[rdev->pm.requested_power_state_index]. in radeon_set_power_state()
183 clock_info[rdev->pm.requested_clock_mode_index].sclk; in radeon_set_power_state()
184 if (sclk > rdev->pm.default_sclk) in radeon_set_power_state()
185 sclk = rdev->pm.default_sclk; in radeon_set_power_state()
191 if ((rdev->pm.pm_method == PM_METHOD_PROFILE) && in radeon_set_power_state()
192 (rdev->family >= CHIP_BARTS) && in radeon_set_power_state()
193 rdev->pm.active_crtc_count && in radeon_set_power_state()
194 ((rdev->pm.profile_index == PM_PROFILE_MID_MH_IDX) || in radeon_set_power_state()
195 (rdev->pm.profile_index == PM_PROFILE_LOW_MH_IDX))) in radeon_set_power_state()
196 mclk = rdev->pm.power_state[rdev->pm.requested_power_state_index]. in radeon_set_power_state()
197 clock_info[rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx].mclk; in radeon_set_power_state()
199 mclk = rdev->pm.power_state[rdev->pm.requested_power_state_index]. in radeon_set_power_state()
200 clock_info[rdev->pm.requested_clock_mode_index].mclk; in radeon_set_power_state()
202 if (mclk > rdev->pm.default_mclk) in radeon_set_power_state()
203 mclk = rdev->pm.default_mclk; in radeon_set_power_state()
206 if (sclk < rdev->pm.current_sclk) in radeon_set_power_state()
209 radeon_sync_with_vblank(rdev); in radeon_set_power_state()
211 if (rdev->pm.pm_method == PM_METHOD_DYNPM) { in radeon_set_power_state()
212 if (!radeon_pm_in_vbl(rdev)) in radeon_set_power_state()
216 radeon_pm_prepare(rdev); in radeon_set_power_state()
220 radeon_pm_misc(rdev); in radeon_set_power_state()
223 if (sclk != rdev->pm.current_sclk) { in radeon_set_power_state()
224 radeon_pm_debug_check_in_vbl(rdev, false); in radeon_set_power_state()
225 radeon_set_engine_clock(rdev, sclk); in radeon_set_power_state()
226 radeon_pm_debug_check_in_vbl(rdev, true); in radeon_set_power_state()
227 rdev->pm.current_sclk = sclk; in radeon_set_power_state()
232 if (rdev->asic->pm.set_memory_clock && (mclk != rdev->pm.current_mclk)) { in radeon_set_power_state()
233 radeon_pm_debug_check_in_vbl(rdev, false); in radeon_set_power_state()
234 radeon_set_memory_clock(rdev, mclk); in radeon_set_power_state()
235 radeon_pm_debug_check_in_vbl(rdev, true); in radeon_set_power_state()
236 rdev->pm.current_mclk = mclk; in radeon_set_power_state()
242 radeon_pm_misc(rdev); in radeon_set_power_state()
244 radeon_pm_finish(rdev); in radeon_set_power_state()
246 rdev->pm.current_power_state_index = rdev->pm.requested_power_state_index; in radeon_set_power_state()
247 rdev->pm.current_clock_mode_index = rdev->pm.requested_clock_mode_index; in radeon_set_power_state()
252 static void radeon_pm_set_clocks(struct radeon_device *rdev) in radeon_pm_set_clocks() argument
258 if ((rdev->pm.requested_clock_mode_index == rdev->pm.current_clock_mode_index) && in radeon_pm_set_clocks()
259 (rdev->pm.requested_power_state_index == rdev->pm.current_power_state_index)) in radeon_pm_set_clocks()
262 down_write(&rdev->pm.mclk_lock); in radeon_pm_set_clocks()
263 mutex_lock(&rdev->ring_lock); in radeon_pm_set_clocks()
267 struct radeon_ring *ring = &rdev->ring[i]; in radeon_pm_set_clocks()
271 r = radeon_fence_wait_empty(rdev, i); in radeon_pm_set_clocks()
274 mutex_unlock(&rdev->ring_lock); in radeon_pm_set_clocks()
275 up_write(&rdev->pm.mclk_lock); in radeon_pm_set_clocks()
280 radeon_unmap_vram_bos(rdev); in radeon_pm_set_clocks()
282 if (rdev->irq.installed) { in radeon_pm_set_clocks()
284 drm_for_each_crtc(crtc, rdev->ddev) { in radeon_pm_set_clocks()
285 if (rdev->pm.active_crtcs & (1 << i)) { in radeon_pm_set_clocks()
288 rdev->pm.req_vblank |= (1 << i); in radeon_pm_set_clocks()
297 radeon_set_power_state(rdev); in radeon_pm_set_clocks()
299 if (rdev->irq.installed) { in radeon_pm_set_clocks()
301 drm_for_each_crtc(crtc, rdev->ddev) { in radeon_pm_set_clocks()
302 if (rdev->pm.req_vblank & (1 << i)) { in radeon_pm_set_clocks()
303 rdev->pm.req_vblank &= ~(1 << i); in radeon_pm_set_clocks()
311 radeon_update_bandwidth_info(rdev); in radeon_pm_set_clocks()
312 if (rdev->pm.active_crtc_count) in radeon_pm_set_clocks()
313 radeon_bandwidth_update(rdev); in radeon_pm_set_clocks()
315 rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE; in radeon_pm_set_clocks()
317 mutex_unlock(&rdev->ring_lock); in radeon_pm_set_clocks()
318 up_write(&rdev->pm.mclk_lock); in radeon_pm_set_clocks()
321 static void radeon_pm_print_states(struct radeon_device *rdev) in radeon_pm_print_states() argument
327 DRM_DEBUG_DRIVER("%d Power State(s)\n", rdev->pm.num_power_states); in radeon_pm_print_states()
328 for (i = 0; i < rdev->pm.num_power_states; i++) { in radeon_pm_print_states()
329 power_state = &rdev->pm.power_state[i]; in radeon_pm_print_states()
332 if (i == rdev->pm.default_power_state_index) in radeon_pm_print_states()
334 if ((rdev->flags & RADEON_IS_PCIE) && !(rdev->flags & RADEON_IS_IGP)) in radeon_pm_print_states()
341 if (rdev->flags & RADEON_IS_IGP) in radeon_pm_print_states()
360 struct radeon_device *rdev = ddev->dev_private; in radeon_get_pm_profile() local
361 int cp = rdev->pm.profile; in radeon_get_pm_profile()
376 struct radeon_device *rdev = ddev->dev_private; in radeon_set_pm_profile() local
379 if ((rdev->flags & RADEON_IS_PX) && in radeon_set_pm_profile()
383 mutex_lock(&rdev->pm.mutex); in radeon_set_pm_profile()
384 if (rdev->pm.pm_method == PM_METHOD_PROFILE) { in radeon_set_pm_profile()
386 rdev->pm.profile = PM_PROFILE_DEFAULT; in radeon_set_pm_profile()
388 rdev->pm.profile = PM_PROFILE_AUTO; in radeon_set_pm_profile()
390 rdev->pm.profile = PM_PROFILE_LOW; in radeon_set_pm_profile()
392 rdev->pm.profile = PM_PROFILE_MID; in radeon_set_pm_profile()
394 rdev->pm.profile = PM_PROFILE_HIGH; in radeon_set_pm_profile()
399 radeon_pm_update_profile(rdev); in radeon_set_pm_profile()
400 radeon_pm_set_clocks(rdev); in radeon_set_pm_profile()
405 mutex_unlock(&rdev->pm.mutex); in radeon_set_pm_profile()
415 struct radeon_device *rdev = ddev->dev_private; in radeon_get_pm_method() local
416 int pm = rdev->pm.pm_method; in radeon_get_pm_method()
429 struct radeon_device *rdev = ddev->dev_private; in radeon_set_pm_method() local
432 if ((rdev->flags & RADEON_IS_PX) && in radeon_set_pm_method()
439 if (rdev->pm.pm_method == PM_METHOD_DPM) { in radeon_set_pm_method()
445 mutex_lock(&rdev->pm.mutex); in radeon_set_pm_method()
446 rdev->pm.pm_method = PM_METHOD_DYNPM; in radeon_set_pm_method()
447 rdev->pm.dynpm_state = DYNPM_STATE_PAUSED; in radeon_set_pm_method()
448 rdev->pm.dynpm_planned_action = DYNPM_ACTION_DEFAULT; in radeon_set_pm_method()
449 mutex_unlock(&rdev->pm.mutex); in radeon_set_pm_method()
451 mutex_lock(&rdev->pm.mutex); in radeon_set_pm_method()
453 rdev->pm.dynpm_state = DYNPM_STATE_DISABLED; in radeon_set_pm_method()
454 rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE; in radeon_set_pm_method()
455 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_set_pm_method()
456 mutex_unlock(&rdev->pm.mutex); in radeon_set_pm_method()
457 cancel_delayed_work_sync(&rdev->pm.dynpm_idle_work); in radeon_set_pm_method()
462 radeon_pm_compute_clocks(rdev); in radeon_set_pm_method()
472 struct radeon_device *rdev = ddev->dev_private; in radeon_get_dpm_state() local
473 enum radeon_pm_state_type pm = rdev->pm.dpm.user_state; in radeon_get_dpm_state()
486 struct radeon_device *rdev = ddev->dev_private; in radeon_set_dpm_state() local
488 mutex_lock(&rdev->pm.mutex); in radeon_set_dpm_state()
490 rdev->pm.dpm.user_state = POWER_STATE_TYPE_BATTERY; in radeon_set_dpm_state()
492 rdev->pm.dpm.user_state = POWER_STATE_TYPE_BALANCED; in radeon_set_dpm_state()
494 rdev->pm.dpm.user_state = POWER_STATE_TYPE_PERFORMANCE; in radeon_set_dpm_state()
496 mutex_unlock(&rdev->pm.mutex); in radeon_set_dpm_state()
500 mutex_unlock(&rdev->pm.mutex); in radeon_set_dpm_state()
503 if (!(rdev->flags & RADEON_IS_PX) || in radeon_set_dpm_state()
505 radeon_pm_compute_clocks(rdev); in radeon_set_dpm_state()
516 struct radeon_device *rdev = ddev->dev_private; in radeon_get_dpm_forced_performance_level() local
517 enum radeon_dpm_forced_level level = rdev->pm.dpm.forced_level; in radeon_get_dpm_forced_performance_level()
519 if ((rdev->flags & RADEON_IS_PX) && in radeon_get_dpm_forced_performance_level()
534 struct radeon_device *rdev = ddev->dev_private; in radeon_set_dpm_forced_performance_level() local
539 if ((rdev->flags & RADEON_IS_PX) && in radeon_set_dpm_forced_performance_level()
543 mutex_lock(&rdev->pm.mutex); in radeon_set_dpm_forced_performance_level()
554 if (rdev->asic->dpm.force_performance_level) { in radeon_set_dpm_forced_performance_level()
555 if (rdev->pm.dpm.thermal_active) { in radeon_set_dpm_forced_performance_level()
559 ret = radeon_dpm_force_performance_level(rdev, level); in radeon_set_dpm_forced_performance_level()
564 mutex_unlock(&rdev->pm.mutex); in radeon_set_dpm_forced_performance_level()
573 struct radeon_device *rdev = dev_get_drvdata(dev); in radeon_hwmon_get_pwm1_enable() local
576 if (rdev->asic->dpm.fan_ctrl_get_mode) in radeon_hwmon_get_pwm1_enable()
577 pwm_mode = rdev->asic->dpm.fan_ctrl_get_mode(rdev); in radeon_hwmon_get_pwm1_enable()
588 struct radeon_device *rdev = dev_get_drvdata(dev); in radeon_hwmon_set_pwm1_enable() local
592 if(!rdev->asic->dpm.fan_ctrl_set_mode) in radeon_hwmon_set_pwm1_enable()
601 rdev->asic->dpm.fan_ctrl_set_mode(rdev, FDO_PWM_MODE_STATIC); in radeon_hwmon_set_pwm1_enable()
604 rdev->asic->dpm.fan_ctrl_set_mode(rdev, 0); in radeon_hwmon_set_pwm1_enable()
629 struct radeon_device *rdev = dev_get_drvdata(dev); in radeon_hwmon_set_pwm1() local
639 err = rdev->asic->dpm.set_fan_speed_percent(rdev, value); in radeon_hwmon_set_pwm1()
650 struct radeon_device *rdev = dev_get_drvdata(dev); in radeon_hwmon_get_pwm1() local
654 err = rdev->asic->dpm.get_fan_speed_percent(rdev, &speed); in radeon_hwmon_get_pwm1()
674 struct radeon_device *rdev = dev_get_drvdata(dev); in radeon_hwmon_show_temp() local
675 struct drm_device *ddev = rdev->ddev; in radeon_hwmon_show_temp()
679 if ((rdev->flags & RADEON_IS_PX) && in radeon_hwmon_show_temp()
683 if (rdev->asic->pm.get_temperature) in radeon_hwmon_show_temp()
684 temp = radeon_get_temperature(rdev); in radeon_hwmon_show_temp()
695 struct radeon_device *rdev = dev_get_drvdata(dev); in radeon_hwmon_show_temp_thresh() local
700 temp = rdev->pm.dpm.thermal.min_temp; in radeon_hwmon_show_temp_thresh()
702 temp = rdev->pm.dpm.thermal.max_temp; in radeon_hwmon_show_temp_thresh()
731 struct radeon_device *rdev = dev_get_drvdata(dev); in hwmon_attributes_visible() local
735 if (rdev->pm.pm_method != PM_METHOD_DPM && in hwmon_attributes_visible()
745 if (rdev->pm.no_fan && in hwmon_attributes_visible()
753 if ((!rdev->asic->dpm.get_fan_speed_percent && in hwmon_attributes_visible()
755 (!rdev->asic->dpm.fan_ctrl_get_mode && in hwmon_attributes_visible()
759 if ((!rdev->asic->dpm.set_fan_speed_percent && in hwmon_attributes_visible()
761 (!rdev->asic->dpm.fan_ctrl_set_mode && in hwmon_attributes_visible()
766 if ((!rdev->asic->dpm.set_fan_speed_percent && in hwmon_attributes_visible()
767 !rdev->asic->dpm.get_fan_speed_percent) && in hwmon_attributes_visible()
785 static int radeon_hwmon_init(struct radeon_device *rdev) in radeon_hwmon_init() argument
789 switch (rdev->pm.int_thermal_type) { in radeon_hwmon_init()
798 if (rdev->asic->pm.get_temperature == NULL) in radeon_hwmon_init()
800 rdev->pm.int_hwmon_dev = hwmon_device_register_with_groups(rdev->dev, in radeon_hwmon_init()
801 "radeon", rdev, in radeon_hwmon_init()
803 if (IS_ERR(rdev->pm.int_hwmon_dev)) { in radeon_hwmon_init()
804 err = PTR_ERR(rdev->pm.int_hwmon_dev); in radeon_hwmon_init()
805 dev_err(rdev->dev, in radeon_hwmon_init()
816 static void radeon_hwmon_fini(struct radeon_device *rdev) in radeon_hwmon_fini() argument
818 if (rdev->pm.int_hwmon_dev) in radeon_hwmon_fini()
819 hwmon_device_unregister(rdev->pm.int_hwmon_dev); in radeon_hwmon_fini()
824 struct radeon_device *rdev = in radeon_dpm_thermal_work_handler() local
830 if (!rdev->pm.dpm_enabled) in radeon_dpm_thermal_work_handler()
833 if (rdev->asic->pm.get_temperature) { in radeon_dpm_thermal_work_handler()
834 int temp = radeon_get_temperature(rdev); in radeon_dpm_thermal_work_handler()
836 if (temp < rdev->pm.dpm.thermal.min_temp) in radeon_dpm_thermal_work_handler()
838 dpm_state = rdev->pm.dpm.user_state; in radeon_dpm_thermal_work_handler()
840 if (rdev->pm.dpm.thermal.high_to_low) in radeon_dpm_thermal_work_handler()
842 dpm_state = rdev->pm.dpm.user_state; in radeon_dpm_thermal_work_handler()
844 mutex_lock(&rdev->pm.mutex); in radeon_dpm_thermal_work_handler()
846 rdev->pm.dpm.thermal_active = true; in radeon_dpm_thermal_work_handler()
848 rdev->pm.dpm.thermal_active = false; in radeon_dpm_thermal_work_handler()
849 rdev->pm.dpm.state = dpm_state; in radeon_dpm_thermal_work_handler()
850 mutex_unlock(&rdev->pm.mutex); in radeon_dpm_thermal_work_handler()
852 radeon_pm_compute_clocks(rdev); in radeon_dpm_thermal_work_handler()
855 static bool radeon_dpm_single_display(struct radeon_device *rdev) in radeon_dpm_single_display() argument
857 bool single_display = (rdev->pm.dpm.new_active_crtc_count < 2) ? in radeon_dpm_single_display()
861 if (single_display && rdev->asic->dpm.vblank_too_short) { in radeon_dpm_single_display()
862 if (radeon_dpm_vblank_too_short(rdev)) in radeon_dpm_single_display()
869 if (single_display && (r600_dpm_get_vrefresh(rdev) >= 120)) in radeon_dpm_single_display()
875 static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev, in radeon_dpm_pick_power_state() argument
881 bool single_display = radeon_dpm_single_display(rdev); in radeon_dpm_pick_power_state()
894 for (i = 0; i < rdev->pm.dpm.num_ps; i++) { in radeon_dpm_pick_power_state()
895 ps = &rdev->pm.dpm.ps[i]; in radeon_dpm_pick_power_state()
928 if (rdev->pm.dpm.uvd_ps) in radeon_dpm_pick_power_state()
929 return rdev->pm.dpm.uvd_ps; in radeon_dpm_pick_power_state()
949 return rdev->pm.dpm.boot_ps; in radeon_dpm_pick_power_state()
978 if (rdev->pm.dpm.uvd_ps) { in radeon_dpm_pick_power_state()
979 return rdev->pm.dpm.uvd_ps; in radeon_dpm_pick_power_state()
1002 static void radeon_dpm_change_power_state_locked(struct radeon_device *rdev) in radeon_dpm_change_power_state_locked() argument
1008 bool single_display = radeon_dpm_single_display(rdev); in radeon_dpm_change_power_state_locked()
1011 if (!rdev->pm.dpm_enabled) in radeon_dpm_change_power_state_locked()
1014 if (rdev->pm.dpm.user_state != rdev->pm.dpm.state) { in radeon_dpm_change_power_state_locked()
1016 if ((!rdev->pm.dpm.thermal_active) && in radeon_dpm_change_power_state_locked()
1017 (!rdev->pm.dpm.uvd_active)) in radeon_dpm_change_power_state_locked()
1018 rdev->pm.dpm.state = rdev->pm.dpm.user_state; in radeon_dpm_change_power_state_locked()
1020 dpm_state = rdev->pm.dpm.state; in radeon_dpm_change_power_state_locked()
1022 ps = radeon_dpm_pick_power_state(rdev, dpm_state); in radeon_dpm_change_power_state_locked()
1024 rdev->pm.dpm.requested_ps = ps; in radeon_dpm_change_power_state_locked()
1029 if (rdev->pm.dpm.current_ps == rdev->pm.dpm.requested_ps) { in radeon_dpm_change_power_state_locked()
1031 if (ps->vce_active != rdev->pm.dpm.vce_active) in radeon_dpm_change_power_state_locked()
1034 if (rdev->pm.dpm.single_display != single_display) in radeon_dpm_change_power_state_locked()
1036 if ((rdev->family < CHIP_BARTS) || (rdev->flags & RADEON_IS_IGP)) { in radeon_dpm_change_power_state_locked()
1040 if (rdev->pm.dpm.new_active_crtcs != rdev->pm.dpm.current_active_crtcs) { in radeon_dpm_change_power_state_locked()
1042 radeon_bandwidth_update(rdev); in radeon_dpm_change_power_state_locked()
1044 radeon_dpm_display_configuration_changed(rdev); in radeon_dpm_change_power_state_locked()
1045 rdev->pm.dpm.current_active_crtcs = rdev->pm.dpm.new_active_crtcs; in radeon_dpm_change_power_state_locked()
1046 rdev->pm.dpm.current_active_crtc_count = rdev->pm.dpm.new_active_crtc_count; in radeon_dpm_change_power_state_locked()
1054 if (rdev->pm.dpm.new_active_crtcs == in radeon_dpm_change_power_state_locked()
1055 rdev->pm.dpm.current_active_crtcs) { in radeon_dpm_change_power_state_locked()
1058 if ((rdev->pm.dpm.current_active_crtc_count > 1) && in radeon_dpm_change_power_state_locked()
1059 (rdev->pm.dpm.new_active_crtc_count > 1)) { in radeon_dpm_change_power_state_locked()
1061 radeon_bandwidth_update(rdev); in radeon_dpm_change_power_state_locked()
1063 radeon_dpm_display_configuration_changed(rdev); in radeon_dpm_change_power_state_locked()
1064 rdev->pm.dpm.current_active_crtcs = rdev->pm.dpm.new_active_crtcs; in radeon_dpm_change_power_state_locked()
1065 rdev->pm.dpm.current_active_crtc_count = rdev->pm.dpm.new_active_crtc_count; in radeon_dpm_change_power_state_locked()
1075 radeon_dpm_print_power_state(rdev, rdev->pm.dpm.current_ps); in radeon_dpm_change_power_state_locked()
1077 radeon_dpm_print_power_state(rdev, rdev->pm.dpm.requested_ps); in radeon_dpm_change_power_state_locked()
1080 down_write(&rdev->pm.mclk_lock); in radeon_dpm_change_power_state_locked()
1081 mutex_lock(&rdev->ring_lock); in radeon_dpm_change_power_state_locked()
1084 ps->vce_active = rdev->pm.dpm.vce_active; in radeon_dpm_change_power_state_locked()
1086 ret = radeon_dpm_pre_set_power_state(rdev); in radeon_dpm_change_power_state_locked()
1091 radeon_bandwidth_update(rdev); in radeon_dpm_change_power_state_locked()
1093 radeon_dpm_display_configuration_changed(rdev); in radeon_dpm_change_power_state_locked()
1097 struct radeon_ring *ring = &rdev->ring[i]; in radeon_dpm_change_power_state_locked()
1099 radeon_fence_wait_empty(rdev, i); in radeon_dpm_change_power_state_locked()
1103 radeon_dpm_set_power_state(rdev); in radeon_dpm_change_power_state_locked()
1106 rdev->pm.dpm.current_ps = rdev->pm.dpm.requested_ps; in radeon_dpm_change_power_state_locked()
1108 radeon_dpm_post_set_power_state(rdev); in radeon_dpm_change_power_state_locked()
1110 rdev->pm.dpm.current_active_crtcs = rdev->pm.dpm.new_active_crtcs; in radeon_dpm_change_power_state_locked()
1111 rdev->pm.dpm.current_active_crtc_count = rdev->pm.dpm.new_active_crtc_count; in radeon_dpm_change_power_state_locked()
1112 rdev->pm.dpm.single_display = single_display; in radeon_dpm_change_power_state_locked()
1114 if (rdev->asic->dpm.force_performance_level) { in radeon_dpm_change_power_state_locked()
1115 if (rdev->pm.dpm.thermal_active) { in radeon_dpm_change_power_state_locked()
1116 enum radeon_dpm_forced_level level = rdev->pm.dpm.forced_level; in radeon_dpm_change_power_state_locked()
1118 radeon_dpm_force_performance_level(rdev, RADEON_DPM_FORCED_LEVEL_LOW); in radeon_dpm_change_power_state_locked()
1120 rdev->pm.dpm.forced_level = level; in radeon_dpm_change_power_state_locked()
1123 radeon_dpm_force_performance_level(rdev, rdev->pm.dpm.forced_level); in radeon_dpm_change_power_state_locked()
1128 mutex_unlock(&rdev->ring_lock); in radeon_dpm_change_power_state_locked()
1129 up_write(&rdev->pm.mclk_lock); in radeon_dpm_change_power_state_locked()
1132 void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable) in radeon_dpm_enable_uvd() argument
1136 if (rdev->asic->dpm.powergate_uvd) { in radeon_dpm_enable_uvd()
1137 mutex_lock(&rdev->pm.mutex); in radeon_dpm_enable_uvd()
1140 enable |= rdev->pm.dpm.sd > 0; in radeon_dpm_enable_uvd()
1141 enable |= rdev->pm.dpm.hd > 0; in radeon_dpm_enable_uvd()
1143 radeon_dpm_powergate_uvd(rdev, !enable); in radeon_dpm_enable_uvd()
1144 mutex_unlock(&rdev->pm.mutex); in radeon_dpm_enable_uvd()
1147 mutex_lock(&rdev->pm.mutex); in radeon_dpm_enable_uvd()
1148 rdev->pm.dpm.uvd_active = true; in radeon_dpm_enable_uvd()
1151 if ((rdev->pm.dpm.sd == 1) && (rdev->pm.dpm.hd == 0)) in radeon_dpm_enable_uvd()
1153 else if ((rdev->pm.dpm.sd == 2) && (rdev->pm.dpm.hd == 0)) in radeon_dpm_enable_uvd()
1155 else if ((rdev->pm.dpm.sd == 0) && (rdev->pm.dpm.hd == 1)) in radeon_dpm_enable_uvd()
1157 else if ((rdev->pm.dpm.sd == 0) && (rdev->pm.dpm.hd == 2)) in radeon_dpm_enable_uvd()
1162 rdev->pm.dpm.state = dpm_state; in radeon_dpm_enable_uvd()
1163 mutex_unlock(&rdev->pm.mutex); in radeon_dpm_enable_uvd()
1165 mutex_lock(&rdev->pm.mutex); in radeon_dpm_enable_uvd()
1166 rdev->pm.dpm.uvd_active = false; in radeon_dpm_enable_uvd()
1167 mutex_unlock(&rdev->pm.mutex); in radeon_dpm_enable_uvd()
1170 radeon_pm_compute_clocks(rdev); in radeon_dpm_enable_uvd()
1174 void radeon_dpm_enable_vce(struct radeon_device *rdev, bool enable) in radeon_dpm_enable_vce() argument
1177 mutex_lock(&rdev->pm.mutex); in radeon_dpm_enable_vce()
1178 rdev->pm.dpm.vce_active = true; in radeon_dpm_enable_vce()
1180 rdev->pm.dpm.vce_level = RADEON_VCE_LEVEL_AC_ALL; in radeon_dpm_enable_vce()
1181 mutex_unlock(&rdev->pm.mutex); in radeon_dpm_enable_vce()
1183 mutex_lock(&rdev->pm.mutex); in radeon_dpm_enable_vce()
1184 rdev->pm.dpm.vce_active = false; in radeon_dpm_enable_vce()
1185 mutex_unlock(&rdev->pm.mutex); in radeon_dpm_enable_vce()
1188 radeon_pm_compute_clocks(rdev); in radeon_dpm_enable_vce()
1191 static void radeon_pm_suspend_old(struct radeon_device *rdev) in radeon_pm_suspend_old() argument
1193 mutex_lock(&rdev->pm.mutex); in radeon_pm_suspend_old()
1194 if (rdev->pm.pm_method == PM_METHOD_DYNPM) { in radeon_pm_suspend_old()
1195 if (rdev->pm.dynpm_state == DYNPM_STATE_ACTIVE) in radeon_pm_suspend_old()
1196 rdev->pm.dynpm_state = DYNPM_STATE_SUSPENDED; in radeon_pm_suspend_old()
1198 mutex_unlock(&rdev->pm.mutex); in radeon_pm_suspend_old()
1200 cancel_delayed_work_sync(&rdev->pm.dynpm_idle_work); in radeon_pm_suspend_old()
1203 static void radeon_pm_suspend_dpm(struct radeon_device *rdev) in radeon_pm_suspend_dpm() argument
1205 mutex_lock(&rdev->pm.mutex); in radeon_pm_suspend_dpm()
1207 radeon_dpm_disable(rdev); in radeon_pm_suspend_dpm()
1209 rdev->pm.dpm.current_ps = rdev->pm.dpm.requested_ps = rdev->pm.dpm.boot_ps; in radeon_pm_suspend_dpm()
1210 rdev->pm.dpm_enabled = false; in radeon_pm_suspend_dpm()
1211 mutex_unlock(&rdev->pm.mutex); in radeon_pm_suspend_dpm()
1214 void radeon_pm_suspend(struct radeon_device *rdev) in radeon_pm_suspend() argument
1216 if (rdev->pm.pm_method == PM_METHOD_DPM) in radeon_pm_suspend()
1217 radeon_pm_suspend_dpm(rdev); in radeon_pm_suspend()
1219 radeon_pm_suspend_old(rdev); in radeon_pm_suspend()
1222 static void radeon_pm_resume_old(struct radeon_device *rdev) in radeon_pm_resume_old() argument
1225 if ((rdev->family >= CHIP_BARTS) && in radeon_pm_resume_old()
1226 (rdev->family <= CHIP_CAYMAN) && in radeon_pm_resume_old()
1227 rdev->mc_fw) { in radeon_pm_resume_old()
1228 if (rdev->pm.default_vddc) in radeon_pm_resume_old()
1229 radeon_atom_set_voltage(rdev, rdev->pm.default_vddc, in radeon_pm_resume_old()
1231 if (rdev->pm.default_vddci) in radeon_pm_resume_old()
1232 radeon_atom_set_voltage(rdev, rdev->pm.default_vddci, in radeon_pm_resume_old()
1234 if (rdev->pm.default_sclk) in radeon_pm_resume_old()
1235 radeon_set_engine_clock(rdev, rdev->pm.default_sclk); in radeon_pm_resume_old()
1236 if (rdev->pm.default_mclk) in radeon_pm_resume_old()
1237 radeon_set_memory_clock(rdev, rdev->pm.default_mclk); in radeon_pm_resume_old()
1240 mutex_lock(&rdev->pm.mutex); in radeon_pm_resume_old()
1241 rdev->pm.current_power_state_index = rdev->pm.default_power_state_index; in radeon_pm_resume_old()
1242 rdev->pm.current_clock_mode_index = 0; in radeon_pm_resume_old()
1243 rdev->pm.current_sclk = rdev->pm.default_sclk; in radeon_pm_resume_old()
1244 rdev->pm.current_mclk = rdev->pm.default_mclk; in radeon_pm_resume_old()
1245 if (rdev->pm.power_state) { in radeon_pm_resume_old()
1246 …rdev->pm.current_vddc = rdev->pm.power_state[rdev->pm.default_power_state_index].clock_info[0].vol… in radeon_pm_resume_old()
1247 …rdev->pm.current_vddci = rdev->pm.power_state[rdev->pm.default_power_state_index].clock_info[0].vo… in radeon_pm_resume_old()
1249 if (rdev->pm.pm_method == PM_METHOD_DYNPM in radeon_pm_resume_old()
1250 && rdev->pm.dynpm_state == DYNPM_STATE_SUSPENDED) { in radeon_pm_resume_old()
1251 rdev->pm.dynpm_state = DYNPM_STATE_ACTIVE; in radeon_pm_resume_old()
1252 schedule_delayed_work(&rdev->pm.dynpm_idle_work, in radeon_pm_resume_old()
1255 mutex_unlock(&rdev->pm.mutex); in radeon_pm_resume_old()
1256 radeon_pm_compute_clocks(rdev); in radeon_pm_resume_old()
1259 static void radeon_pm_resume_dpm(struct radeon_device *rdev) in radeon_pm_resume_dpm() argument
1264 mutex_lock(&rdev->pm.mutex); in radeon_pm_resume_dpm()
1265 rdev->pm.dpm.current_ps = rdev->pm.dpm.requested_ps = rdev->pm.dpm.boot_ps; in radeon_pm_resume_dpm()
1266 radeon_dpm_setup_asic(rdev); in radeon_pm_resume_dpm()
1267 ret = radeon_dpm_enable(rdev); in radeon_pm_resume_dpm()
1268 mutex_unlock(&rdev->pm.mutex); in radeon_pm_resume_dpm()
1271 rdev->pm.dpm_enabled = true; in radeon_pm_resume_dpm()
1276 if ((rdev->family >= CHIP_BARTS) && in radeon_pm_resume_dpm()
1277 (rdev->family <= CHIP_CAYMAN) && in radeon_pm_resume_dpm()
1278 rdev->mc_fw) { in radeon_pm_resume_dpm()
1279 if (rdev->pm.default_vddc) in radeon_pm_resume_dpm()
1280 radeon_atom_set_voltage(rdev, rdev->pm.default_vddc, in radeon_pm_resume_dpm()
1282 if (rdev->pm.default_vddci) in radeon_pm_resume_dpm()
1283 radeon_atom_set_voltage(rdev, rdev->pm.default_vddci, in radeon_pm_resume_dpm()
1285 if (rdev->pm.default_sclk) in radeon_pm_resume_dpm()
1286 radeon_set_engine_clock(rdev, rdev->pm.default_sclk); in radeon_pm_resume_dpm()
1287 if (rdev->pm.default_mclk) in radeon_pm_resume_dpm()
1288 radeon_set_memory_clock(rdev, rdev->pm.default_mclk); in radeon_pm_resume_dpm()
1292 void radeon_pm_resume(struct radeon_device *rdev) in radeon_pm_resume() argument
1294 if (rdev->pm.pm_method == PM_METHOD_DPM) in radeon_pm_resume()
1295 radeon_pm_resume_dpm(rdev); in radeon_pm_resume()
1297 radeon_pm_resume_old(rdev); in radeon_pm_resume()
1300 static int radeon_pm_init_old(struct radeon_device *rdev) in radeon_pm_init_old() argument
1304 rdev->pm.profile = PM_PROFILE_DEFAULT; in radeon_pm_init_old()
1305 rdev->pm.dynpm_state = DYNPM_STATE_DISABLED; in radeon_pm_init_old()
1306 rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE; in radeon_pm_init_old()
1307 rdev->pm.dynpm_can_upclock = true; in radeon_pm_init_old()
1308 rdev->pm.dynpm_can_downclock = true; in radeon_pm_init_old()
1309 rdev->pm.default_sclk = rdev->clock.default_sclk; in radeon_pm_init_old()
1310 rdev->pm.default_mclk = rdev->clock.default_mclk; in radeon_pm_init_old()
1311 rdev->pm.current_sclk = rdev->clock.default_sclk; in radeon_pm_init_old()
1312 rdev->pm.current_mclk = rdev->clock.default_mclk; in radeon_pm_init_old()
1313 rdev->pm.int_thermal_type = THERMAL_TYPE_NONE; in radeon_pm_init_old()
1315 if (rdev->bios) { in radeon_pm_init_old()
1316 if (rdev->is_atom_bios) in radeon_pm_init_old()
1317 radeon_atombios_get_power_modes(rdev); in radeon_pm_init_old()
1319 radeon_combios_get_power_modes(rdev); in radeon_pm_init_old()
1320 radeon_pm_print_states(rdev); in radeon_pm_init_old()
1321 radeon_pm_init_profile(rdev); in radeon_pm_init_old()
1323 if ((rdev->family >= CHIP_BARTS) && in radeon_pm_init_old()
1324 (rdev->family <= CHIP_CAYMAN) && in radeon_pm_init_old()
1325 rdev->mc_fw) { in radeon_pm_init_old()
1326 if (rdev->pm.default_vddc) in radeon_pm_init_old()
1327 radeon_atom_set_voltage(rdev, rdev->pm.default_vddc, in radeon_pm_init_old()
1329 if (rdev->pm.default_vddci) in radeon_pm_init_old()
1330 radeon_atom_set_voltage(rdev, rdev->pm.default_vddci, in radeon_pm_init_old()
1332 if (rdev->pm.default_sclk) in radeon_pm_init_old()
1333 radeon_set_engine_clock(rdev, rdev->pm.default_sclk); in radeon_pm_init_old()
1334 if (rdev->pm.default_mclk) in radeon_pm_init_old()
1335 radeon_set_memory_clock(rdev, rdev->pm.default_mclk); in radeon_pm_init_old()
1340 ret = radeon_hwmon_init(rdev); in radeon_pm_init_old()
1344 INIT_DELAYED_WORK(&rdev->pm.dynpm_idle_work, radeon_dynpm_idle_work_handler); in radeon_pm_init_old()
1346 if (rdev->pm.num_power_states > 1) { in radeon_pm_init_old()
1347 if (radeon_debugfs_pm_init(rdev)) { in radeon_pm_init_old()
1357 static void radeon_dpm_print_power_states(struct radeon_device *rdev) in radeon_dpm_print_power_states() argument
1361 for (i = 0; i < rdev->pm.dpm.num_ps; i++) { in radeon_dpm_print_power_states()
1363 radeon_dpm_print_power_state(rdev, &rdev->pm.dpm.ps[i]); in radeon_dpm_print_power_states()
1367 static int radeon_pm_init_dpm(struct radeon_device *rdev) in radeon_pm_init_dpm() argument
1372 rdev->pm.dpm.state = POWER_STATE_TYPE_BALANCED; in radeon_pm_init_dpm()
1373 rdev->pm.dpm.user_state = POWER_STATE_TYPE_BALANCED; in radeon_pm_init_dpm()
1374 rdev->pm.dpm.forced_level = RADEON_DPM_FORCED_LEVEL_AUTO; in radeon_pm_init_dpm()
1375 rdev->pm.default_sclk = rdev->clock.default_sclk; in radeon_pm_init_dpm()
1376 rdev->pm.default_mclk = rdev->clock.default_mclk; in radeon_pm_init_dpm()
1377 rdev->pm.current_sclk = rdev->clock.default_sclk; in radeon_pm_init_dpm()
1378 rdev->pm.current_mclk = rdev->clock.default_mclk; in radeon_pm_init_dpm()
1379 rdev->pm.int_thermal_type = THERMAL_TYPE_NONE; in radeon_pm_init_dpm()
1381 if (rdev->bios && rdev->is_atom_bios) in radeon_pm_init_dpm()
1382 radeon_atombios_get_power_modes(rdev); in radeon_pm_init_dpm()
1387 ret = radeon_hwmon_init(rdev); in radeon_pm_init_dpm()
1391 INIT_WORK(&rdev->pm.dpm.thermal.work, radeon_dpm_thermal_work_handler); in radeon_pm_init_dpm()
1392 mutex_lock(&rdev->pm.mutex); in radeon_pm_init_dpm()
1393 radeon_dpm_init(rdev); in radeon_pm_init_dpm()
1394 rdev->pm.dpm.current_ps = rdev->pm.dpm.requested_ps = rdev->pm.dpm.boot_ps; in radeon_pm_init_dpm()
1396 radeon_dpm_print_power_states(rdev); in radeon_pm_init_dpm()
1397 radeon_dpm_setup_asic(rdev); in radeon_pm_init_dpm()
1398 ret = radeon_dpm_enable(rdev); in radeon_pm_init_dpm()
1399 mutex_unlock(&rdev->pm.mutex); in radeon_pm_init_dpm()
1402 rdev->pm.dpm_enabled = true; in radeon_pm_init_dpm()
1404 if (radeon_debugfs_pm_init(rdev)) { in radeon_pm_init_dpm()
1413 rdev->pm.dpm_enabled = false; in radeon_pm_init_dpm()
1414 if ((rdev->family >= CHIP_BARTS) && in radeon_pm_init_dpm()
1415 (rdev->family <= CHIP_CAYMAN) && in radeon_pm_init_dpm()
1416 rdev->mc_fw) { in radeon_pm_init_dpm()
1417 if (rdev->pm.default_vddc) in radeon_pm_init_dpm()
1418 radeon_atom_set_voltage(rdev, rdev->pm.default_vddc, in radeon_pm_init_dpm()
1420 if (rdev->pm.default_vddci) in radeon_pm_init_dpm()
1421 radeon_atom_set_voltage(rdev, rdev->pm.default_vddci, in radeon_pm_init_dpm()
1423 if (rdev->pm.default_sclk) in radeon_pm_init_dpm()
1424 radeon_set_engine_clock(rdev, rdev->pm.default_sclk); in radeon_pm_init_dpm()
1425 if (rdev->pm.default_mclk) in radeon_pm_init_dpm()
1426 radeon_set_memory_clock(rdev, rdev->pm.default_mclk); in radeon_pm_init_dpm()
1448 int radeon_pm_init(struct radeon_device *rdev) in radeon_pm_init() argument
1455 if (rdev->pdev->vendor == p->chip_vendor && in radeon_pm_init()
1456 rdev->pdev->device == p->chip_device && in radeon_pm_init()
1457 rdev->pdev->subsystem_vendor == p->subsys_vendor && in radeon_pm_init()
1458 rdev->pdev->subsystem_device == p->subsys_device) { in radeon_pm_init()
1466 switch (rdev->family) { in radeon_pm_init()
1476 if (!rdev->rlc_fw) in radeon_pm_init()
1477 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_pm_init()
1478 else if ((rdev->family >= CHIP_RV770) && in radeon_pm_init()
1479 (!(rdev->flags & RADEON_IS_IGP)) && in radeon_pm_init()
1480 (!rdev->smc_fw)) in radeon_pm_init()
1481 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_pm_init()
1483 rdev->pm.pm_method = PM_METHOD_DPM; in radeon_pm_init()
1485 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_pm_init()
1514 if (!rdev->rlc_fw) in radeon_pm_init()
1515 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_pm_init()
1516 else if ((rdev->family >= CHIP_RV770) && in radeon_pm_init()
1517 (!(rdev->flags & RADEON_IS_IGP)) && in radeon_pm_init()
1518 (!rdev->smc_fw)) in radeon_pm_init()
1519 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_pm_init()
1521 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_pm_init()
1523 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_pm_init()
1525 rdev->pm.pm_method = PM_METHOD_DPM; in radeon_pm_init()
1529 rdev->pm.pm_method = PM_METHOD_PROFILE; in radeon_pm_init()
1533 if (rdev->pm.pm_method == PM_METHOD_DPM) in radeon_pm_init()
1534 return radeon_pm_init_dpm(rdev); in radeon_pm_init()
1536 return radeon_pm_init_old(rdev); in radeon_pm_init()
1539 int radeon_pm_late_init(struct radeon_device *rdev) in radeon_pm_late_init() argument
1543 if (rdev->pm.pm_method == PM_METHOD_DPM) { in radeon_pm_late_init()
1544 if (rdev->pm.dpm_enabled) { in radeon_pm_late_init()
1545 if (!rdev->pm.sysfs_initialized) { in radeon_pm_late_init()
1546 ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state); in radeon_pm_late_init()
1549 ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level); in radeon_pm_late_init()
1553 ret = device_create_file(rdev->dev, &dev_attr_power_profile); in radeon_pm_late_init()
1556 ret = device_create_file(rdev->dev, &dev_attr_power_method); in radeon_pm_late_init()
1559 rdev->pm.sysfs_initialized = true; in radeon_pm_late_init()
1562 mutex_lock(&rdev->pm.mutex); in radeon_pm_late_init()
1563 ret = radeon_dpm_late_enable(rdev); in radeon_pm_late_init()
1564 mutex_unlock(&rdev->pm.mutex); in radeon_pm_late_init()
1566 rdev->pm.dpm_enabled = false; in radeon_pm_late_init()
1572 radeon_pm_compute_clocks(rdev); in radeon_pm_late_init()
1576 if ((rdev->pm.num_power_states > 1) && in radeon_pm_late_init()
1577 (!rdev->pm.sysfs_initialized)) { in radeon_pm_late_init()
1579 ret = device_create_file(rdev->dev, &dev_attr_power_profile); in radeon_pm_late_init()
1582 ret = device_create_file(rdev->dev, &dev_attr_power_method); in radeon_pm_late_init()
1586 rdev->pm.sysfs_initialized = true; in radeon_pm_late_init()
1592 static void radeon_pm_fini_old(struct radeon_device *rdev) in radeon_pm_fini_old() argument
1594 if (rdev->pm.num_power_states > 1) { in radeon_pm_fini_old()
1595 mutex_lock(&rdev->pm.mutex); in radeon_pm_fini_old()
1596 if (rdev->pm.pm_method == PM_METHOD_PROFILE) { in radeon_pm_fini_old()
1597 rdev->pm.profile = PM_PROFILE_DEFAULT; in radeon_pm_fini_old()
1598 radeon_pm_update_profile(rdev); in radeon_pm_fini_old()
1599 radeon_pm_set_clocks(rdev); in radeon_pm_fini_old()
1600 } else if (rdev->pm.pm_method == PM_METHOD_DYNPM) { in radeon_pm_fini_old()
1602 rdev->pm.dynpm_state = DYNPM_STATE_DISABLED; in radeon_pm_fini_old()
1603 rdev->pm.dynpm_planned_action = DYNPM_ACTION_DEFAULT; in radeon_pm_fini_old()
1604 radeon_pm_set_clocks(rdev); in radeon_pm_fini_old()
1606 mutex_unlock(&rdev->pm.mutex); in radeon_pm_fini_old()
1608 cancel_delayed_work_sync(&rdev->pm.dynpm_idle_work); in radeon_pm_fini_old()
1610 device_remove_file(rdev->dev, &dev_attr_power_profile); in radeon_pm_fini_old()
1611 device_remove_file(rdev->dev, &dev_attr_power_method); in radeon_pm_fini_old()
1614 radeon_hwmon_fini(rdev); in radeon_pm_fini_old()
1615 kfree(rdev->pm.power_state); in radeon_pm_fini_old()
1618 static void radeon_pm_fini_dpm(struct radeon_device *rdev) in radeon_pm_fini_dpm() argument
1620 if (rdev->pm.num_power_states > 1) { in radeon_pm_fini_dpm()
1621 mutex_lock(&rdev->pm.mutex); in radeon_pm_fini_dpm()
1622 radeon_dpm_disable(rdev); in radeon_pm_fini_dpm()
1623 mutex_unlock(&rdev->pm.mutex); in radeon_pm_fini_dpm()
1625 device_remove_file(rdev->dev, &dev_attr_power_dpm_state); in radeon_pm_fini_dpm()
1626 device_remove_file(rdev->dev, &dev_attr_power_dpm_force_performance_level); in radeon_pm_fini_dpm()
1628 device_remove_file(rdev->dev, &dev_attr_power_profile); in radeon_pm_fini_dpm()
1629 device_remove_file(rdev->dev, &dev_attr_power_method); in radeon_pm_fini_dpm()
1631 radeon_dpm_fini(rdev); in radeon_pm_fini_dpm()
1633 radeon_hwmon_fini(rdev); in radeon_pm_fini_dpm()
1634 kfree(rdev->pm.power_state); in radeon_pm_fini_dpm()
1637 void radeon_pm_fini(struct radeon_device *rdev) in radeon_pm_fini() argument
1639 if (rdev->pm.pm_method == PM_METHOD_DPM) in radeon_pm_fini()
1640 radeon_pm_fini_dpm(rdev); in radeon_pm_fini()
1642 radeon_pm_fini_old(rdev); in radeon_pm_fini()
1645 static void radeon_pm_compute_clocks_old(struct radeon_device *rdev) in radeon_pm_compute_clocks_old() argument
1647 struct drm_device *ddev = rdev->ddev; in radeon_pm_compute_clocks_old()
1651 if (rdev->pm.num_power_states < 2) in radeon_pm_compute_clocks_old()
1654 mutex_lock(&rdev->pm.mutex); in radeon_pm_compute_clocks_old()
1656 rdev->pm.active_crtcs = 0; in radeon_pm_compute_clocks_old()
1657 rdev->pm.active_crtc_count = 0; in radeon_pm_compute_clocks_old()
1658 if (rdev->num_crtc && rdev->mode_info.mode_config_initialized) { in radeon_pm_compute_clocks_old()
1663 rdev->pm.active_crtcs |= (1 << radeon_crtc->crtc_id); in radeon_pm_compute_clocks_old()
1664 rdev->pm.active_crtc_count++; in radeon_pm_compute_clocks_old()
1669 if (rdev->pm.pm_method == PM_METHOD_PROFILE) { in radeon_pm_compute_clocks_old()
1670 radeon_pm_update_profile(rdev); in radeon_pm_compute_clocks_old()
1671 radeon_pm_set_clocks(rdev); in radeon_pm_compute_clocks_old()
1672 } else if (rdev->pm.pm_method == PM_METHOD_DYNPM) { in radeon_pm_compute_clocks_old()
1673 if (rdev->pm.dynpm_state != DYNPM_STATE_DISABLED) { in radeon_pm_compute_clocks_old()
1674 if (rdev->pm.active_crtc_count > 1) { in radeon_pm_compute_clocks_old()
1675 if (rdev->pm.dynpm_state == DYNPM_STATE_ACTIVE) { in radeon_pm_compute_clocks_old()
1676 cancel_delayed_work(&rdev->pm.dynpm_idle_work); in radeon_pm_compute_clocks_old()
1678 rdev->pm.dynpm_state = DYNPM_STATE_PAUSED; in radeon_pm_compute_clocks_old()
1679 rdev->pm.dynpm_planned_action = DYNPM_ACTION_DEFAULT; in radeon_pm_compute_clocks_old()
1680 radeon_pm_get_dynpm_state(rdev); in radeon_pm_compute_clocks_old()
1681 radeon_pm_set_clocks(rdev); in radeon_pm_compute_clocks_old()
1685 } else if (rdev->pm.active_crtc_count == 1) { in radeon_pm_compute_clocks_old()
1688 if (rdev->pm.dynpm_state == DYNPM_STATE_MINIMUM) { in radeon_pm_compute_clocks_old()
1689 rdev->pm.dynpm_state = DYNPM_STATE_ACTIVE; in radeon_pm_compute_clocks_old()
1690 rdev->pm.dynpm_planned_action = DYNPM_ACTION_UPCLOCK; in radeon_pm_compute_clocks_old()
1691 radeon_pm_get_dynpm_state(rdev); in radeon_pm_compute_clocks_old()
1692 radeon_pm_set_clocks(rdev); in radeon_pm_compute_clocks_old()
1694 schedule_delayed_work(&rdev->pm.dynpm_idle_work, in radeon_pm_compute_clocks_old()
1696 } else if (rdev->pm.dynpm_state == DYNPM_STATE_PAUSED) { in radeon_pm_compute_clocks_old()
1697 rdev->pm.dynpm_state = DYNPM_STATE_ACTIVE; in radeon_pm_compute_clocks_old()
1698 schedule_delayed_work(&rdev->pm.dynpm_idle_work, in radeon_pm_compute_clocks_old()
1703 if (rdev->pm.dynpm_state != DYNPM_STATE_MINIMUM) { in radeon_pm_compute_clocks_old()
1704 cancel_delayed_work(&rdev->pm.dynpm_idle_work); in radeon_pm_compute_clocks_old()
1706 rdev->pm.dynpm_state = DYNPM_STATE_MINIMUM; in radeon_pm_compute_clocks_old()
1707 rdev->pm.dynpm_planned_action = DYNPM_ACTION_MINIMUM; in radeon_pm_compute_clocks_old()
1708 radeon_pm_get_dynpm_state(rdev); in radeon_pm_compute_clocks_old()
1709 radeon_pm_set_clocks(rdev); in radeon_pm_compute_clocks_old()
1715 mutex_unlock(&rdev->pm.mutex); in radeon_pm_compute_clocks_old()
1718 static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev) in radeon_pm_compute_clocks_dpm() argument
1720 struct drm_device *ddev = rdev->ddev; in radeon_pm_compute_clocks_dpm()
1724 if (!rdev->pm.dpm_enabled) in radeon_pm_compute_clocks_dpm()
1727 mutex_lock(&rdev->pm.mutex); in radeon_pm_compute_clocks_dpm()
1730 rdev->pm.dpm.new_active_crtcs = 0; in radeon_pm_compute_clocks_dpm()
1731 rdev->pm.dpm.new_active_crtc_count = 0; in radeon_pm_compute_clocks_dpm()
1732 if (rdev->num_crtc && rdev->mode_info.mode_config_initialized) { in radeon_pm_compute_clocks_dpm()
1737 rdev->pm.dpm.new_active_crtcs |= (1 << radeon_crtc->crtc_id); in radeon_pm_compute_clocks_dpm()
1738 rdev->pm.dpm.new_active_crtc_count++; in radeon_pm_compute_clocks_dpm()
1745 rdev->pm.dpm.ac_power = true; in radeon_pm_compute_clocks_dpm()
1747 rdev->pm.dpm.ac_power = false; in radeon_pm_compute_clocks_dpm()
1749 radeon_dpm_change_power_state_locked(rdev); in radeon_pm_compute_clocks_dpm()
1751 mutex_unlock(&rdev->pm.mutex); in radeon_pm_compute_clocks_dpm()
1755 void radeon_pm_compute_clocks(struct radeon_device *rdev) in radeon_pm_compute_clocks() argument
1757 if (rdev->pm.pm_method == PM_METHOD_DPM) in radeon_pm_compute_clocks()
1758 radeon_pm_compute_clocks_dpm(rdev); in radeon_pm_compute_clocks()
1760 radeon_pm_compute_clocks_old(rdev); in radeon_pm_compute_clocks()
1763 static bool radeon_pm_in_vbl(struct radeon_device *rdev) in radeon_pm_in_vbl() argument
1771 for (crtc = 0; (crtc < rdev->num_crtc) && in_vbl; crtc++) { in radeon_pm_in_vbl()
1772 if (rdev->pm.active_crtcs & (1 << crtc)) { in radeon_pm_in_vbl()
1773 vbl_status = radeon_get_crtc_scanoutpos(rdev->ddev, in radeon_pm_in_vbl()
1777 &rdev->mode_info.crtcs[crtc]->base.hwmode); in radeon_pm_in_vbl()
1787 static bool radeon_pm_debug_check_in_vbl(struct radeon_device *rdev, bool finish) in radeon_pm_debug_check_in_vbl() argument
1790 bool in_vbl = radeon_pm_in_vbl(rdev); in radeon_pm_debug_check_in_vbl()
1800 struct radeon_device *rdev; in radeon_dynpm_idle_work_handler() local
1802 rdev = container_of(work, struct radeon_device, in radeon_dynpm_idle_work_handler()
1805 resched = ttm_bo_lock_delayed_workqueue(&rdev->mman.bdev); in radeon_dynpm_idle_work_handler()
1806 mutex_lock(&rdev->pm.mutex); in radeon_dynpm_idle_work_handler()
1807 if (rdev->pm.dynpm_state == DYNPM_STATE_ACTIVE) { in radeon_dynpm_idle_work_handler()
1812 struct radeon_ring *ring = &rdev->ring[i]; in radeon_dynpm_idle_work_handler()
1815 not_processed += radeon_fence_count_emitted(rdev, i); in radeon_dynpm_idle_work_handler()
1822 if (rdev->pm.dynpm_planned_action == DYNPM_ACTION_DOWNCLOCK) { in radeon_dynpm_idle_work_handler()
1823 rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE; in radeon_dynpm_idle_work_handler()
1824 } else if (rdev->pm.dynpm_planned_action == DYNPM_ACTION_NONE && in radeon_dynpm_idle_work_handler()
1825 rdev->pm.dynpm_can_upclock) { in radeon_dynpm_idle_work_handler()
1826 rdev->pm.dynpm_planned_action = in radeon_dynpm_idle_work_handler()
1828 rdev->pm.dynpm_action_timeout = jiffies + in radeon_dynpm_idle_work_handler()
1832 if (rdev->pm.dynpm_planned_action == DYNPM_ACTION_UPCLOCK) { in radeon_dynpm_idle_work_handler()
1833 rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE; in radeon_dynpm_idle_work_handler()
1834 } else if (rdev->pm.dynpm_planned_action == DYNPM_ACTION_NONE && in radeon_dynpm_idle_work_handler()
1835 rdev->pm.dynpm_can_downclock) { in radeon_dynpm_idle_work_handler()
1836 rdev->pm.dynpm_planned_action = in radeon_dynpm_idle_work_handler()
1838 rdev->pm.dynpm_action_timeout = jiffies + in radeon_dynpm_idle_work_handler()
1846 if (rdev->pm.dynpm_planned_action != DYNPM_ACTION_NONE && in radeon_dynpm_idle_work_handler()
1847 jiffies > rdev->pm.dynpm_action_timeout) { in radeon_dynpm_idle_work_handler()
1848 radeon_pm_get_dynpm_state(rdev); in radeon_dynpm_idle_work_handler()
1849 radeon_pm_set_clocks(rdev); in radeon_dynpm_idle_work_handler()
1852 schedule_delayed_work(&rdev->pm.dynpm_idle_work, in radeon_dynpm_idle_work_handler()
1855 mutex_unlock(&rdev->pm.mutex); in radeon_dynpm_idle_work_handler()
1856 ttm_bo_unlock_delayed_workqueue(&rdev->mman.bdev, resched); in radeon_dynpm_idle_work_handler()
1868 struct radeon_device *rdev = dev->dev_private; in radeon_debugfs_pm_info() local
1869 struct drm_device *ddev = rdev->ddev; in radeon_debugfs_pm_info()
1871 if ((rdev->flags & RADEON_IS_PX) && in radeon_debugfs_pm_info()
1874 } else if (rdev->pm.dpm_enabled) { in radeon_debugfs_pm_info()
1875 mutex_lock(&rdev->pm.mutex); in radeon_debugfs_pm_info()
1876 if (rdev->asic->dpm.debugfs_print_current_performance_level) in radeon_debugfs_pm_info()
1877 radeon_dpm_debugfs_print_current_performance_level(rdev, m); in radeon_debugfs_pm_info()
1880 mutex_unlock(&rdev->pm.mutex); in radeon_debugfs_pm_info()
1882 seq_printf(m, "default engine clock: %u0 kHz\n", rdev->pm.default_sclk); in radeon_debugfs_pm_info()
1884 if ((rdev->family >= CHIP_PALM) && (rdev->flags & RADEON_IS_IGP)) in radeon_debugfs_pm_info()
1885 seq_printf(m, "current engine clock: %u0 kHz\n", rdev->pm.current_sclk); in radeon_debugfs_pm_info()
1887 seq_printf(m, "current engine clock: %u0 kHz\n", radeon_get_engine_clock(rdev)); in radeon_debugfs_pm_info()
1888 seq_printf(m, "default memory clock: %u0 kHz\n", rdev->pm.default_mclk); in radeon_debugfs_pm_info()
1889 if (rdev->asic->pm.get_memory_clock) in radeon_debugfs_pm_info()
1890 seq_printf(m, "current memory clock: %u0 kHz\n", radeon_get_memory_clock(rdev)); in radeon_debugfs_pm_info()
1891 if (rdev->pm.current_vddc) in radeon_debugfs_pm_info()
1892 seq_printf(m, "voltage: %u mV\n", rdev->pm.current_vddc); in radeon_debugfs_pm_info()
1893 if (rdev->asic->pm.get_pcie_lanes) in radeon_debugfs_pm_info()
1894 seq_printf(m, "PCIE lanes: %d\n", radeon_get_pcie_lanes(rdev)); in radeon_debugfs_pm_info()
1905 static int radeon_debugfs_pm_init(struct radeon_device *rdev) in radeon_debugfs_pm_init() argument
1908 return radeon_debugfs_add_files(rdev, radeon_pm_info_list, ARRAY_SIZE(radeon_pm_info_list)); in radeon_debugfs_pm_init()