From 65f3cc37a4f9f98a65afa87f86a96c2dc5da0a36 Mon Sep 17 00:00:00 2001 From: Steve Cohen Date: Tue, 15 Jun 2021 17:21:23 -0400 Subject: [PATCH] disp: msm: dsi: allow cmd-engine enable/disable HW op at all times In cases of continuous splash, when command engine is enabled/disabled as part of commands that are sent before continuous splash config is called the HW op will disable the command engine by the end of the command transfer. As part of continuous splash handoff, the command engine enable call skips the hardware operation to actually set the CMD_ENGINE_EN bit as it is guarded by the skip op flag. With the current change, we allow the HW op to take place, despite continuous splash being enabled. This way, the HW will always maintain the correct state pre and post continuous splash handoff. Change-Id: Id32ebf6f0d7eac46c118b701c138fcf6b9b10318 Signed-off-by: Steve Cohen Signed-off-by: Satya Rama Aditya Pinapala --- msm/dsi/dsi_ctrl.c | 24 ++++++++++-------------- msm/dsi/dsi_ctrl.h | 4 +--- msm/dsi/dsi_display.c | 15 +++++---------- 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/msm/dsi/dsi_ctrl.c b/msm/dsi/dsi_ctrl.c index 426ae35388..f2473ea2ba 100644 --- a/msm/dsi/dsi_ctrl.c +++ b/msm/dsi/dsi_ctrl.c @@ -444,7 +444,7 @@ static void dsi_ctrl_post_cmd_transfer(struct dsi_ctrl *dsi_ctrl) } /* Command engine disable, unmask overflow, remove vote on clocks and gdsc */ - rc = dsi_ctrl_set_cmd_engine_state(dsi_ctrl, DSI_CTRL_ENGINE_OFF, false); + rc = dsi_ctrl_set_cmd_engine_state(dsi_ctrl, DSI_CTRL_ENGINE_OFF); if (rc) DSI_CTRL_ERR(dsi_ctrl, "failed to disable command engine\n"); @@ -3423,7 +3423,7 @@ int dsi_ctrl_transfer_prepare(struct dsi_ctrl *dsi_ctrl, u32 flags) dsi_ctrl_mask_error_status_interrupts(dsi_ctrl, mask, true); - rc = dsi_ctrl_set_cmd_engine_state(dsi_ctrl, DSI_CTRL_ENGINE_ON, false); + rc = dsi_ctrl_set_cmd_engine_state(dsi_ctrl, DSI_CTRL_ENGINE_ON); if (rc) { DSI_CTRL_ERR(dsi_ctrl, "failed to enable command engine: %d\n", rc); mutex_unlock(&dsi_ctrl->ctrl_lock); @@ -3827,8 +3827,6 @@ error: * dsi_ctrl_set_cmd_engine_state() - set command engine state * @dsi_ctrl: DSI Controller handle. * @state: Engine state. - * @skip_op: Boolean to indicate few operations can be skipped. - * Set during the cont-splash or trusted-vm enable case. * * Command engine state can be modified only when DSI controller power state is * set to DSI_CTRL_POWER_LINK_CLK_ON. @@ -3836,7 +3834,7 @@ error: * Return: error code. */ int dsi_ctrl_set_cmd_engine_state(struct dsi_ctrl *dsi_ctrl, - enum dsi_engine_state state, bool skip_op) + enum dsi_engine_state state) { int rc = 0; @@ -3863,24 +3861,22 @@ int dsi_ctrl_set_cmd_engine_state(struct dsi_ctrl *dsi_ctrl, goto error; } - if (!skip_op) { - if (state == DSI_CTRL_ENGINE_ON) - dsi_ctrl->hw.ops.cmd_engine_en(&dsi_ctrl->hw, true); - else - dsi_ctrl->hw.ops.cmd_engine_en(&dsi_ctrl->hw, false); - } + if (state == DSI_CTRL_ENGINE_ON) + dsi_ctrl->hw.ops.cmd_engine_en(&dsi_ctrl->hw, true); + else + dsi_ctrl->hw.ops.cmd_engine_en(&dsi_ctrl->hw, false); if (state == DSI_CTRL_ENGINE_ON) dsi_ctrl->cmd_engine_refcount++; else dsi_ctrl->cmd_engine_refcount = 0; - SDE_EVT32(dsi_ctrl->cell_index, state, skip_op); + SDE_EVT32(dsi_ctrl->cell_index, state); dsi_ctrl_update_state(dsi_ctrl, DSI_CTRL_OP_CMD_ENGINE, state); error: - DSI_CTRL_DEBUG(dsi_ctrl, "Set cmd engine state:%d, skip_op:%d, enable count: %d\n", - state, skip_op, dsi_ctrl->cmd_engine_refcount); + DSI_CTRL_DEBUG(dsi_ctrl, "Set cmd engine state:%d, enable count: %d\n", + state, dsi_ctrl->cmd_engine_refcount); return rc; } diff --git a/msm/dsi/dsi_ctrl.h b/msm/dsi/dsi_ctrl.h index f0ef3167bb..4f23e5412d 100644 --- a/msm/dsi/dsi_ctrl.h +++ b/msm/dsi/dsi_ctrl.h @@ -646,8 +646,6 @@ int dsi_ctrl_set_power_state(struct dsi_ctrl *dsi_ctrl, * dsi_ctrl_set_cmd_engine_state() - set command engine state * @dsi_ctrl: DSI Controller handle. * @state: Engine state. - * @skip_op: Boolean to indicate few operations can be skipped. - * Set during the cont-splash or trusted-vm enable case. * * Command engine state can be modified only when DSI controller power state is * set to DSI_CTRL_POWER_LINK_CLK_ON. @@ -655,7 +653,7 @@ int dsi_ctrl_set_power_state(struct dsi_ctrl *dsi_ctrl, * Return: error code. */ int dsi_ctrl_set_cmd_engine_state(struct dsi_ctrl *dsi_ctrl, - enum dsi_engine_state state, bool skip_op); + enum dsi_engine_state state); /** * dsi_ctrl_validate_host_state() - validate DSI ctrl host state diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 33dbd494d1..9b5f928578 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -278,8 +278,7 @@ static int dsi_display_cmd_engine_enable(struct dsi_display *display) m_ctrl = &display->ctrl[display->cmd_master_idx]; mutex_lock(&m_ctrl->ctrl->ctrl_lock); - rc = dsi_ctrl_set_cmd_engine_state(m_ctrl->ctrl, - DSI_CTRL_ENGINE_ON, skip_op); + rc = dsi_ctrl_set_cmd_engine_state(m_ctrl->ctrl, DSI_CTRL_ENGINE_ON); if (rc) { DSI_ERR("[%s] enable mcmd engine failed, skip_op:%d rc:%d\n", display->name, skip_op, rc); @@ -291,8 +290,7 @@ static int dsi_display_cmd_engine_enable(struct dsi_display *display) if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; - rc = dsi_ctrl_set_cmd_engine_state(ctrl->ctrl, - DSI_CTRL_ENGINE_ON, skip_op); + rc = dsi_ctrl_set_cmd_engine_state(ctrl->ctrl, DSI_CTRL_ENGINE_ON); if (rc) { DSI_ERR( "[%s] enable cmd engine failed, skip_op:%d rc:%d\n", @@ -303,8 +301,7 @@ static int dsi_display_cmd_engine_enable(struct dsi_display *display) goto done; error_disable_master: - (void)dsi_ctrl_set_cmd_engine_state(m_ctrl->ctrl, - DSI_CTRL_ENGINE_OFF, skip_op); + (void)dsi_ctrl_set_cmd_engine_state(m_ctrl->ctrl, DSI_CTRL_ENGINE_OFF); done: mutex_unlock(&m_ctrl->ctrl->ctrl_lock); return rc; @@ -325,16 +322,14 @@ static int dsi_display_cmd_engine_disable(struct dsi_display *display) if (!ctrl->ctrl || (ctrl == m_ctrl)) continue; - rc = dsi_ctrl_set_cmd_engine_state(ctrl->ctrl, - DSI_CTRL_ENGINE_OFF, skip_op); + rc = dsi_ctrl_set_cmd_engine_state(ctrl->ctrl, DSI_CTRL_ENGINE_OFF); if (rc) DSI_ERR( "[%s] disable cmd engine failed, skip_op:%d rc:%d\n", display->name, skip_op, rc); } - rc = dsi_ctrl_set_cmd_engine_state(m_ctrl->ctrl, - DSI_CTRL_ENGINE_OFF, skip_op); + rc = dsi_ctrl_set_cmd_engine_state(m_ctrl->ctrl, DSI_CTRL_ENGINE_OFF); if (rc) DSI_ERR("[%s] disable mcmd engine failed, skip_op:%d rc:%d\n", display->name, skip_op, rc);