Browse Source

tty: serial: bcm63xx: Enable DT earlycon support

This enables early console output if there is a chosen/stdout-path
property referencing a UART node with the "brcm,bcm6345-uart" compatible
string.  The bootloader sets up the pinmux and baud/parity/etc.
Tested on bcm3384 (MIPS, DT).

Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Kevin Cernekee 10 years ago
parent
commit
1ab8e4b1ac
2 changed files with 21 additions and 0 deletions
  1. 1 0
      drivers/tty/serial/Kconfig
  2. 20 0
      drivers/tty/serial/bcm63xx_uart.c

+ 1 - 0
drivers/tty/serial/Kconfig

@@ -1297,6 +1297,7 @@ config SERIAL_BCM63XX_CONSOLE
 	bool "Console on BCM63xx serial port"
 	bool "Console on BCM63xx serial port"
 	depends on SERIAL_BCM63XX=y
 	depends on SERIAL_BCM63XX=y
 	select SERIAL_CORE_CONSOLE
 	select SERIAL_CORE_CONSOLE
+	select SERIAL_EARLYCON
 	help
 	help
 	  If you have enabled the serial port on the BCM63xx CPU
 	  If you have enabled the serial port on the BCM63xx CPU
 	  you can make it the console by answering Y to this option.
 	  you can make it the console by answering Y to this option.

+ 20 - 0
drivers/tty/serial/bcm63xx_uart.c

@@ -782,6 +782,26 @@ static int __init bcm63xx_console_init(void)
 
 
 console_initcall(bcm63xx_console_init);
 console_initcall(bcm63xx_console_init);
 
 
+static void bcm_early_write(struct console *con, const char *s, unsigned n)
+{
+	struct earlycon_device *dev = con->data;
+
+	uart_console_write(&dev->port, s, n, bcm_console_putchar);
+	wait_for_xmitr(&dev->port);
+}
+
+static int __init bcm_early_console_setup(struct earlycon_device *device,
+					  const char *opt)
+{
+	if (!device->port.membase)
+		return -ENODEV;
+
+	device->con->write = bcm_early_write;
+	return 0;
+}
+
+OF_EARLYCON_DECLARE(bcm63xx_uart, "brcm,bcm6345-uart", bcm_early_console_setup);
+
 #define BCM63XX_CONSOLE	(&bcm63xx_console)
 #define BCM63XX_CONSOLE	(&bcm63xx_console)
 #else
 #else
 #define BCM63XX_CONSOLE	NULL
 #define BCM63XX_CONSOLE	NULL