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: Stefan Agner <stefan@agner.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Stefan Agner 2015-10-17 00:45:55 -07:00 committed by Greg Kroah-Hartman
parent 6200cbaf62
commit 1d59b382f1
3 changed files with 47 additions and 0 deletions

View File

@ -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

View File

@ -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.

View File

@ -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