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);
 }