linux/drivers/tty
Nathan Rossi 6ecde472b0 tty: xuartps: Fix RX hang, and TX corruption in termios call
The implementation of flushing the RX FIFO breaks in a number of cases,
it is impossible to ensure an complete flush of the RX FIFO due to the
hardware not allowing the use of the FIFOs when the receiver is disabled
(Reading from the FIFO register does not remove it from the FIFO when
the RX_EN=0 or RX_DIS=1). Additionally during an initial set_termios
call where RX_DIS=1 causes a hang waiting forever for the RX FIFO to
empty. On top of this the FIFO will be cleared by the use of the RXRST
bits on the Control Register, making the RX flush pointless (as it does
not preserve the data read anyway).

Due to the TXRST the TX FIFO and transmitter can be interrupted during
frame trasmission, causing corruption and additionally data lost in the
FIFO. Most other serial drivers do not flush or clear the FIFOs during
a termios configuration change and as such do not have issues with
corruption. For this UART controller is it required that the TXRST/RXRST
bit be flagged during the change, this means that the data in the FIFO
will be dropped when changing configuration. In order to prevent data
loss and corruption of the transmitted data, wait until the TX FIFO is
empty before changing the configuration. The performance of this may
cause the set_termios call to take a longer amount of time especially
on lower baud rates, however it is comparable to the same performance
hit that a console_write call costs.

Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com>
Acked-by: Anirudha Sarangi <anirudh@xilinx.com>
Acked-by: Harini Katakam <harinik@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-02-02 10:11:25 -08:00
..
hvc Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
ipwireless
serial tty: xuartps: Fix RX hang, and TX corruption in termios call 2015-02-02 10:11:25 -08:00
vt vt: provide notifications on selection changes 2015-02-02 10:09:54 -08:00
amiserial.c TTY: fix misspelling of current function in string 2015-01-09 14:38:15 -08:00
bfin_jtag_comm.c
cyclades.c
ehv_bytechan.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
goldfish.c
isicom.c tty/isicom: fix big-endian compile warning 2015-02-02 10:11:25 -08:00
Kconfig
Makefile
metag_da.c
moxa.c
moxa.h
mxser.c
mxser.h
n_gsm.c
n_hdlc.c
n_r3964.c
n_tracerouter.c
n_tracesink.c
n_tracesink.h
n_tty.c Revert "tty: Fix pty master poll() after slave closes v2" 2015-01-09 13:46:02 -08:00
nozomi.c
pty.c tty: Prevent untrappable signals from malicious program 2015-02-02 10:09:54 -08:00
rocket_int.h
rocket.c TTY: fix misspelling of current function in string 2015-01-09 14:38:15 -08:00
rocket.h
synclink_gt.c
synclink.c
synclinkmp.c
sysrq.c
tty_audit.c
tty_buffer.c
tty_io.c tty: Prevent hw state corruption in exclusive mode reopen 2015-01-09 13:46:02 -08:00
tty_ioctl.c
tty_ldisc.c
tty_ldsem.c
tty_mutex.c tty: Remove warning in tty_lock_slave() 2015-01-09 14:17:59 -08:00
tty_port.c tty: Deletion of unnecessary checks before two function calls 2014-11-26 19:35:49 -08:00