From 2cd1775195ac2b93c77f9a5415775a6e68355ff4 Mon Sep 17 00:00:00 2001 From: Adrian Salido Date: Wed, 3 Jul 2019 13:02:17 -0700 Subject: [PATCH] drm/msm: perform mode fixup against current state Current mode fixup validates mode against both state mode and crtc mode which causes mismatch between validation and drm_mode_equal check. Perform validation against the same mode (crtc->state->mode) to avoid mismatch and reflect proper state. Change-Id: If5647f2df0275cc14dd8d761d16e58fd0aa775f7 Signed-off-by: Adrian Salido Signed-off-by: Lakshmi Narayana Kalavala --- msm/dsi/dsi_drm.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/msm/dsi/dsi_drm.c b/msm/dsi/dsi_drm.c index 6d5c25887f3c..9c2f34fcb240 100644 --- a/msm/dsi/dsi_drm.c +++ b/msm/dsi/dsi_drm.c @@ -321,7 +321,6 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, struct dsi_bridge *c_bridge = to_dsi_bridge(bridge); struct dsi_display *display; struct dsi_display_mode dsi_mode, cur_dsi_mode, *panel_dsi_mode; - struct drm_display_mode cur_mode; struct drm_crtc_state *crtc_state; crtc_state = container_of(mode, struct drm_crtc_state, mode); @@ -373,9 +372,9 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, if (bridge->encoder && bridge->encoder->crtc && crtc_state->crtc) { - - convert_to_dsi_mode(&crtc_state->crtc->state->mode, - &cur_dsi_mode); + const struct drm_display_mode *cur_mode = + &crtc_state->crtc->state->mode; + convert_to_dsi_mode(cur_mode, &cur_dsi_mode); cur_dsi_mode.timing.dsc_enabled = dsi_mode.priv_info->dsc_enabled; cur_dsi_mode.timing.dsc = &dsi_mode.priv_info->dsc; @@ -385,8 +384,6 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, pr_debug("[%s] vrr mode mismatch failure rc=%d\n", c_bridge->display->name, rc); - cur_mode = crtc_state->crtc->mode; - /* 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)) && @@ -394,7 +391,7 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, crtc_state->crtc->state->enable)) dsi_mode.dsi_mode_flags |= DSI_MODE_FLAG_POMS; /* No DMS/VRR when drm pipeline is changing */ - if (!drm_mode_equal(&cur_mode, adjusted_mode) && + if (!drm_mode_equal(cur_mode, adjusted_mode) && (!(dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR)) && (!(dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_POMS)) && (!crtc_state->active_changed ||