diff --git a/msm/dsi/dsi_drm.c b/msm/dsi/dsi_drm.c index b9edd9b9c416..e8032cb8dcd3 100644 --- a/msm/dsi/dsi_drm.c +++ b/msm/dsi/dsi_drm.c @@ -11,7 +11,6 @@ #include "sde_connector.h" #include "dsi_drm.h" #include "sde_trace.h" -#include "sde_encoder.h" #define to_dsi_bridge(x) container_of((x), struct dsi_bridge, base) #define to_dsi_state(x) container_of((x), struct dsi_connector_state, base) @@ -344,8 +343,6 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, struct dsi_display *display; struct dsi_display_mode dsi_mode, cur_dsi_mode, *panel_dsi_mode; struct drm_crtc_state *crtc_state; - bool clone_mode = false; - struct drm_encoder *encoder; crtc_state = container_of(mode, struct drm_crtc_state, mode); @@ -410,14 +407,6 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, return false; } - drm_for_each_encoder(encoder, crtc_state->crtc->dev) { - if (encoder->crtc != crtc_state->crtc) - continue; - - if (sde_encoder_in_clone_mode(encoder)) - clone_mode = true; - } - /* No panel mode switch when drm pipeline is changing */ if ((dsi_mode.panel_mode != cur_dsi_mode.panel_mode) && (!(dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR)) && @@ -434,16 +423,13 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, dsi_mode.dsi_mode_flags |= DSI_MODE_FLAG_DMS; } - /* Reject seamless transition when active/connectors changed */ - if ((crtc_state->active_changed || - (crtc_state->connectors_changed && clone_mode)) && - ((dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR) || - (dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_POMS) || - (dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_DYN_CLK))) { - DSI_INFO("seamless on active/conn(%d/%d) changed 0x%x\n", - crtc_state->active_changed, - crtc_state->connectors_changed, - dsi_mode.dsi_mode_flags); + /* Reject seamless transition when active changed */ + if (crtc_state->active_changed && + ((dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR) || + (dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_POMS) || + (dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_DYN_CLK))) { + DSI_INFO("seamless upon active changed 0x%x %d\n", + dsi_mode.dsi_mode_flags, crtc_state->active_changed); return false; } diff --git a/msm/msm_atomic.c b/msm/msm_atomic.c index efd5a879bb2b..db5f072e7850 100644 --- a/msm/msm_atomic.c +++ b/msm/msm_atomic.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. * Copyright (C) 2014 Red Hat * Author: Rob Clark * @@ -83,6 +83,10 @@ static inline bool _msm_seamless_for_conn(struct drm_connector *connector, if (enable) return false; + if (!connector->state->crtc && + old_conn_state->crtc->state->connectors_changed) + return false; + if (msm_is_mode_seamless(&connector->encoder->crtc->state->mode)) return true;