tty: serial: xuartps: Wait for rx and tx reset done status
authorNava kishore Manne <nava.manne@xilinx.com>
Thu, 15 Sep 2016 09:15:31 +0000 (14:45 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Sep 2016 09:46:12 +0000 (11:46 +0200)
After issuing the reset, driver is not checking the rx and tx reset
done status. So, modified driver to wait for the reset done status.

Signed-off-by: Nava kishore Manne <navam@xilinx.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/xilinx_uartps.c

index bf06d2c..e0c6a86 100644 (file)
@@ -694,6 +694,10 @@ static void cdns_uart_set_termios(struct uart_port *port,
        ctrl_reg |= CDNS_UART_CR_TXRST | CDNS_UART_CR_RXRST;
        writel(ctrl_reg, port->membase + CDNS_UART_CR);
 
+       while (readl(port->membase + CDNS_UART_CR) &
+               (CDNS_UART_CR_TXRST | CDNS_UART_CR_RXRST))
+               cpu_relax();
+
        /*
         * Clear the RX disable and TX disable bits and then set the TX enable
         * bit and RX enable bit to enable the transmitter and receiver.
@@ -797,6 +801,10 @@ static int cdns_uart_startup(struct uart_port *port)
        writel(CDNS_UART_CR_TXRST | CDNS_UART_CR_RXRST,
                        port->membase + CDNS_UART_CR);
 
+       while (readl(port->membase + CDNS_UART_CR) &
+               (CDNS_UART_CR_TXRST | CDNS_UART_CR_RXRST))
+               cpu_relax();
+
        /*
         * Clear the RX disable bit and then set the RX enable bit to enable
         * the receiver.