MLK-21057 serial: imx: Restore proper init of shadow registers
authorLeonard Crestez <leonard.crestez@nxp.com>
Tue, 5 Mar 2019 17:24:11 +0000 (19:24 +0200)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
Upstream commit 3a0ab62f43de ("serial: imx: implement shadow registers
for UCRx and UFCR") made the imx_uart_readl/writel functions use a
"cache" to avoid reads/writers to hardware for some registers.

Those values need to be initialized once at probe time using real reads
from hardware; using imx_uart_readl for this is obviously non-functional

Fixes: 372312842fe7 ("tty: serial: imx: use imx_uart_writel() and imx_uart_readl()")

This is required for imx8mq to boot and likely fixes other things.

Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
Acked-by: Andy Duan <fugang.duan@nxp.com>
drivers/tty/serial/imx.c

index 89479e9..2e58f19 100644 (file)
@@ -2340,11 +2340,11 @@ static int imx_uart_probe(struct platform_device *pdev)
        }
 
        /* initialize shadow register values */
-       sport->ucr1 = imx_uart_readl(sport, UCR1);
-       sport->ucr2 = imx_uart_readl(sport, UCR2);
-       sport->ucr3 = imx_uart_readl(sport, UCR3);
-       sport->ucr4 = imx_uart_readl(sport, UCR4);
-       sport->ufcr = imx_uart_readl(sport, UFCR);
+       sport->ucr1 = readl(sport->port.membase + UCR1);
+       sport->ucr2 = readl(sport->port.membase + UCR2);
+       sport->ucr3 = readl(sport->port.membase + UCR3);
+       sport->ucr4 = readl(sport->port.membase + UCR4);
+       sport->ufcr = readl(sport->port.membase + UFCR);
 
        uart_get_rs485_mode(&pdev->dev, &sport->port.rs485);