From: Mitchell Augustin <[email protected]> Issue: https://gitlab.freedesktop.org/drm/amd/-/work_items/5394 Ubuntu BugLink: https://bugs.launchpad.net/bugs/2162904
This commit disables panel self-refresh when more than one display is active to eliminate a common hang and system crash that happens frequently on some laptops, evidently due to race conditions between the DMCUB, amdgpu module, and possibly other components which are exacerbated when more than one display is active. To my knowledge, a fix for the underlying failure condition is not available upstream, so given how disruptive this is for impacted users, I propose disabling this feature under this condition until it is fixed. The main downside of disabling PSR is that it will increase power consumption, but this should be barely noticeable to end users, since PSR will remain enabled on laptops unconnected to external monitors, and since laptops connected to external monitors are likely typically also connected to power (and thus less concerned with the energy savings afforded by PSR). Signed-off-by: Mitchell Augustin <[email protected]> --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c index 5d2715f78314..272f195b8c28 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c @@ -152,7 +152,8 @@ void amdgpu_dm_crtc_set_panel_sr_feature( struct amdgpu_dm_connector *aconn = (struct amdgpu_dm_connector *) stream->dm_stream_context; - if (!aconn->disallow_edp_enter_psr) { + /* Do not enter PSR if multiple displays are active to prevent DMCUB hangs */ + if (!aconn->disallow_edp_enter_psr && dm->dc->current_state->stream_count == 1) { amdgpu_dm_psr_enable(stream); if (dm->idle_workqueue && (dm->dc->config.disable_ips == DMUB_IPS_ENABLE) && -- 2.43.0
