disp: msm: dsi: swap DSI timing engine programming and ROI cmd tx

The ROI commands are sent with an asynchronous command transfer wait.
If the queued CMD DMA wait for done gets scheduled before the DSI
controller timing engine programming, the later will be blocked waiting
on the ctrl_lock, which was acquired by the queued DMA wait for done work.
This effectively negates any advantage of having the async wait flag for
ROI commands blocking the main commit thread.

The change swaps this order to ensure that such a scenario never happens.

Change-Id: I8a971c0c7733eea3d435b637ca41b34fa60adfc1
Signed-off-by: Satya Rama Aditya Pinapala <psraditya30@codeaurora.org>
This commit is contained in:
Satya Rama Aditya Pinapala
2021-09-28 10:41:38 -07:00
committed by Gerrit - the friendly Code Review server
parent c460ffbd27
commit bcd04f60da

View File

@@ -8135,19 +8135,19 @@ static int dsi_display_set_roi(struct dsi_display *display,
if (!changed)
continue;
/* send the new roi to the panel via dcs commands */
rc = dsi_panel_send_roi_dcs(display->panel, i, &ctrl_roi);
if (rc) {
DSI_ERR("dsi_panel_set_roi failed rc %d\n", rc);
return rc;
}
/* re-program the ctrl with the timing based on the new roi */
rc = dsi_ctrl_timing_setup(ctrl->ctrl);
if (rc) {
DSI_ERR("dsi_ctrl_setup failed rc %d\n", rc);
return rc;
}
/* send the new roi to the panel via dcs commands */
rc = dsi_panel_send_roi_dcs(display->panel, i, &ctrl_roi);
if (rc) {
DSI_ERR("dsi_panel_set_roi failed rc %d\n", rc);
return rc;
}
}
return rc;