|
@@ -637,10 +637,12 @@ static void cdns_uart_set_termios(struct uart_port *port,
|
|
|
|
|
|
spin_lock_irqsave(&port->lock, flags);
|
|
spin_lock_irqsave(&port->lock, flags);
|
|
|
|
|
|
- /* Empty the receive FIFO 1st before making changes */
|
|
|
|
- while ((cdns_uart_readl(CDNS_UART_SR_OFFSET) &
|
|
|
|
- CDNS_UART_SR_RXEMPTY) != CDNS_UART_SR_RXEMPTY) {
|
|
|
|
- cdns_uart_readl(CDNS_UART_FIFO_OFFSET);
|
|
|
|
|
|
+ /* Wait for the transmit FIFO to empty before making changes */
|
|
|
|
+ if (!(cdns_uart_readl(CDNS_UART_CR_OFFSET) & CDNS_UART_CR_TX_DIS)) {
|
|
|
|
+ while (!(cdns_uart_readl(CDNS_UART_SR_OFFSET) &
|
|
|
|
+ CDNS_UART_SR_TXEMPTY)) {
|
|
|
|
+ cpu_relax();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/* Disable the TX and RX to set baud rate */
|
|
/* Disable the TX and RX to set baud rate */
|