Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 913c6c0e authored by Lucas Stach's avatar Lucas Stach Committed by Greg Kroah-Hartman
Browse files

serial: imx: add earlycon support



Earlycon allows to have an early debugging console that doesn't need
to be statically configured in the kernel config, like earlyprintk,
but is set up through the stdout-path DT property.

This allows to have the early debugging always built into the
kernel and enabled on demand without clashing between different boards
or architectures.

Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4cad4c57
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -582,6 +582,7 @@ config SERIAL_IMX_CONSOLE
	bool "Console on IMX serial port"
	depends on SERIAL_IMX=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON if OF
	help
	  If you have enabled the serial port on the Freescale IMX
	  CPU you can make it the console by answering Y to this option.
+32 −0
Original line number Diff line number Diff line
@@ -1795,6 +1795,38 @@ static struct console imx_console = {
};

#define IMX_CONSOLE	&imx_console

#ifdef CONFIG_OF
static void imx_console_early_putchar(struct uart_port *port, int ch)
{
	while (readl_relaxed(port->membase + IMX21_UTS) & UTS_TXFULL)
		cpu_relax();

	writel_relaxed(ch, port->membase + URTX0);
}

static void imx_console_early_write(struct console *con, const char *s,
				    unsigned count)
{
	struct earlycon_device *dev = con->data;

	uart_console_write(&dev->port, s, count, imx_console_early_putchar);
}

static int __init
imx_console_early_setup(struct earlycon_device *dev, const char *opt)
{
	if (!dev->port.membase)
		return -ENODEV;

	dev->con->write = imx_console_early_write;

	return 0;
}
OF_EARLYCON_DECLARE(ec_imx6q, "fsl,imx6q-uart", imx_console_early_setup);
OF_EARLYCON_DECLARE(ec_imx21, "fsl,imx21-uart", imx_console_early_setup);
#endif

#else
#define IMX_CONSOLE	NULL
#endif