From: Atsushi Nemoto Date: Mon, 21 Jan 2019 08:37:28 +0000 (+0900) Subject: serial: fsl_lpuart: consider TX FIFO too in lpuart32_tx_empty X-Git-Tag: v5.1-rc1~143^2~36 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=46dd6d779dccd4d1e73e61a4e22407cf3631c740;p=users%2Fdwmw2%2Flinux.git serial: fsl_lpuart: consider TX FIFO too in lpuart32_tx_empty 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 Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index 238998620349e..5e13946edc3ba 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -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)