1 From ca8bb4aefb932e3da105f28cbfba36d57a931081 Mon Sep 17 00:00:00 2001
2 From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
3 Date: Sun, 15 Feb 2015 18:32:16 +0100
4 Subject: serial: 8250: Revert "tty: serial: 8250_core: read only RX if there is something in the FIFO"
6 From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
8 commit ca8bb4aefb932e3da105f28cbfba36d57a931081 upstream.
10 This reverts commit 0aa525d11859c1a4d5b78fdc704148e2ae03ae13.
12 The conditional RX-FIFO read seems to cause spurious interrupts and we
14 |serial8250: too much work for irq29
16 The previous behaviour was "default" for decades and Marvell's 88f6282 SoC
17 might not be the only that relies on it. Therefore the Omap fix is
20 Fixes: 0aa525d11859 ("tty: serial: 8250_core: read only RX if there is
21 something in the FIFO")
22 Reported-By: Nicolas Schichan <nschichan@freebox.fr>
23 Debuged-By: Peter Hurley <peter@hurleysoftware.com>
24 Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
25 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
28 drivers/tty/serial/8250/8250_core.c | 11 +++++------
29 1 file changed, 5 insertions(+), 6 deletions(-)
31 --- a/drivers/tty/serial/8250/8250_core.c
32 +++ b/drivers/tty/serial/8250/8250_core.c
33 @@ -2107,8 +2107,8 @@ int serial8250_do_startup(struct uart_po
35 * Clear the interrupt registers.
37 - if (serial_port_in(port, UART_LSR) & UART_LSR_DR)
38 - serial_port_in(port, UART_RX);
39 + serial_port_in(port, UART_LSR);
40 + serial_port_in(port, UART_RX);
41 serial_port_in(port, UART_IIR);
42 serial_port_in(port, UART_MSR);
44 @@ -2269,8 +2269,8 @@ dont_test_tx_en:
45 * saved flags to avoid getting false values from polling
46 * routines or the previous session.
48 - if (serial_port_in(port, UART_LSR) & UART_LSR_DR)
49 - serial_port_in(port, UART_RX);
50 + serial_port_in(port, UART_LSR);
51 + serial_port_in(port, UART_RX);
52 serial_port_in(port, UART_IIR);
53 serial_port_in(port, UART_MSR);
54 up->lsr_saved_flags = 0;
55 @@ -2363,8 +2363,7 @@ void serial8250_do_shutdown(struct uart_
56 * Read data port to reset things, and then unlink from
59 - if (serial_port_in(port, UART_LSR) & UART_LSR_DR)
60 - serial_port_in(port, UART_RX);
61 + serial_port_in(port, UART_RX);
62 serial8250_rpm_put(up);
64 del_timer_sync(&up->timer);