From a36b7424ff2637b82e9de5f405cce80d60590815 Mon Sep 17 00:00:00 2001 From: Jayaprakash Madisetty Date: Mon, 8 Mar 2021 19:53:24 +0530 Subject: [PATCH] disp: msm: sde: avoid ctl_reset during display disable sequence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When SW writes to the CTL_SW_RESET register, the hardware enters a sequence to stop pending OTs and once that’s done it asserts sw_reset to that CTL path for exactly 100 mdp_clks. This is hardcoded in the HW design for many generations. The sw_reset propagates to all the MDP hardware blocks on mdp_clk and pixel_clk. When the mdpclk : pclk ratio is greater than 100 mdp_clk pulse isn’t long enough to reset the read side. So, the async FIFO (i.e. the hardware responsible to transfer pixels from mdp_clk to pixel_clk) only gets partially reset. The mdp_clk side is reset but the pixel_clk side does NOT. The async FIFO is in a bad state and believes there’s data in the FIFO. At this point, the "valid" sent to DSI controller gets flatlined high and DSI believes transfers are initiated eventually leading to underflow once panel commands are initiated. Add changes in software sequence to avoid triggering ctl_reset to due to above HW limitation. Change-Id: Iae44dba6ef59cbd5869a7f336af5dd38f93eafdd Signed-off-by: Jayaprakash Madisetty --- msm/sde/sde_encoder.c | 1 - 1 file changed, 1 deletion(-) diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index c2135d324e9b..61ffc0f098e0 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -2933,7 +2933,6 @@ void sde_encoder_helper_phys_disable(struct sde_encoder_phys *phys_enc, struct sde_hw_ctl *ctl = phys_enc->hw_ctl; struct sde_ctl_flush_cfg cfg; - ctl->ops.reset(ctl); sde_encoder_helper_reset_mixers(phys_enc, NULL); if (wb_enc) {