Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86d42f6a authored by Dhaval Patel's avatar Dhaval Patel
Browse files

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: default avatarDhaval Patel <pdhaval@codeaurora.org>
parent 73135edf
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -2492,8 +2492,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);
	}