aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-08-30 16:18:35 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-08-30 16:31:24 -0400
commit1ff60ddb84bb9ff6fa182710c4e08b66badf918c (patch)
tree34a8876fe4c3cebb2915c1a3b36fef9b13014afd
parent5b7d245009e734588e553092f5c0b0bd788b3a55 (diff)
drm/radeon/dpm: make sure dc performance level limits are valid (BTC-SI) (v2)
Check to make sure the dc limits are valid before using them. Some systems may not have a dc limits table. In that case just use the ac limits. This fixes hangs on systems when the power state is changed when on battery (dc) due to invalid performance state parameters. Should fix: https://bugs.freedesktop.org/show_bug.cgi?id=68708 v2: fix up limits in dpm_init() Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
-rw-r--r--drivers/gpu/drm/radeon/btc_dpm.c6
-rw-r--r--drivers/gpu/drm/radeon/ni_dpm.c6
-rw-r--r--drivers/gpu/drm/radeon/si_dpm.c6
3 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/btc_dpm.c b/drivers/gpu/drm/radeon/btc_dpm.c
index 9953e1fbc46d..084e69414fd1 100644
--- a/drivers/gpu/drm/radeon/btc_dpm.c
+++ b/drivers/gpu/drm/radeon/btc_dpm.c
@@ -2699,6 +2699,12 @@ int btc_dpm_init(struct radeon_device *rdev)
2699 else 2699 else
2700 rdev->pm.dpm.dyn_state.sclk_mclk_delta = 10000; 2700 rdev->pm.dpm.dyn_state.sclk_mclk_delta = 10000;
2701 2701
2702 /* make sure dc limits are valid */
2703 if ((rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.sclk == 0) ||
2704 (rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.mclk == 0))
2705 rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc =
2706 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac;
2707
2702 return 0; 2708 return 0;
2703} 2709}
2704 2710
diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c
index 88aa41e341af..f7b625c9e0e9 100644
--- a/drivers/gpu/drm/radeon/ni_dpm.c
+++ b/drivers/gpu/drm/radeon/ni_dpm.c
@@ -4272,6 +4272,12 @@ int ni_dpm_init(struct radeon_device *rdev)
4272 4272
4273 ni_pi->use_power_boost_limit = true; 4273 ni_pi->use_power_boost_limit = true;
4274 4274
4275 /* make sure dc limits are valid */
4276 if ((rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.sclk == 0) ||
4277 (rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.mclk == 0))
4278 rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc =
4279 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac;
4280
4275 return 0; 4281 return 0;
4276} 4282}
4277 4283
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
index 51966f459094..5be9b4e72350 100644
--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -6449,6 +6449,12 @@ int si_dpm_init(struct radeon_device *rdev)
6449 6449
6450 si_initialize_powertune_defaults(rdev); 6450 si_initialize_powertune_defaults(rdev);
6451 6451
6452 /* make sure dc limits are valid */
6453 if ((rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.sclk == 0) ||
6454 (rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.mclk == 0))
6455 rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc =
6456 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac;
6457
6452 return 0; 6458 return 0;
6453} 6459}
6454 6460