From ba9fc59027ac7c74cf98025147469439b67ad55c Mon Sep 17 00:00:00 2001 From: Padmanabhan Komanduru Date: Mon, 29 Feb 2016 15:18:04 +0530 Subject: [PATCH] msm: mdss: avoid DSI FIFO errors during dynamic refresh operation When dynamic refresh operation is under progress, it is sometimes expected that the DSI h/w throws DSI FIFO underflow errors. Avoid throwing DSI FIFO errors on console for this case. Just clear the DSI error interrupt and do not trigger the DSI underflow recovery process. Change-Id: I03b8764397378104981c1a5a6e627e90f53222ee Signed-off-by: Padmanabhan Komanduru --- drivers/video/fbdev/msm/mdss_dsi_host.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_dsi_host.c b/drivers/video/fbdev/msm/mdss_dsi_host.c index 16207d7524f8..940b4b9db95e 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_host.c +++ b/drivers/video/fbdev/msm/mdss_dsi_host.c @@ -2858,7 +2858,7 @@ void mdss_dsi_dln0_phy_err(struct mdss_dsi_ctrl_pdata *ctrl, bool print_en) void mdss_dsi_fifo_status(struct mdss_dsi_ctrl_pdata *ctrl) { - u32 status; + u32 status, isr; unsigned char *base; base = ctrl->ctrl_base; @@ -2868,7 +2868,19 @@ void mdss_dsi_fifo_status(struct mdss_dsi_ctrl_pdata *ctrl) /* fifo underflow, overflow and empty*/ if (status & 0xcccc4409) { MIPI_OUTP(base + 0x000c, status); - pr_err("%s: status=%x\n", __func__, status); + + /* + * When dynamic refresh operation is under progress, it is + * expected to have FIFO underflow error sometimes. In such + * cases, do not trigger the underflow recovery process and + * avoid printing the error status on console. + */ + isr = MIPI_INP(ctrl->ctrl_base + 0x0110); + if (isr & DSI_INTR_DYNAMIC_REFRESH_MASK) + status &= ~(0x88880000); + else + pr_err("%s: status=%x\n", __func__, status); + if (status & 0x44440000) {/* DLNx_HS_FIFO_OVERFLOW */ dsi_send_events(ctrl, DSI_EV_DLNx_FIFO_OVERFLOW, 0); /* Ignore FIFO EMPTY when overflow happens */