Skip to content

Commit 6a7b9f0

Browse files
committed
Revert "tty: serial: Use fifo in 8250 console driver"
This reverts commit 5021d70. The patch is still a bit buggy, and this breaks some other hardware types. It needs to be resubmitted in a non-buggy way, and make sure the other hardware types also continue to work properly. Fixes: 5021d70 ("tty: serial: Use fifo in 8250 console driver") Reported-by: Sebastian Andrzej Siewior <[email protected]> Reported-by: Jon Hunter <[email protected]> Link: https://lore.kernel.org/r/Ye/[email protected] Link: https://lore.kernel.org/r/[email protected] Cc: Wander Lairson Costa <[email protected]> Cc: Andy Shevchenko <[email protected]> Cc: Jiri Slaby <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent e783362 commit 6a7b9f0

File tree

1 file changed

+6
-55
lines changed

1 file changed

+6
-55
lines changed

drivers/tty/serial/8250/8250_port.c

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2056,7 +2056,10 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state)
20562056
serial8250_rpm_put(up);
20572057
}
20582058

2059-
static void wait_for_lsr(struct uart_8250_port *up, int bits)
2059+
/*
2060+
* Wait for transmitter & holding register to empty
2061+
*/
2062+
static void wait_for_xmitr(struct uart_8250_port *up, int bits)
20602063
{
20612064
unsigned int status, tmout = 10000;
20622065

@@ -2073,16 +2076,6 @@ static void wait_for_lsr(struct uart_8250_port *up, int bits)
20732076
udelay(1);
20742077
touch_nmi_watchdog();
20752078
}
2076-
}
2077-
2078-
/*
2079-
* Wait for transmitter & holding register to empty
2080-
*/
2081-
static void wait_for_xmitr(struct uart_8250_port *up, int bits)
2082-
{
2083-
unsigned int tmout;
2084-
2085-
wait_for_lsr(up, bits);
20862079

20872080
/* Wait up to 1s for flow control if necessary */
20882081
if (up->port.flags & UPF_CONS_FLOW) {
@@ -3332,35 +3325,6 @@ static void serial8250_console_restore(struct uart_8250_port *up)
33323325
serial8250_out_MCR(up, UART_MCR_DTR | UART_MCR_RTS);
33333326
}
33343327

3335-
/*
3336-
* Print a string to the serial port using the device FIFO
3337-
*
3338-
* It sends fifosize bytes and then waits for the fifo
3339-
* to get empty.
3340-
*/
3341-
static void serial8250_console_fifo_write(struct uart_8250_port *up,
3342-
const char *s, unsigned int count)
3343-
{
3344-
int i;
3345-
const char *end = s + count;
3346-
unsigned int fifosize = up->port.fifosize;
3347-
bool cr_sent = false;
3348-
3349-
while (s != end) {
3350-
wait_for_lsr(up, UART_LSR_THRE);
3351-
3352-
for (i = 0; i < fifosize && s != end; ++i) {
3353-
if (*s == '\n' && !cr_sent) {
3354-
serial_out(up, UART_TX, '\r');
3355-
cr_sent = true;
3356-
} else {
3357-
serial_out(up, UART_TX, *s++);
3358-
cr_sent = false;
3359-
}
3360-
}
3361-
}
3362-
}
3363-
33643328
/*
33653329
* Print a string to the serial port trying not to disturb
33663330
* any possible real use of the port...
@@ -3376,7 +3340,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s,
33763340
struct uart_8250_em485 *em485 = up->em485;
33773341
struct uart_port *port = &up->port;
33783342
unsigned long flags;
3379-
unsigned int ier, use_fifo;
3343+
unsigned int ier;
33803344
int locked = 1;
33813345

33823346
touch_nmi_watchdog();
@@ -3408,20 +3372,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s,
34083372
mdelay(port->rs485.delay_rts_before_send);
34093373
}
34103374

3411-
use_fifo = (up->capabilities & UART_CAP_FIFO) &&
3412-
port->fifosize > 1 &&
3413-
(serial_port_in(port, UART_FCR) & UART_FCR_ENABLE_FIFO) &&
3414-
/*
3415-
* After we put a data in the fifo, the controller will send
3416-
* it regardless of the CTS state. Therefore, only use fifo
3417-
* if we don't use control flow.
3418-
*/
3419-
!(up->port.flags & UPF_CONS_FLOW);
3420-
3421-
if (likely(use_fifo))
3422-
serial8250_console_fifo_write(up, s, count);
3423-
else
3424-
uart_console_write(port, s, count, serial8250_console_putchar);
3375+
uart_console_write(port, s, count, serial8250_console_putchar);
34253376

34263377
/*
34273378
* Finally, wait for transmitter to become empty

0 commit comments

Comments
 (0)