linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH tty/serial 1/1] tty: serial: imx: enable imx serial console port as module
@ 2020-06-05  8:43 Fugang Duan
  2020-06-27 14:23 ` Greg KH
  0 siblings, 1 reply; 5+ messages in thread
From: Fugang Duan @ 2020-06-05  8:43 UTC (permalink / raw)
  To: gregkh, u.kleine-koenig
  Cc: linux-serial, lukas, fugang.duan, jslaby, s.hauer, kernel

GKI kernel requires drivers built as modules including
console driver, so add the support that imx serial console
driver can be built 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>
---
 drivers/tty/serial/Kconfig        | 17 +++++++----
 drivers/tty/serial/Makefile       |  1 +
 drivers/tty/serial/imx.c          | 37 ++---------------------
 drivers/tty/serial/imx_earlycon.c | 50 +++++++++++++++++++++++++++++++
 4 files changed, 65 insertions(+), 40 deletions(-)

diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index adf9e80e7dc9..890cbf214561 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -502,20 +502,27 @@ 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
 	  your bootloader about how to pass options to the kernel at boot time.)
 
+config SERIAL_IMX_EARLYCON
+	bool "Earlycon on IMX serial port"
+	depends OF
+	select SERIAL_EARLYCON if OF
+	help
+	  If you have enabled the earlycon on the Freescale IMX
+	  CPU you can make it the earlycon by answering Y to this option.
+
 config SERIAL_UARTLITE
 	tristate "Xilinx uartlite serial port support"
 	depends on HAS_IOMEM
diff --git a/drivers/tty/serial/Makefile b/drivers/tty/serial/Makefile
index d056ee6cca33..caf167f0c10a 100644
--- a/drivers/tty/serial/Makefile
+++ b/drivers/tty/serial/Makefile
@@ -43,6 +43,7 @@ obj-$(CONFIG_SERIAL_ZS) += zs.o
 obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o
 obj-$(CONFIG_SERIAL_CPM) += cpm_uart/
 obj-$(CONFIG_SERIAL_IMX) += imx.o
+obj-$(CONFIG_SERIAL_IMX_EARLYCON) += imx_earlycon.o
 obj-$(CONFIG_SERIAL_MPC52xx) += mpc52xx_uart.o
 obj-$(CONFIG_SERIAL_ICOM) += icom.o
 obj-$(CONFIG_SERIAL_MESON) += meson_uart.o
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index f4d68109bc8b..c8402ee2a78e 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -361,7 +361,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)
 {
@@ -1913,7 +1913,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;
@@ -2110,39 +2110,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
diff --git a/drivers/tty/serial/imx_earlycon.c b/drivers/tty/serial/imx_earlycon.c
new file mode 100644
index 000000000000..795606e1a22f
--- /dev/null
+++ b/drivers/tty/serial/imx_earlycon.c
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2020 NXP
+ */
+
+#include <linux/module.h>
+#include <linux/ioport.h>
+#include <linux/init.h>
+#include <linux/serial_core.h>
+#include <linux/serial.h>
+#include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/io.h>
+
+#define URTX0 0x40 /* Transmitter Register */
+#define UTS_TXFULL (1<<4) /* TxFIFO full */
+#define IMX21_UTS 0xb4 /* UART Test Register on all other i.mx*/
+
+static void imx_uart_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_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);
+
+MODULE_AUTHOR("NXP");
+MODULE_DESCRIPTION("IMX earlycon driver");
+MODULE_LICENSE("GPL");
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH tty/serial 1/1] tty: serial: imx: enable imx serial console port as module
  2020-06-05  8:43 [PATCH tty/serial 1/1] tty: serial: imx: enable imx serial console port as module Fugang Duan
@ 2020-06-27 14:23 ` Greg KH
  2020-06-28  6:26   ` [EXT] " Andy Duan
  2020-06-28 16:00   ` Uwe Kleine-König
  0 siblings, 2 replies; 5+ messages in thread
From: Greg KH @ 2020-06-27 14:23 UTC (permalink / raw)
  To: Fugang Duan; +Cc: u.kleine-koenig, linux-serial, lukas, jslaby, s.hauer, kernel

