mirror of https://gitee.com/openkylin/linux.git
tty: serial: imx: enable imx serial console port as module
Add support for building i.MX serial driver as module. The changes of the patch: - imx console driver can be built as module. - move out earlycon code to separated driver like imx_earlycon.c, and imx earlycon driver only support build-in. Signed-off-by: Fugang Duan <fugang.duan@nxp.com> Link: https://lore.kernel.org/r/20200724070815.11445-2-fugang.duan@nxp.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a5e0691fd9
commit
0db4f9b91c
|
@ -502,15 +502,14 @@ config SERIAL_IMX
|
|||
can enable its onboard serial port by enabling this option.
|
||||
|
||||
config SERIAL_IMX_CONSOLE
|
||||
bool "Console on IMX serial port"
|
||||
depends on SERIAL_IMX=y
|
||||
tristate "Console on IMX serial port"
|
||||
depends on SERIAL_IMX
|
||||
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.
|
||||
CPU you can make it the console by answering Y/M to this option.
|
||||
|
||||
Even if you say Y here, the currently visible virtual console
|
||||
Even if you say Y/M here, the currently visible virtual console
|
||||
(/dev/tty0) will still be used as the system console by default, but
|
||||
you can alter that using a kernel command line option such as
|
||||
"console=ttymxc0". (Try "man bootparam" or see the documentation of
|
||||
|
|
|
@ -373,7 +373,7 @@ static inline int imx_uart_is_imx6q(struct imx_port *sport)
|
|||
/*
|
||||
* Save and restore functions for UCR1, UCR2 and UCR3 registers
|
||||
*/
|
||||
#if defined(CONFIG_SERIAL_IMX_CONSOLE)
|
||||
#if IS_ENABLED(CONFIG_SERIAL_IMX_CONSOLE)
|
||||
static void imx_uart_ucrs_save(struct imx_port *sport,
|
||||
struct imx_port_ucrs *ucr)
|
||||
{
|
||||
|
@ -1979,7 +1979,7 @@ static const struct uart_ops imx_uart_pops = {
|
|||
|
||||
static struct imx_port *imx_uart_ports[UART_NR];
|
||||
|
||||
#ifdef CONFIG_SERIAL_IMX_CONSOLE
|
||||
#if IS_ENABLED(CONFIG_SERIAL_IMX_CONSOLE)
|
||||
static void imx_uart_console_putchar(struct uart_port *port, int ch)
|
||||
{
|
||||
struct imx_port *sport = (struct imx_port *)port;
|
||||
|
@ -2176,39 +2176,6 @@ static struct console imx_uart_console = {
|
|||
|
||||
#define IMX_CONSOLE &imx_uart_console
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static void imx_uart_console_early_putchar(struct uart_port *port, int ch)
|
||||
{
|
||||
struct imx_port *sport = (struct imx_port *)port;
|
||||
|
||||
while (imx_uart_readl(sport, IMX21_UTS) & UTS_TXFULL)
|
||||
cpu_relax();
|
||||
|
||||
imx_uart_writel(sport, ch, URTX0);
|
||||
}
|
||||
|
||||
static void imx_uart_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_uart_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_uart_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
|
||||
|
|
Loading…
Reference in New Issue