]> git.karo-electronics.de Git - linux-beck.git/commitdiff
tty: xuartps: Don't consider circular buffer when enabling transmitter
authorSoren Brinkmann <soren.brinkmann@xilinx.com>
Sat, 26 Dec 2015 10:43:51 +0000 (02:43 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 7 Feb 2016 06:52:09 +0000 (22:52 -0800)
Restarting the transmitter even if the circ buffer is empty may be
necessary to push out remaining data when the port is restarted after
being stopped.

Cc: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Soren Brinkmann <soren.brinkmann@xilinx.com>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/xilinx_uartps.c

index 2c98c357d9a09390ed0c3d6e22b900ee9f496890..6a7cd4e057aee6d7788e08f02a358b55515771b4 100644 (file)
@@ -512,7 +512,7 @@ static void cdns_uart_start_tx(struct uart_port *port)
 {
        unsigned int status, numbytes = port->fifosize;
 
-       if (uart_circ_empty(&port->state->xmit) || uart_tx_stopped(port))
+       if (uart_tx_stopped(port))
                return;
 
        /*
@@ -524,6 +524,9 @@ static void cdns_uart_start_tx(struct uart_port *port)
        status |= CDNS_UART_CR_TX_EN;
        writel(status, port->membase + CDNS_UART_CR_OFFSET);
 
+       if (uart_circ_empty(&port->state->xmit))
+               return;
+
        while (numbytes-- && ((readl(port->membase + CDNS_UART_SR_OFFSET) &
                                CDNS_UART_SR_TXFULL)) != CDNS_UART_SR_TXFULL) {
                /* Break if no more data available in the UART buffer */