Commit a4c639b0 authored by Rob Herring's avatar Rob Herring Committed by Greg Kroah-Hartman

tty/serial: 8250_early: Add support for PXA UARTs

The PXA variant of the 8250 UART adds a UART enable bit which must not
be cleared. Make the earlycon support maintain this bit if it is set.
This implies some initialization of the UART, but we cannot
unconditionally set the bit as some other variants require this bit to
be clear for other functions.
Signed-off-by: default avatarRob Herring <robh@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: linux-serial@vger.kernel.org
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6ad991b6
...@@ -93,10 +93,10 @@ static void __init early_serial8250_write(struct console *console, ...@@ -93,10 +93,10 @@ static void __init early_serial8250_write(struct console *console,
struct uart_port *port = &early_device->port; struct uart_port *port = &early_device->port;
unsigned int ier; unsigned int ier;
/* Save the IER and disable interrupts */ /* Save the IER and disable interrupts preserving the UUE bit */
ier = serial8250_early_in(port, UART_IER); ier = serial8250_early_in(port, UART_IER);
if (ier) if (ier)
serial8250_early_out(port, UART_IER, 0); serial8250_early_out(port, UART_IER, ier & UART_IER_UUE);
uart_console_write(port, s, count, serial_putc); uart_console_write(port, s, count, serial_putc);
...@@ -127,9 +127,11 @@ static void __init init_port(struct earlycon_device *device) ...@@ -127,9 +127,11 @@ static void __init init_port(struct earlycon_device *device)
struct uart_port *port = &device->port; struct uart_port *port = &device->port;
unsigned int divisor; unsigned int divisor;
unsigned char c; unsigned char c;
unsigned int ier;
serial8250_early_out(port, UART_LCR, 0x3); /* 8n1 */ serial8250_early_out(port, UART_LCR, 0x3); /* 8n1 */
serial8250_early_out(port, UART_IER, 0); /* no interrupt */ ier = serial8250_early_in(port, UART_IER);
serial8250_early_out(port, UART_IER, ier & UART_IER_UUE); /* no interrupt */
serial8250_early_out(port, UART_FCR, 0); /* no fifo */ serial8250_early_out(port, UART_FCR, 0); /* no fifo */
serial8250_early_out(port, UART_MCR, 0x3); /* DTR + RTS */ serial8250_early_out(port, UART_MCR, 0x3); /* DTR + RTS */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment