Patch "drm: mxsfb: Enable recovery on underflow" has been added to the 5.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm: mxsfb: Enable recovery on underflow

to the 5.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-mxsfb-enable-recovery-on-underflow.patch
and it can be found in the queue-5.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b9a89dd788ef2548b58e83b2e0d280be1738691c
Author: Marek Vasut <marex@xxxxxxx>
Date:   Mon Jun 21 00:47:01 2021 +0200

    drm: mxsfb: Enable recovery on underflow
    
    [ Upstream commit 0c9856e4edcdcac22d65618e8ceff9eb41447880 ]
    
    There is some sort of corner case behavior of the controller,
    which could rarely be triggered at least on i.MX6SX connected
    to 800x480 DPI panel and i.MX8MM connected to DPI->DSI->LVDS
    bridged 1920x1080 panel (and likely on other setups too), where
    the image on the panel shifts to the right and wraps around.
    This happens either when the controller is enabled on boot or
    even later during run time. The condition does not correct
    itself automatically, i.e. the display image remains shifted.
    
    It seems this problem is known and is due to sporadic underflows
    of the LCDIF FIFO. While the LCDIF IP does have underflow/overflow
    IRQs, neither of the IRQs trigger and neither IRQ status bit is
    asserted when this condition occurs.
    
    All known revisions of the LCDIF IP have CTRL1 RECOVER_ON_UNDERFLOW
    bit, which is described in the reference manual since i.MX23 as
    "
      Set this bit to enable the LCDIF block to recover in the next
      field/frame if there was an underflow in the current field/frame.
    "
    Enable this bit to mitigate the sporadic underflows.
    
    Fixes: 45d59d704080 ("drm: Add new driver for MXSFB controller")
    Signed-off-by: Marek Vasut <marex@xxxxxxx>
    Cc: Daniel Abrecht <public@xxxxxxxxxxxxxxxx>
    Cc: Emil Velikov <emil.l.velikov@xxxxxxxxx>
    Cc: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
    Cc: Lucas Stach <l.stach@xxxxxxxxxxxxxx>
    Cc: Stefan Agner <stefan@xxxxxxxx>
    Reviewed-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
    Reviewed-by: Jagan Teki <jagan@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210620224701.189289-1-marex@xxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
index 300e7bab0f43..01e0f525360f 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
@@ -115,6 +115,35 @@ static void mxsfb_enable_controller(struct mxsfb_drm_private *mxsfb)
 	reg |= VDCTRL4_SYNC_SIGNALS_ON;
 	writel(reg, mxsfb->base + LCDC_VDCTRL4);
 
+	/*
+	 * Enable recovery on underflow.
+	 *
+	 * There is some sort of corner case behavior of the controller,
+	 * which could rarely be triggered at least on i.MX6SX connected
+	 * to 800x480 DPI panel and i.MX8MM connected to DPI->DSI->LVDS
+	 * bridged 1920x1080 panel (and likely on other setups too), where
+	 * the image on the panel shifts to the right and wraps around.
+	 * This happens either when the controller is enabled on boot or
+	 * even later during run time. The condition does not correct
+	 * itself automatically, i.e. the display image remains shifted.
+	 *
+	 * It seems this problem is known and is due to sporadic underflows
+	 * of the LCDIF FIFO. While the LCDIF IP does have underflow/overflow
+	 * IRQs, neither of the IRQs trigger and neither IRQ status bit is
+	 * asserted when this condition occurs.
+	 *
+	 * All known revisions of the LCDIF IP have CTRL1 RECOVER_ON_UNDERFLOW
+	 * bit, which is described in the reference manual since i.MX23 as
+	 * "
+	 *   Set this bit to enable the LCDIF block to recover in the next
+	 *   field/frame if there was an underflow in the current field/frame.
+	 * "
+	 * Enable this bit to mitigate the sporadic underflows.
+	 */
+	reg = readl(mxsfb->base + LCDC_CTRL1);
+	reg |= CTRL1_RECOVER_ON_UNDERFLOW;
+	writel(reg, mxsfb->base + LCDC_CTRL1);
+
 	writel(CTRL_RUN, mxsfb->base + LCDC_CTRL + REG_SET);
 }
 
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_regs.h b/drivers/gpu/drm/mxsfb/mxsfb_regs.h
index 55d28a27f912..df90e960f495 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_regs.h
+++ b/drivers/gpu/drm/mxsfb/mxsfb_regs.h
@@ -54,6 +54,7 @@
 #define CTRL_DF24			BIT(1)
 #define CTRL_RUN			BIT(0)
 
+#define CTRL1_RECOVER_ON_UNDERFLOW	BIT(24)
 #define CTRL1_FIFO_CLEAR		BIT(21)
 #define CTRL1_SET_BYTE_PACKAGING(x)	(((x) & 0xf) << 16)
 #define CTRL1_GET_BYTE_PACKAGING(x)	(((x) >> 16) & 0xf)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux