serial: imx: stop using USR2 in FIFO reading loop
authorSergey Organov <sorganov@gmail.com>
Wed, 1 Feb 2023 14:26:59 +0000 (17:26 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 Feb 2023 12:12:05 +0000 (13:12 +0100)
The chip provides all the needed bits in the URXD0 register that we read
anyway for data, so get rid of reading USR2 and use only URXD0 bits
instead.

Signed-off-by: Sergey Organov <sorganov@gmail.com>
Link: https://lore.kernel.org/r/20230201142700.4346-7-sorganov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index c578cdc6d8da5a2e40c881b438297413e5a540fe..a662f48a214652b65d345a870128c5e7023a8411 100644 (file)
@@ -894,27 +894,21 @@ static irqreturn_t __imx_uart_rxint(int irq, void *dev_id)
        struct tty_port *port = &sport->port.state->port;
        u32 usr2;
 
-       usr2 = imx_uart_readl(sport, USR2);
-
        /* If we received something, check for 0xff flood */
+       usr2 = imx_uart_readl(sport, USR2);
        if (usr2 & USR2_RDR)
                imx_uart_check_flood(sport, usr2);
 
-       for ( ; usr2 & USR2_RDR; usr2 = imx_uart_readl(sport, USR2)) {
+       while ((rx = imx_uart_readl(sport, URXD0)) & URXD_CHARRDY) {
                flg = TTY_NORMAL;
                sport->port.icount.rx++;
 
-               rx = imx_uart_readl(sport, URXD0);
-
-               if (usr2 & USR2_BRCD) {
-                       imx_uart_writel(sport, USR2_BRCD, USR2);
-                       if (uart_handle_break(&sport->port))
-                               continue;
-               }
-
                if (unlikely(rx & URXD_ERR)) {
-                       if (rx & URXD_BRK)
+                       if (rx & URXD_BRK) {
                                sport->port.icount.brk++;
+                               if (uart_handle_break(&sport->port))
+                                       continue;
+                       }
                        else if (rx & URXD_PRERR)
                                sport->port.icount.parity++;
                        else if (rx & URXD_FRMERR)