summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_host.c16
1 files 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 */