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 <salidoa@google.com> Signed-off-by: Lakshmi Narayana Kalavala <lkalaval@codeaurora.org>
This commit is contained in:

committed by
Lakshmi Narayana Kalavala

parent
5411cf5dee
commit
2cd1775195
@@ -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_bridge *c_bridge = to_dsi_bridge(bridge);
|
||||||
struct dsi_display *display;
|
struct dsi_display *display;
|
||||||
struct dsi_display_mode dsi_mode, cur_dsi_mode, *panel_dsi_mode;
|
struct dsi_display_mode dsi_mode, cur_dsi_mode, *panel_dsi_mode;
|
||||||
struct drm_display_mode cur_mode;
|
|
||||||
struct drm_crtc_state *crtc_state;
|
struct drm_crtc_state *crtc_state;
|
||||||
|
|
||||||
crtc_state = container_of(mode, struct drm_crtc_state, mode);
|
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 &&
|
if (bridge->encoder && bridge->encoder->crtc &&
|
||||||
crtc_state->crtc) {
|
crtc_state->crtc) {
|
||||||
|
const struct drm_display_mode *cur_mode =
|
||||||
convert_to_dsi_mode(&crtc_state->crtc->state->mode,
|
&crtc_state->crtc->state->mode;
|
||||||
&cur_dsi_mode);
|
convert_to_dsi_mode(cur_mode, &cur_dsi_mode);
|
||||||
cur_dsi_mode.timing.dsc_enabled =
|
cur_dsi_mode.timing.dsc_enabled =
|
||||||
dsi_mode.priv_info->dsc_enabled;
|
dsi_mode.priv_info->dsc_enabled;
|
||||||
cur_dsi_mode.timing.dsc = &dsi_mode.priv_info->dsc;
|
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",
|
pr_debug("[%s] vrr mode mismatch failure rc=%d\n",
|
||||||
c_bridge->display->name, rc);
|
c_bridge->display->name, rc);
|
||||||
|
|
||||||
cur_mode = crtc_state->crtc->mode;
|
|
||||||
|
|
||||||
/* No panel mode switch when drm pipeline is changing */
|
/* No panel mode switch when drm pipeline is changing */
|
||||||
if ((dsi_mode.panel_mode != cur_dsi_mode.panel_mode) &&
|
if ((dsi_mode.panel_mode != cur_dsi_mode.panel_mode) &&
|
||||||
(!(dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR)) &&
|
(!(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))
|
crtc_state->crtc->state->enable))
|
||||||
dsi_mode.dsi_mode_flags |= DSI_MODE_FLAG_POMS;
|
dsi_mode.dsi_mode_flags |= DSI_MODE_FLAG_POMS;
|
||||||
/* No DMS/VRR when drm pipeline is changing */
|
/* 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_VRR)) &&
|
||||||
(!(dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_POMS)) &&
|
(!(dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_POMS)) &&
|
||||||
(!crtc_state->active_changed ||
|
(!crtc_state->active_changed ||
|
||||||
|
Reference in New Issue
Block a user