msm: mdss: add HW recommended delay for dfps feature.

When prefetch is enabled, MDSS HW works on 2 vsync
boundaries i.e. mdp_vsync and panel_vsync. In the current
implementation we are only waiting for mdp_vsync and there
might be scenarios where driver is configuring interface
flush before panel_vsync, which might lead to undefined
behavior in MDSS HW. So add the recommended delays before
and after dfps update to avoid such scenarios.

Change-Id: Idc801f7b63ea85d88949c8ded06fae322f90dbdb
Signed-off-by: Vishnuvardhan Prodduturi <vproddut@codeaurora.org>
Signed-off-by: Sandeep Panda <spanda@codeaurora.org>
This commit is contained in:
Vishnuvardhan Prodduturi 2017-02-23 13:49:08 +05:30 committed by Sandeep Panda
parent 59a631bcac
commit c9660db298
2 changed files with 4 additions and 3 deletions

View file

@ -2533,8 +2533,6 @@ static void mdss_dsi_timing_db_ctrl(struct mdss_dsi_ctrl_pdata *ctrl,
MDSS_DSI_CORE_CLK, MDSS_DSI_CLK_ON); MDSS_DSI_CORE_CLK, MDSS_DSI_CLK_ON);
MIPI_OUTP((ctrl->ctrl_base + 0x1e8), enable); MIPI_OUTP((ctrl->ctrl_base + 0x1e8), enable);
wmb(); /* ensure timing db is disabled */ wmb(); /* ensure timing db is disabled */
MIPI_OUTP((ctrl->ctrl_base + 0x1e4), enable);
wmb(); /* ensure timing flush is disabled */
mdss_dsi_clk_ctrl(ctrl, ctrl->dsi_clk_handle, mdss_dsi_clk_ctrl(ctrl, ctrl->dsi_clk_handle,
MDSS_DSI_CORE_CLK, MDSS_DSI_CLK_OFF); MDSS_DSI_CORE_CLK, MDSS_DSI_CLK_OFF);
} }

View file

@ -1416,6 +1416,8 @@ static int mdss_mdp_video_config_fps(struct mdss_mdp_ctl *ctl, int new_fps)
} }
} }
/* add HW recommended delay to handle panel_vsync */
udelay(2000);
mutex_lock(&ctl->offlock); mutex_lock(&ctl->offlock);
pdata = ctl->panel_data; pdata = ctl->panel_data;
if (pdata == NULL) { if (pdata == NULL) {
@ -1545,7 +1547,8 @@ exit_dfps:
if (rc < 0) if (rc < 0)
pr_err("Error in dfps_wait: %d\n", rc); pr_err("Error in dfps_wait: %d\n", rc);
} }
/* add HW recommended delay to handle panel_vsync */
udelay(2000);
/* Disable interface timing double buffer */ /* Disable interface timing double buffer */
rc = mdss_mdp_ctl_intf_event(ctl, rc = mdss_mdp_ctl_intf_event(ctl,
MDSS_EVENT_DSI_TIMING_DB_CTRL, MDSS_EVENT_DSI_TIMING_DB_CTRL,