imx_set_termios(): remove busy-waiting "drain Tx FIFO" loop. Worse yet, it was potentially unbounded wait due to RTS/CTS (hardware) handshake. Let user space ensure draining is done before termios change, if draining is needed in the first place. Signed-off-by: Sergey Organov <sorganov@xxxxxxxxx> --- drivers/tty/serial/imx.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 13face9..fb82fc6 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -1634,7 +1634,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, uart_update_timeout(port, termios->c_cflag, baud); /* - * disable interrupts and drain transmitter + * disable interrupts */ old_ucr1 = imx_uart_readl(sport, UCR1); imx_uart_writel(sport, @@ -1643,9 +1643,6 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, old_ucr2 = imx_uart_readl(sport, UCR2); imx_uart_writel(sport, old_ucr2 & ~UCR2_ATEN, UCR2); - while (!(imx_uart_readl(sport, USR2) & USR2_TXDC)) - barrier(); - /* then, disable everything */ imx_uart_writel(sport, old_ucr2 & ~(UCR2_TXEN | UCR2_RXEN | UCR2_ATEN), UCR2); -- 2.10.0.1.g57b01a3