mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
mxser: don't read from UART_FCR
The UART_FCR register is write-only. When reading it, one gets contents of (read-only) UART_IIR instead as they are shared. This mistake was performed in mxser_flush_buffer() to clear FIFOs. Actually FCR handling throughout the driver is completely broken. On many places, it respects neither mu860 settings, nor FIFO (16450 vs 16550) setting. This patch doesn't help to fix this, it actually does the same. We will introduce a mxser_port::FCR in the next patch to fix this issue. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Link: https://lore.kernel.org/r/20210922075938.31390-6-jslaby@suse.cz Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ee7e5e66f2
commit
215fa41c2d
|
|
@ -859,17 +859,14 @@ static int mxser_open(struct tty_struct *tty, struct file *filp)
|
|||
static void mxser_flush_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct mxser_port *info = tty->driver_data;
|
||||
char fcr;
|
||||
unsigned long flags;
|
||||
|
||||
|
||||
spin_lock_irqsave(&info->slock, flags);
|
||||
info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
|
||||
|
||||
fcr = inb(info->ioaddr + UART_FCR);
|
||||
outb((fcr | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT),
|
||||
outb(UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT,
|
||||
info->ioaddr + UART_FCR);
|
||||
outb(fcr, info->ioaddr + UART_FCR);
|
||||
|
||||
spin_unlock_irqrestore(&info->slock, flags);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user