serial: fsl_lpuart: consider TX FIFO too in lpuart32_tx_empty
authorAtsushi Nemoto <atsushi.nemoto@sord.co.jp>
Mon, 21 Jan 2019 08:37:28 +0000 (17:37 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Jan 2019 08:51:10 +0000 (09:51 +0100)
The commit 3876a00fcb6b ("tty: serial: fsl_lpuart: consider TX FIFO
too in tx_empty") fixed lpuart_tx_empty only.
Fix lpuart32_tx_empty too.

Signed-off-by: Atsushi Nemoto <atsushi.nemoto@sord.co.jp>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/fsl_lpuart.c

index 2389986..5e13946 100644 (file)
@@ -664,8 +664,18 @@ static unsigned int lpuart_tx_empty(struct uart_port *port)
 
 static unsigned int lpuart32_tx_empty(struct uart_port *port)
 {
-       return (lpuart32_read(port, UARTSTAT) & UARTSTAT_TC) ?
-               TIOCSER_TEMT : 0;
+       struct lpuart_port *sport = container_of(port,
+                       struct lpuart_port, port);
+       unsigned long stat = lpuart32_read(port, UARTSTAT);
+       unsigned long sfifo = lpuart32_read(port, UARTFIFO);
+
+       if (sport->dma_tx_in_progress)
+               return 0;
+
+       if (stat & UARTSTAT_TC && sfifo & UARTFIFO_TXEMPT)
+               return TIOCSER_TEMT;
+
+       return 0;
 }
 
 static bool lpuart_is_32(struct lpuart_port *sport)