Browse Source

disp: msm: dsi: wait for mdp idle before roi update

As part of partial update, the DSI command engine is programmed
with the new ROI. However, because double buffering is not enabled
for DSI command mode registers, updating them during a partial
update use case when the previous frame is not yet finished can
result in a configuration mismatch between MDP and DSI. In this
scenario, DSI is configured with the new ROI, while MDP is still
configured for the previous frame’s ROI. This mismatch can lead
to a write pointer timeout.

To avoid this issue, wait for MDP to be idle before updating the
new ROI.

Change-Id: I1796cb7872edaf9e1d76681c2d948bc1b567c298
Signed-off-by: Anand Tarakh <[email protected]>
Anand Tarakh 1 year ago
parent
commit
912efcbdfe
1 changed files with 4 additions and 0 deletions
  1. 4 0
      msm/dsi/dsi_display.c

+ 4 - 0
msm/dsi/dsi_display.c

@@ -8605,6 +8605,10 @@ static int dsi_display_set_roi(struct dsi_display *display,
 		if (!changed)
 			continue;
 
+		rc = dsi_ctrl_wait_for_cmd_mode_mdp_idle(ctrl->ctrl);
+		if (rc)
+			DSI_ERR("wait for cmd mode mdp idle failed rc = %d", rc);
+
 		/* re-program the ctrl with the timing based on the new roi */
 		rc = dsi_ctrl_timing_setup(ctrl->ctrl);
 		if (rc) {