Commit 1d59b382 authored by Stefan Agner's avatar Stefan Agner Committed by Greg Kroah-Hartman

serial: fsl_lpuart: add earlycon support

Add support for DT and command line based earlycon support for
lpuart and lpuart32 used on Freescale Vybrid and and QorIQ LS1021A
processors.
Signed-off-by: default avatarStefan Agner <stefan@agner.ch>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6200cbaf
...@@ -1023,6 +1023,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1023,6 +1023,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
serial port must already be setup and configured. serial port must already be setup and configured.
Options are not yet supported. Options are not yet supported.
lpuart,<addr>
lpuart32,<addr>
Use early console provided by Freescale LP UART driver
found on Freescale Vybrid and QorIQ LS1021A processors.
A valid base address must be provided, and the serial
port must already be setup and configured.
earlyprintk= [X86,SH,BLACKFIN,ARM,M68k] earlyprintk= [X86,SH,BLACKFIN,ARM,M68k]
earlyprintk=vga earlyprintk=vga
earlyprintk=efi earlyprintk=efi
......
...@@ -1539,6 +1539,7 @@ config SERIAL_FSL_LPUART ...@@ -1539,6 +1539,7 @@ config SERIAL_FSL_LPUART
tristate "Freescale lpuart serial port support" tristate "Freescale lpuart serial port support"
depends on HAS_DMA depends on HAS_DMA
select SERIAL_CORE select SERIAL_CORE
select SERIAL_EARLYCON
help help
Support for the on-chip lpuart on some Freescale SOCs. Support for the on-chip lpuart on some Freescale SOCs.
......
...@@ -1746,6 +1746,45 @@ static struct console lpuart32_console = { ...@@ -1746,6 +1746,45 @@ static struct console lpuart32_console = {
.data = &lpuart_reg, .data = &lpuart_reg,
}; };
static void lpuart_early_write(struct console *con, const char *s, unsigned n)
{
struct earlycon_device *dev = con->data;
uart_console_write(&dev->port, s, n, lpuart_console_putchar);
}
static void lpuart32_early_write(struct console *con, const char *s, unsigned n)
{
struct earlycon_device *dev = con->data;
uart_console_write(&dev->port, s, n, lpuart32_console_putchar);
}
static int __init lpuart_early_console_setup(struct earlycon_device *device,
const char *opt)
{
if (!device->port.membase)
return -ENODEV;
device->con->write = lpuart_early_write;
return 0;
}
static int __init lpuart32_early_console_setup(struct earlycon_device *device,
const char *opt)
{
if (!device->port.membase)
return -ENODEV;
device->con->write = lpuart32_early_write;
return 0;
}
OF_EARLYCON_DECLARE(lpuart, "fsl,vf610-lpuart", lpuart_early_console_setup);
OF_EARLYCON_DECLARE(lpuart32, "fsl,ls1021a-lpuart", lpuart32_early_console_setup);
EARLYCON_DECLARE(lpuart, lpuart_early_console_setup);
EARLYCON_DECLARE(lpuart32, lpuart32_early_console_setup);
#define LPUART_CONSOLE (&lpuart_console) #define LPUART_CONSOLE (&lpuart_console)
#define LPUART32_CONSOLE (&lpuart32_console) #define LPUART32_CONSOLE (&lpuart32_console)
#else #else
......
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