On Fri, Jun 05, 2020 at 04:43:21PM +0800, Fugang Duan wrote:
> GKI kernel requires drivers built as modules including
> console driver, so add the support that imx serial console
> driver can be built 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>
> ---
>  drivers/tty/serial/Kconfig        | 17 +++++++----
>  drivers/tty/serial/Makefile       |  1 +
>  drivers/tty/serial/imx.c          | 37 ++---------------------
>  drivers/tty/serial/imx_earlycon.c | 50 +++++++++++++++++++++++++++++++
>  4 files changed, 65 insertions(+), 40 deletions(-)
> 
> diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
> index adf9e80e7dc9..890cbf214561 100644
> --- a/drivers/tty/serial/Kconfig
> +++ b/drivers/tty/serial/Kconfig
> @@ -502,20 +502,27 @@ 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
>  	  your bootloader about how to pass options to the kernel at boot time.)
>  
> +config SERIAL_IMX_EARLYCON
> +	bool "Earlycon on IMX serial port"
> +	depends OF
> +	select SERIAL_EARLYCON if OF
> +	help
> +	  If you have enabled the earlycon on the Freescale IMX
> +	  CPU you can make it the earlycon by answering Y to this option.
> +

Did you test this?

I get the folllowing errors with this patch:
	scripts/kconfig/conf  --oldconfig Kconfig
	drivers/tty/serial/Kconfig:521: syntax error
	drivers/tty/serial/Kconfig:520: invalid statement
	drivers/tty/serial/Kconfig:521: invalid statement
	drivers/tty/serial/Kconfig:522: invalid statement
	drivers/tty/serial/Kconfig:523: unknown statement "If"
	drivers/tty/serial/Kconfig:524:warning: ignoring unsupported character '.'
	drivers/tty/serial/Kconfig:524: unknown statement "CPU"
	make[1]: *** [scripts/kconfig/Makefile:71: oldconfig] Error 1
	make: *** [Makefile:606: oldconfig] Error 2

I'll let you make the obvious fix and actually test it this time before
resending :)

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [EXT] Re: [PATCH tty/serial 1/1] tty: serial: imx: enable imx serial console port as module
  2020-06-27 14:23 ` Greg KH
@ 2020-06-28  6:26   ` Andy Duan
  2020-06-28 16:00   ` Uwe Kleine-König
  1 sibling, 0 replies; 5+ messages in thread
From: Andy Duan @ 2020-06-28  6:26 UTC (permalink / raw)
  To: Greg KH; +Cc: u.kleine-koenig, linux-serial, lukas, jslaby, s.hauer, kernel

From: Greg KH <gregkh@linuxfoundation.org> Sent: Saturday, June 27, 2020 10:23 PM
> On Fri, Jun 05, 2020 at 04:43:21PM +0800, Fugang Duan wrote:
> > GKI kernel requires drivers built as modules including console driver,
> > so add the support that imx serial console driver can be built 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>
> > ---
> >  drivers/tty/serial/Kconfig        | 17 +++++++----
> >  drivers/tty/serial/Makefile       |  1 +
> >  drivers/tty/serial/imx.c          | 37 ++---------------------
> >  drivers/tty/serial/imx_earlycon.c | 50
> > +++++++++++++++++++++++++++++++
> >  4 files changed, 65 insertions(+), 40 deletions(-)
> >
> > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
> > index adf9e80e7dc9..890cbf214561 100644
> > --- a/drivers/tty/serial/Kconfig
> > +++ b/drivers/tty/serial/Kconfig
> > @@ -502,20 +502,27 @@ 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
> >         your bootloader about how to pass options to the kernel at
> > boot time.)
> >
> > +config SERIAL_IMX_EARLYCON
> > +     bool "Earlycon on IMX serial port"
> > +     depends OF
> > +     select SERIAL_EARLYCON if OF
> > +     help
> > +       If you have enabled the earlycon on the Freescale IMX
> > +       CPU you can make it the earlycon by answering Y to this option.
> > +
> 
> Did you test this?
> 
> I get the folllowing errors with this patch:
>         scripts/kconfig/conf  --oldconfig Kconfig
>         drivers/tty/serial/Kconfig:521: syntax error
>         drivers/tty/serial/Kconfig:520: invalid statement
>         drivers/tty/serial/Kconfig:521: invalid statement
>         drivers/tty/serial/Kconfig:522: invalid statement
>         drivers/tty/serial/Kconfig:523: unknown statement "If"
>         drivers/tty/serial/Kconfig:524:warning: ignoring unsupported
> character '.'
>         drivers/tty/serial/Kconfig:524: unknown statement "CPU"
>         make[1]: *** [scripts/kconfig/Makefile:71: oldconfig] Error 1
>         make: *** [Makefile:606: oldconfig] Error 2
> 
> I'll let you make the obvious fix and actually test it this time before
> resending :)
> 
> thanks,
> 
> greg k-h

Sorry for inconvenient things, I will double check and tested it before resending.
Thanks. 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH tty/serial 1/1] tty: serial: imx: enable imx serial console port as module
  2020-06-27 14:23 ` Greg KH
  2020-06-28  6:26   ` [EXT] " Andy Duan
@ 2020-06-28 16:00   ` Uwe Kleine-König
  2020-06-29  1:46     ` [EXT] " Andy Duan
  1 sibling, 1 reply; 5+ messages in thread
From: Uwe Kleine-König @ 2020-06-28 16:00 UTC (permalink / raw)
  To: Greg KH; +Cc: Fugang Duan, linux-serial, s.hauer, lukas, kernel, jslaby

[-- Attachment #1: Type: text/plain, Size: 2520 bytes --]

On Sat, Jun 27, 2020 at 04:23:15PM +0200, Greg KH wrote:
> On Fri, Jun 05, 2020 at 04:43:21PM +0800, Fugang Duan wrote:
> > GKI kernel requires drivers built as modules including
> > console driver, so add the support that imx serial console
> > driver can be built 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>
> > ---
> >  drivers/tty/serial/Kconfig        | 17 +++++++----
> >  drivers/tty/serial/Makefile       |  1 +
> >  drivers/tty/serial/imx.c          | 37 ++---------------------
> >  drivers/tty/serial/imx_earlycon.c | 50 +++++++++++++++++++++++++++++++
> >  4 files changed, 65 insertions(+), 40 deletions(-)
> > 
> > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
> > index adf9e80e7dc9..890cbf214561 100644
> > --- a/drivers/tty/serial/Kconfig
> > +++ b/drivers/tty/serial/Kconfig
> > @@ -502,20 +502,27 @@ 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
> >  	  your bootloader about how to pass options to the kernel at boot time.)
> >  
> > +config SERIAL_IMX_EARLYCON
> > +	bool "Earlycon on IMX serial port"
> > +	depends OF
> > +	select SERIAL_EARLYCON if OF

Given that SERIAL_IMX_EARLYCON depends on OF, the select can be
unconditional.

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [EXT] Re: [PATCH tty/serial 1/1] tty: serial: imx: enable imx serial console port as module
  2020-06-28 16:00   ` Uwe Kleine-König
