msm: mdss: fix mdp busy wait race condition
DSI software does not wait for MDP_DONE ISR before sending new frame if burst mode feature is enabled. It leads to race condition in below case * MDP kicks off frame-N and mdp_busy sets to true * MDP receives new frame-N+1 and waits for PP_DONE interrupt before sending N+1 frame. * MDP receives PP_DONE interrupt and kicks off frame-N+1 (DSI_MDP_DONE interrupt is not received yet). * Frame-N+1 kickoff sets the mdp_busy wait to true. * DSI receives DSI_MDP_DONE interrupt for frame-N and reset the mdp_busy to false. * Any clock off call can turn off the clock at this moment. DSI software must always execute busy_wait when kickoff happens from mdp. That avoids the busy wait race condition. Change-Id: I462cd5ad21d6ccc08dfb862e98fd6fafeef686d4 Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
This commit is contained in:
parent
06318cbfa1
commit
43181da2a1
1 changed files with 1 additions and 2 deletions
|
@ -2487,8 +2487,7 @@ int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp)
|
|||
if (req && (req->flags & CMD_REQ_HS_MODE))
|
||||
hs_req = true;
|
||||
|
||||
if (!ctrl->burst_mode_enabled ||
|
||||
(from_mdp && ctrl->shared_data->cmd_clk_ln_recovery_en)) {
|
||||
if ((!ctrl->burst_mode_enabled) || from_mdp) {
|
||||
/* make sure dsi_cmd_mdp is idle */
|
||||
mdss_dsi_cmd_mdp_busy(ctrl);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue