aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/radeon/radeon.h3
-rw-r--r--drivers/gpu/drm/radeon/radeon_atombios.c25
-rw-r--r--drivers/gpu/drm/radeon/radeon_pm.c18
3 files changed, 29 insertions, 17 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 5598f9559a64..8c62b2f58923 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -823,6 +823,9 @@ struct radeon_pm {
823 u32 current_sclk; 823 u32 current_sclk;
824 u32 current_mclk; 824 u32 current_mclk;
825 u32 current_vddc; 825 u32 current_vddc;
826 u32 default_sclk;
827 u32 default_mclk;
828 u32 default_vddc;
826 struct radeon_i2c_chan *i2c_bus; 829 struct radeon_i2c_chan *i2c_bus;
827 /* selected pm method */ 830 /* selected pm method */
828 enum radeon_pm_method pm_method; 831 enum radeon_pm_method pm_method;
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
index 03f1c9a10ba4..1573202a6418 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -2249,15 +2249,22 @@ static void radeon_atombios_parse_pplib_non_clock_info(struct radeon_device *rde
2249 rdev->pm.default_power_state_index = state_index; 2249 rdev->pm.default_power_state_index = state_index;
2250 rdev->pm.power_state[state_index].default_clock_mode = 2250 rdev->pm.power_state[state_index].default_clock_mode =
2251 &rdev->pm.power_state[state_index].clock_info[mode_index - 1]; 2251 &rdev->pm.power_state[state_index].clock_info[mode_index - 1];
2252 /* patch the table values with the default slck/mclk from firmware info */ 2252 if (ASIC_IS_DCE5(rdev)) {
2253 for (j = 0; j < mode_index; j++) { 2253 /* NI chips post without MC ucode, so default clocks are strobe mode only */
2254 rdev->pm.power_state[state_index].clock_info[j].mclk = 2254 rdev->pm.default_sclk = rdev->pm.power_state[state_index].clock_info[0].sclk;
2255 rdev->clock.default_mclk; 2255 rdev->pm.default_mclk = rdev->pm.power_state[state_index].clock_info[0].mclk;
2256 rdev->pm.power_state[state_index].clock_info[j].sclk = 2256 rdev->pm.default_vddc = rdev->pm.power_state[state_index].clock_info[0].voltage.voltage;
2257 rdev->clock.default_sclk; 2257 } else {
2258 if (vddc) 2258 /* patch the table values with the default slck/mclk from firmware info */
2259 rdev->pm.power_state[state_index].clock_info[j].voltage.voltage = 2259 for (j = 0; j < mode_index; j++) {
2260 vddc; 2260 rdev->pm.power_state[state_index].clock_info[j].mclk =
2261 rdev->clock.default_mclk;
2262 rdev->pm.power_state[state_index].clock_info[j].sclk =
2263 rdev->clock.default_sclk;
2264 if (vddc)
2265 rdev->pm.power_state[state_index].clock_info[j].voltage.voltage =
2266 vddc;
2267 }
2261 } 2268 }
2262 } 2269 }
2263} 2270}
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
index 7ad2e1a6991d..9052d1e3a5fe 100644
--- a/drivers/gpu/drm/radeon/radeon_pm.c
+++ b/drivers/gpu/drm/radeon/radeon_pm.c
@@ -167,13 +167,13 @@ static void radeon_set_power_state(struct radeon_device *rdev)
167 if (radeon_gui_idle(rdev)) { 167 if (radeon_gui_idle(rdev)) {
168 sclk = rdev->pm.power_state[rdev->pm.requested_power_state_index]. 168 sclk = rdev->pm.power_state[rdev->pm.requested_power_state_index].
169 clock_info[rdev->pm.requested_clock_mode_index].sclk; 169 clock_info[rdev->pm.requested_clock_mode_index].sclk;
170 if (sclk > rdev->clock.default_sclk) 170 if (sclk > rdev->pm.default_sclk)
171 sclk = rdev->clock.default_sclk; 171 sclk = rdev->pm.default_sclk;
172 172
173 mclk = rdev->pm.power_state[rdev->pm.requested_power_state_index]. 173 mclk = rdev->pm.power_state[rdev->pm.requested_power_state_index].
174 clock_info[rdev->pm.requested_clock_mode_index].mclk; 174 clock_info[rdev->pm.requested_clock_mode_index].mclk;
175 if (mclk > rdev->clock.default_mclk) 175 if (mclk > rdev->pm.default_mclk)
176 mclk = rdev->clock.default_mclk; 176 mclk = rdev->pm.default_mclk;
177 177
178 /* upvolt before raising clocks, downvolt after lowering clocks */ 178 /* upvolt before raising clocks, downvolt after lowering clocks */
179 if (sclk < rdev->pm.current_sclk) 179 if (sclk < rdev->pm.current_sclk)
@@ -534,8 +534,8 @@ void radeon_pm_resume(struct radeon_device *rdev)
534 mutex_lock(&rdev->pm.mutex); 534 mutex_lock(&rdev->pm.mutex);
535 rdev->pm.current_power_state_index = rdev->pm.default_power_state_index; 535 rdev->pm.current_power_state_index = rdev->pm.default_power_state_index;
536 rdev->pm.current_clock_mode_index = 0; 536 rdev->pm.current_clock_mode_index = 0;
537 rdev->pm.current_sclk = rdev->clock.default_sclk; 537 rdev->pm.current_sclk = rdev->pm.default_sclk;
538 rdev->pm.current_mclk = rdev->clock.default_mclk; 538 rdev->pm.current_mclk = rdev->pm.default_mclk;
539 rdev->pm.current_vddc = rdev->pm.power_state[rdev->pm.default_power_state_index].clock_info[0].voltage.voltage; 539 rdev->pm.current_vddc = rdev->pm.power_state[rdev->pm.default_power_state_index].clock_info[0].voltage.voltage;
540 if (rdev->pm.pm_method == PM_METHOD_DYNPM 540 if (rdev->pm.pm_method == PM_METHOD_DYNPM
541 && rdev->pm.dynpm_state == DYNPM_STATE_SUSPENDED) { 541 && rdev->pm.dynpm_state == DYNPM_STATE_SUSPENDED) {
@@ -558,6 +558,8 @@ int radeon_pm_init(struct radeon_device *rdev)
558 rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE; 558 rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE;
559 rdev->pm.dynpm_can_upclock = true; 559 rdev->pm.dynpm_can_upclock = true;
560 rdev->pm.dynpm_can_downclock = true; 560 rdev->pm.dynpm_can_downclock = true;
561 rdev->pm.default_sclk = rdev->clock.default_sclk;
562 rdev->pm.default_mclk = rdev->clock.default_mclk;
561 rdev->pm.current_sclk = rdev->clock.default_sclk; 563 rdev->pm.current_sclk = rdev->clock.default_sclk;
562 rdev->pm.current_mclk = rdev->clock.default_mclk; 564 rdev->pm.current_mclk = rdev->clock.default_mclk;
563 rdev->pm.int_thermal_type = THERMAL_TYPE_NONE; 565 rdev->pm.int_thermal_type = THERMAL_TYPE_NONE;
@@ -804,9 +806,9 @@ static int radeon_debugfs_pm_info(struct seq_file *m, void *data)
804 struct drm_device *dev = node->minor->dev; 806 struct drm_device *dev = node->minor->dev;
805 struct radeon_device *rdev = dev->dev_private; 807 struct radeon_device *rdev = dev->dev_private;
806 808
807 seq_printf(m, "default engine clock: %u0 kHz\n", rdev->clock.default_sclk); 809 seq_printf(m, "default engine clock: %u0 kHz\n", rdev->pm.default_sclk);
808 seq_printf(m, "current engine clock: %u0 kHz\n", radeon_get_engine_clock(rdev)); 810 seq_printf(m, "current engine clock: %u0 kHz\n", radeon_get_engine_clock(rdev));
809 seq_printf(m, "default memory clock: %u0 kHz\n", rdev->clock.default_mclk); 811 seq_printf(m, "default memory clock: %u0 kHz\n", rdev->pm.default_mclk);
810 if (rdev->asic->get_memory_clock) 812 if (rdev->asic->get_memory_clock)
811 seq_printf(m, "current memory clock: %u0 kHz\n", radeon_get_memory_clock(rdev)); 813 seq_printf(m, "current memory clock: %u0 kHz\n", radeon_get_memory_clock(rdev));
812 if (rdev->pm.current_vddc) 814 if (rdev->pm.current_vddc)