@ 2020-06-29  1:46     ` Andy Duan
  0 siblings, 0 replies; 5+ messages in thread
From: Andy Duan @ 2020-06-29  1:46 UTC (permalink / raw)
  To: Uwe Kleine-König, Greg KH
  Cc: linux-serial, s.hauer, lukas, kernel, jslaby

From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Sent: Monday, June 29, 2020 12:00 AM
> On Sat, Jun 27, 2020 at 04:23:15PM +0200, Greg KH wrote:
> > On Fri, Jun 05, 2020 at 04:43:21PM +0800, Fugang Duan wrote:
> > > GKI kernel requires drivers built as modules including console
> > > driver, so add the support that imx serial console driver can be
> > > built 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>
> > > ---
> > >  drivers/tty/serial/Kconfig        | 17 +++++++----
> > >  drivers/tty/serial/Makefile       |  1 +
> > >  drivers/tty/serial/imx.c          | 37 ++---------------------
> > >  drivers/tty/serial/imx_earlycon.c | 50
> > > +++++++++++++++++++++++++++++++
> > >  4 files changed, 65 insertions(+), 40 deletions(-)
> > >
> > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
> > > index adf9e80e7dc9..890cbf214561 100644
> > > --- a/drivers/tty/serial/Kconfig
> > > +++ b/drivers/tty/serial/Kconfig
> > > @@ -502,20 +502,27 @@ 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
> > >  	  your bootloader about how to pass options to the kernel at boot
> > > time.)
> > >
> > > +config SERIAL_IMX_EARLYCON
> > > +	bool "Earlycon on IMX serial port"
> > > +	depends OF
> > > +	select SERIAL_EARLYCON if OF
> 
> Given that SERIAL_IMX_EARLYCON depends on OF, the select can be
> unconditional.

Got it, select SERIAL_EARLYCON is unconditional, will update it in v2.
Thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-06-29  1:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-05  8:43 [PATCH tty/serial 1/1] tty: serial: imx: enable imx serial console port as module Fugang Duan
2020-06-27 14:23 ` Greg KH
2020-06-28  6:26   ` [EXT] " Andy Duan
2020-06-28 16:00   ` Uwe Kleine-König
2020-06-29  1:46     ` [EXT] " Andy Duan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).