disp: msm: dsi: invoke DSI soft reset when video engine is stuck

During ESD check failure, DSI video engine can get stuck
sending data from display engine. In use cases where GDSC
toggle does not happen like DP MST connected or secure video
playback, display does not recover back after ESD failure.
This change adds support to perform soft reset when DSI
video engine gets stuck.

Change-Id: I9cb31e6c71c4da171f9fe22fc3bee9175711831d
Signed-off-by: Ritesh Kumar <riteshk@codeaurora.org>
This commit is contained in:
Ritesh Kumar
2020-10-21 16:56:35 +05:30
parent 3668566409
commit 97dcdc695a
5 changed files with 35 additions and 2 deletions

View File

@@ -3683,6 +3683,7 @@ int dsi_ctrl_set_vid_engine_state(struct dsi_ctrl *dsi_ctrl,
{
int rc = 0;
bool on;
bool vid_eng_busy;
if (!dsi_ctrl || (state >= DSI_CTRL_ENGINE_MAX)) {
DSI_CTRL_ERR(dsi_ctrl, "Invalid params\n");
@@ -3702,9 +3703,17 @@ int dsi_ctrl_set_vid_engine_state(struct dsi_ctrl *dsi_ctrl,
if (!skip_op) {
on = (state == DSI_CTRL_ENGINE_ON) ? true : false;
dsi_ctrl->hw.ops.video_engine_en(&dsi_ctrl->hw, on);
vid_eng_busy = dsi_ctrl->hw.ops.vid_engine_busy(&dsi_ctrl->hw);
/* perform a reset when turning off video engine */
if (!on && dsi_ctrl->version < DSI_CTRL_VERSION_1_3)
/*
* During ESD check failure, DSI video engine can get stuck
* sending data from display engine. In use cases where GDSC
* toggle does not happen like DP MST connected or secure video
* playback, display does not recover back after ESD failure.
* Perform a reset if video engine is stuck.
*/
if (!on && (dsi_ctrl->version < DSI_CTRL_VERSION_1_3 ||
vid_eng_busy))
dsi_ctrl->hw.ops.soft_reset(&dsi_ctrl->hw);
}