Skip to content

Commit 1ff60dd

Browse files
committed
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 <[email protected]> Cc: [email protected]
1 parent 5b7d245 commit 1ff60dd

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

drivers/gpu/drm/radeon/btc_dpm.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2699,6 +2699,12 @@ int btc_dpm_init(struct radeon_device *rdev)
26992699
else
27002700
rdev->pm.dpm.dyn_state.sclk_mclk_delta = 10000;
27012701

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+
27022708
return 0;
27032709
}
27042710

drivers/gpu/drm/radeon/ni_dpm.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4272,6 +4272,12 @@ int ni_dpm_init(struct radeon_device *rdev)
42724272

42734273
ni_pi->use_power_boost_limit = true;
42744274

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+
42754281
return 0;
42764282
}
42774283

drivers/gpu/drm/radeon/si_dpm.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6449,6 +6449,12 @@ int si_dpm_init(struct radeon_device *rdev)
64496449

64506450
si_initialize_powertune_defaults(rdev);
64516451

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+
64526458
return 0;
64536459
}
64546460

0 commit comments

Comments
 (0)