summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPadmanabhan Komanduru <pkomandu@codeaurora.org>2016-02-29 15:18:04 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-25 16:03:54 -0700
commitba9fc59027ac7c74cf98025147469439b67ad55c (patch)
treefbc34a7e8fded848e9eb7e0fb85adbb71b670caf
parentd0666f41e497c97047edf97d7688b7c770cefb24 (diff)
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 <pkomandu@codeaurora.org>
-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 */