mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-18 08:35:08 +08:00
ARM: meson: serial: tx_empty fails to check for transmitter busy
The tx_empty() uart_op should only return empty if both the transmit fifo and the transmit state-machine are both idle. Add a test for the hardware's XMIT_BUSY flag. Note, this is possibly related to an issue where the port is being shutdown with paritally transmitted characters in it. Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> Reported-by: Edward Cragg <edward.cragg@codethink.co.uk> Tested-by: Carlo Caione <carlo@endlessm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
00661dd855
commit
8867973901
@ -57,6 +57,7 @@
|
||||
#define AML_UART_RX_EMPTY BIT(20)
|
||||
#define AML_UART_TX_FULL BIT(21)
|
||||
#define AML_UART_TX_EMPTY BIT(22)
|
||||
#define AML_UART_XMIT_BUSY BIT(25)
|
||||
#define AML_UART_ERR (AML_UART_PARITY_ERR | \
|
||||
AML_UART_FRAME_ERR | \
|
||||
AML_UART_TX_FIFO_WERR)
|
||||
@ -100,7 +101,8 @@ static unsigned int meson_uart_tx_empty(struct uart_port *port)
|
||||
u32 val;
|
||||
|
||||
val = readl(port->membase + AML_UART_STATUS);
|
||||
return (val & AML_UART_TX_EMPTY) ? TIOCSER_TEMT : 0;
|
||||
val &= (AML_UART_TX_EMPTY | AML_UART_XMIT_BUSY);
|
||||
return (val == AML_UART_TX_EMPTY) ? TIOCSER_TEMT : 0;
|
||||
}
|
||||
|
||||
static void meson_uart_stop_tx(struct uart_port *port)
|
||||
|
Loading…
Reference in New Issue
Block a user