diff options
Diffstat (limited to 'drivers/gpu/drm/drm_atomic_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_atomic_helper.c | 16 | 
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 9603193d2fa1..987e4b212e9f 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -1011,9 +1011,19 @@ crtc_needs_disable(struct drm_crtc_state *old_state,  		return drm_atomic_crtc_effectively_active(old_state);  	/* -	 * We need to run through the crtc_funcs->disable() function if the CRTC -	 * is currently on, if it's transitioning to self refresh mode, or if -	 * it's in self refresh mode and needs to be fully disabled. +	 * We need to disable bridge(s) and CRTC if we're transitioning out of +	 * self-refresh and changing CRTCs at the same time, because the +	 * bridge tracks self-refresh status via CRTC state. +	 */ +	if (old_state->self_refresh_active && +	    old_state->crtc != new_state->crtc) +		return true; + +	/* +	 * We also need to run through the crtc_funcs->disable() function if +	 * the CRTC is currently on, if it's transitioning to self refresh +	 * mode, or if it's in self refresh mode and needs to be fully +	 * disabled.  	 */  	return old_state->active ||  	       (old_state->self_refresh_active && !new_state->active) ||  |