31 #define RADEON_IDLE_LOOP_MS 100
32 #define RADEON_RECLOCK_DELAY_MS 200
33 #define RADEON_WAIT_VBLANK_TIMEOUT 200
35 static const char *radeon_pm_state_type_name[5] = {
46 static bool radeon_pm_debug_check_in_vbl(
struct radeon_device *
rdev,
bool finish);
55 int found_instance = -1;
57 for (i = 0; i < rdev->
pm.num_power_states; i++) {
58 if (rdev->
pm.power_state[i].type == ps_type) {
60 if (found_instance == instance)
65 return rdev->
pm.default_power_state_index;
73 radeon_pm_update_profile(rdev);
74 radeon_pm_set_clocks(rdev);
82 switch (rdev->
pm.profile) {
88 if (rdev->
pm.active_crtc_count > 1)
93 if (rdev->
pm.active_crtc_count > 1)
100 if (rdev->
pm.active_crtc_count > 1)
106 if (rdev->
pm.active_crtc_count > 1)
112 if (rdev->
pm.active_crtc_count > 1)
119 if (rdev->
pm.active_crtc_count == 0) {
120 rdev->
pm.requested_power_state_index =
121 rdev->
pm.profiles[rdev->
pm.profile_index].dpms_off_ps_idx;
122 rdev->
pm.requested_clock_mode_index =
123 rdev->
pm.profiles[rdev->
pm.profile_index].dpms_off_cm_idx;
125 rdev->
pm.requested_power_state_index =
126 rdev->
pm.profiles[rdev->
pm.profile_index].dpms_on_ps_idx;
127 rdev->
pm.requested_clock_mode_index =
128 rdev->
pm.profiles[rdev->
pm.profile_index].dpms_on_cm_idx;
132 static void radeon_unmap_vram_bos(
struct radeon_device *rdev)
136 if (list_empty(&rdev->
gem.objects))
145 static void radeon_sync_with_vblank(
struct radeon_device *rdev)
147 if (rdev->
pm.active_crtcs) {
148 rdev->
pm.vblank_sync =
false;
150 rdev->
irq.vblank_queue, rdev->
pm.vblank_sync,
155 static void radeon_set_power_state(
struct radeon_device *rdev)
158 bool misc_after =
false;
160 if ((rdev->
pm.requested_clock_mode_index == rdev->
pm.current_clock_mode_index) &&
161 (rdev->
pm.requested_power_state_index == rdev->
pm.current_power_state_index))
165 sclk = rdev->
pm.power_state[rdev->
pm.requested_power_state_index].
166 clock_info[rdev->
pm.requested_clock_mode_index].sclk;
167 if (sclk > rdev->
pm.default_sclk)
168 sclk = rdev->
pm.default_sclk;
176 rdev->
pm.active_crtc_count &&
179 mclk = rdev->
pm.power_state[rdev->
pm.requested_power_state_index].
182 mclk = rdev->
pm.power_state[rdev->
pm.requested_power_state_index].
183 clock_info[rdev->
pm.requested_clock_mode_index].mclk;
185 if (mclk > rdev->
pm.default_mclk)
186 mclk = rdev->
pm.default_mclk;
189 if (sclk < rdev->
pm.current_sclk)
192 radeon_sync_with_vblank(rdev);
195 if (!radeon_pm_in_vbl(rdev))
206 if (sclk != rdev->
pm.current_sclk) {
207 radeon_pm_debug_check_in_vbl(rdev,
false);
209 radeon_pm_debug_check_in_vbl(rdev,
true);
210 rdev->
pm.current_sclk =
sclk;
211 DRM_DEBUG_DRIVER(
"Setting: e: %d\n", sclk);
215 if (rdev->
asic->pm.set_memory_clock && (mclk != rdev->
pm.current_mclk)) {
216 radeon_pm_debug_check_in_vbl(rdev,
false);
218 radeon_pm_debug_check_in_vbl(rdev,
true);
219 rdev->
pm.current_mclk =
mclk;
220 DRM_DEBUG_DRIVER(
"Setting: m: %d\n", mclk);
229 rdev->
pm.current_power_state_index = rdev->
pm.requested_power_state_index;
230 rdev->
pm.current_clock_mode_index = rdev->
pm.requested_clock_mode_index;
232 DRM_DEBUG_DRIVER(
"pm: GUI not idle!!!\n");
240 if ((rdev->
pm.requested_clock_mode_index == rdev->
pm.current_clock_mode_index) &&
241 (rdev->
pm.requested_power_state_index == rdev->
pm.current_power_state_index))
255 radeon_unmap_vram_bos(rdev);
257 if (rdev->
irq.installed) {
258 for (i = 0; i < rdev->
num_crtc; i++) {
259 if (rdev->
pm.active_crtcs & (1 << i)) {
260 rdev->
pm.req_vblank |= (1 <<
i);
266 radeon_set_power_state(rdev);
268 if (rdev->
irq.installed) {
269 for (i = 0; i < rdev->
num_crtc; i++) {
270 if (rdev->
pm.req_vblank & (1 << i)) {
271 rdev->
pm.req_vblank &= ~(1 <<
i);
279 if (rdev->
pm.active_crtc_count)
289 static void radeon_pm_print_states(
struct radeon_device *rdev)
295 DRM_DEBUG_DRIVER(
"%d Power State(s)\n", rdev->
pm.num_power_states);
296 for (i = 0; i < rdev->
pm.num_power_states; i++) {
297 power_state = &rdev->
pm.power_state[
i];
298 DRM_DEBUG_DRIVER(
"State %d: %s\n", i,
299 radeon_pm_state_type_name[power_state->
type]);
300 if (i == rdev->
pm.default_power_state_index)
301 DRM_DEBUG_DRIVER(
"\tDefault");
303 DRM_DEBUG_DRIVER(
"\t%d PCIE Lanes\n", power_state->
pcie_lanes);
305 DRM_DEBUG_DRIVER(
"\tSingle display only\n");
306 DRM_DEBUG_DRIVER(
"\t%d Clock Mode(s)\n", power_state->
num_clock_modes);
310 DRM_DEBUG_DRIVER(
"\t\t%d e: %d\n",
312 clock_info->
sclk * 10);
314 DRM_DEBUG_DRIVER(
"\t\t%d e: %d\tm: %d\tv: %d\n",
316 clock_info->
sclk * 10,
317 clock_info->
mclk * 10,
329 int cp = rdev->
pm.profile;
362 radeon_pm_update_profile(rdev);
363 radeon_pm_set_clocks(rdev);
379 int pm = rdev->
pm.pm_method;
400 }
else if (
strncmp(
"profile", buf,
strlen(
"profile")) == 0) {
428 switch (rdev->
pm.int_thermal_type) {
457 return sprintf(buf,
"radeon\n");
463 static struct attribute *hwmon_attributes[] = {
464 &sensor_dev_attr_temp1_input.dev_attr.attr,
465 &sensor_dev_attr_name.dev_attr.attr,
470 .attrs = hwmon_attributes,
477 rdev->
pm.int_hwmon_dev =
NULL;
479 switch (rdev->
pm.int_thermal_type) {
490 if (IS_ERR(rdev->
pm.int_hwmon_dev)) {
491 err = PTR_ERR(rdev->
pm.int_hwmon_dev);
493 "Unable to register hwmon device: %d\n", err);
501 "Unable to create hwmon sysfs file: %d\n", err);
514 if (rdev->
pm.int_hwmon_dev) {
538 if (rdev->
pm.default_vddc)
541 if (rdev->
pm.default_vddci)
544 if (rdev->
pm.default_sclk)
546 if (rdev->
pm.default_mclk)
551 rdev->
pm.current_power_state_index = rdev->
pm.default_power_state_index;
552 rdev->
pm.current_clock_mode_index = 0;
553 rdev->
pm.current_sclk = rdev->
pm.default_sclk;
554 rdev->
pm.current_mclk = rdev->
pm.default_mclk;
555 rdev->
pm.current_vddc = rdev->
pm.power_state[rdev->
pm.default_power_state_index].clock_info[0].voltage.voltage;
556 rdev->
pm.current_vddci = rdev->
pm.power_state[rdev->
pm.default_power_state_index].clock_info[0].voltage.vddci;
576 rdev->
pm.dynpm_can_upclock =
true;
577 rdev->
pm.dynpm_can_downclock =
true;
578 rdev->
pm.default_sclk = rdev->
clock.default_sclk;
579 rdev->
pm.default_mclk = rdev->
clock.default_mclk;
580 rdev->
pm.current_sclk = rdev->
clock.default_sclk;
581 rdev->
pm.current_mclk = rdev->
clock.default_mclk;
589 radeon_pm_print_states(rdev);
595 if (rdev->
pm.default_vddc)
598 if (rdev->
pm.default_vddci)
601 if (rdev->
pm.default_sclk)
603 if (rdev->
pm.default_mclk)
609 ret = radeon_hwmon_init(rdev);
615 if (rdev->
pm.num_power_states > 1) {
619 DRM_ERROR(
"failed to create device file for power profile\n");
622 DRM_ERROR(
"failed to create device file for power method\n");
624 if (radeon_debugfs_pm_init(rdev)) {
625 DRM_ERROR(
"Failed to register debugfs file for PM!\n");
628 DRM_INFO(
"radeon: power management initialized\n");
636 if (rdev->
pm.num_power_states > 1) {
640 radeon_pm_update_profile(rdev);
641 radeon_pm_set_clocks(rdev);
646 radeon_pm_set_clocks(rdev);
656 if (rdev->
pm.power_state)
659 radeon_hwmon_fini(rdev);
668 if (rdev->
pm.num_power_states < 2)
673 rdev->
pm.active_crtcs = 0;
674 rdev->
pm.active_crtc_count = 0;
676 &ddev->mode_config.crtc_list,
head) {
679 rdev->
pm.active_crtcs |= (1 << radeon_crtc->
crtc_id);
680 rdev->
pm.active_crtc_count++;
685 radeon_pm_update_profile(rdev);
686 radeon_pm_set_clocks(rdev);
689 if (rdev->
pm.active_crtc_count > 1) {
696 radeon_pm_set_clocks(rdev);
698 DRM_DEBUG_DRIVER(
"radeon: dynamic power management deactivated\n");
700 }
else if (rdev->
pm.active_crtc_count == 1) {
707 radeon_pm_set_clocks(rdev);
715 DRM_DEBUG_DRIVER(
"radeon: dynamic power management activated\n");
724 radeon_pm_set_clocks(rdev);
741 for (crtc = 0; (crtc < rdev->
num_crtc) && in_vbl; crtc++) {
742 if (rdev->
pm.active_crtcs & (1 << crtc)) {
744 if ((vbl_status & DRM_SCANOUTPOS_VALID) &&
745 !(vbl_status & DRM_SCANOUTPOS_INVBL))
753 static bool radeon_pm_debug_check_in_vbl(
struct radeon_device *rdev,
bool finish)
756 bool in_vbl = radeon_pm_in_vbl(rdev);
759 DRM_DEBUG_DRIVER(
"not in vbl for pm change %08x at %s\n", stat_crtc,
760 finish ?
"exit" :
"entry");
769 pm.dynpm_idle_work.work);
774 int not_processed = 0;
782 if (not_processed >= 3)
787 if (not_processed >= 3) {
791 rdev->
pm.dynpm_can_upclock) {
792 rdev->
pm.dynpm_planned_action =
794 rdev->
pm.dynpm_action_timeout =
jiffies +
797 }
else if (not_processed == 0) {
801 rdev->
pm.dynpm_can_downclock) {
802 rdev->
pm.dynpm_planned_action =
804 rdev->
pm.dynpm_action_timeout =
jiffies +
813 jiffies > rdev->
pm.dynpm_action_timeout) {
815 radeon_pm_set_clocks(rdev);
828 #if defined(CONFIG_DEBUG_FS)
830 static int radeon_debugfs_pm_info(
struct seq_file *
m,
void *
data)
832 struct drm_info_node *
node = (
struct drm_info_node *) m->
private;
836 seq_printf(m,
"default engine clock: %u0 kHz\n", rdev->
pm.default_sclk);
838 seq_printf(m,
"default memory clock: %u0 kHz\n", rdev->
pm.default_mclk);
839 if (rdev->
asic->pm.get_memory_clock)
841 if (rdev->
pm.current_vddc)
842 seq_printf(m,
"voltage: %u mV\n", rdev->
pm.current_vddc);
843 if (rdev->
asic->pm.get_pcie_lanes)
849 static struct drm_info_list radeon_pm_info_list[] = {
850 {
"radeon_pm_info", radeon_debugfs_pm_info, 0,
NULL},
854 static int radeon_debugfs_pm_init(
struct radeon_device *rdev)
856 #if defined(CONFIG_DEBUG_FS)