mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 07:03:03 +02:00
serial: 8250: Use high-level writing function for FIFO
Currently serial8250_console_fifo_write() directly writes into the UART_TX register rather than using the high-level function serial8250_console_putchar(). This is because serial8250_console_putchar() waits for the holding register to become empty, which would defeat the purpose of the FIFO code. Move the LSR_THRE waiting to a new function serial8250_console_wait_putchar() so that the FIFO code can use serial8250_console_putchar(). This will be particularly important for a follow-up commit, where output bytes are inspected to track newlines. This is only refactoring and has no functional change. Signed-off-by: John Ogness <john.ogness@linutronix.de> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Link: https://lore.kernel.org/r/20250107212702.169493-4-john.ogness@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8d5cfb1fe5
commit
95a1b409ba
|
|
@ -3298,11 +3298,16 @@ EXPORT_SYMBOL_GPL(serial8250_set_defaults);
|
|||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||
|
||||
static void serial8250_console_putchar(struct uart_port *port, unsigned char ch)
|
||||
{
|
||||
serial_port_out(port, UART_TX, ch);
|
||||
}
|
||||
|
||||
static void serial8250_console_wait_putchar(struct uart_port *port, unsigned char ch)
|
||||
{
|
||||
struct uart_8250_port *up = up_to_u8250p(port);
|
||||
|
||||
wait_for_xmitr(up, UART_LSR_THRE);
|
||||
serial_port_out(port, UART_TX, ch);
|
||||
serial8250_console_putchar(port, ch);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -3352,6 +3357,7 @@ static void serial8250_console_fifo_write(struct uart_8250_port *up,
|
|||
{
|
||||
const char *end = s + count;
|
||||
unsigned int fifosize = up->tx_loadsz;
|
||||
struct uart_port *port = &up->port;
|
||||
unsigned int tx_count = 0;
|
||||
bool cr_sent = false;
|
||||
unsigned int i;
|
||||
|
|
@ -3362,10 +3368,10 @@ static void serial8250_console_fifo_write(struct uart_8250_port *up,
|
|||
|
||||
for (i = 0; i < fifosize && s != end; ++i) {
|
||||
if (*s == '\n' && !cr_sent) {
|
||||
serial_out(up, UART_TX, '\r');
|
||||
serial8250_console_putchar(port, '\r');
|
||||
cr_sent = true;
|
||||
} else {
|
||||
serial_out(up, UART_TX, *s++);
|
||||
serial8250_console_putchar(port, *s++);
|
||||
cr_sent = false;
|
||||
}
|
||||
}
|
||||
|
|
@ -3445,7 +3451,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s,
|
|||
if (likely(use_fifo))
|
||||
serial8250_console_fifo_write(up, s, count);
|
||||
else
|
||||
uart_console_write(port, s, count, serial8250_console_putchar);
|
||||
uart_console_write(port, s, count, serial8250_console_wait_putchar);
|
||||
|
||||
/*
|
||||
* Finally, wait for transmitter to become empty
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user