linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH tty/serial v3 0/2] Add support for building i.MX serial driver as module
@ 2020-07-24  7:08 Fugang Duan
  2020-07-24  7:08 ` [PATCH tty/serial v3 1/2] tty: serial: imx: enable imx serial console port " Fugang Duan
  2020-07-24  7:08 ` [PATCH tty/serial v3 2/2] tty: serial: imx: add imx earlycon driver Fugang Duan
  0 siblings, 2 replies; 5+ messages in thread
From: Fugang Duan @ 2020-07-24  7:08 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, lukas, s.hauer, kernel, fugang.duan, jslaby

The changes of the two patches:
- 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.

Reviewed by Greg KH, add did below changes based on his comments.
v2->v3:
* split imx serial and earlycon driver into two patches.
* remove "GKI" string as it isn't relevant here.
v1->v2:
* fix kbuild error.

Fugang Duan (2):
  tty: serial: imx: enable imx serial console port as module
  tty: serial: imx: add imx earlycon driver

 drivers/tty/serial/Kconfig        | 17 +++++++----
 drivers/tty/serial/imx.c          | 37 ++---------------------
 drivers/tty/serial/imx_earlycon.c | 50 +++++++++++++++++++++++++++++++
 3 files changed, 64 insertions(+), 40 deletions(-)
 create mode 100644 drivers/tty/serial/imx_earlycon.c

-- 
2.17.1


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

* [PATCH tty/serial v3 1/2] tty: serial: imx: enable imx serial console port as module
  2020-07-24  7:08 [PATCH tty/serial v3 0/2] Add support for building i.MX serial driver as module Fugang Duan
@ 2020-07-24  7:08 ` Fugang Duan
  2020-07-24  7:08 ` [PATCH tty/serial v3 2/2] tty: serial: imx: add imx earlycon driver Fugang Duan
  1 sibling, 0 replies; 5+ messages in thread
From: Fugang Duan @ 2020-07-24  7:08 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, lukas, s.hauer, kernel, fugang.duan, jslaby

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.

---
ChangeLog:
v2->v3:
* split imx serial and earlycon driver into two patches.
* remove "GKI" string as it isn't relevant here.
v1->v2:
* fix kbuild error.

Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
---
 drivers/tty/serial/Kconfig |  9 ++++-----
 drivers/tty/serial/imx.c   | 37 ++-----------------------------------
 2 files changed, 6 insertions(+), 40 deletions(-)

diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index 780908d43557..7fa2c78d1989 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -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
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 1265e8d86d8a..6814485cf255 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)
 {
@@ -1915,7 +1915,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;
@@ -2112,39 +2112,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
-- 
2.17.1


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

* [PATCH tty/serial v3 2/2] tty: serial: imx: add imx earlycon driver
  2020-07-24  7:08 [PATCH tty/serial v3 0/2] Add support for building i.MX serial driver as module Fugang Duan
  2020-07-24  7:08 ` [PATCH tty/serial v3 1/2] tty: serial: imx: enable imx serial console port " Fugang Duan
@ 2020-07-24  7:08 ` Fugang Duan
  2020-08-04 12:38   ` Geert Uytterhoeven
  1 sibling, 1 reply; 5+ messages in thread
From: Fugang Duan @ 2020-07-24  7:08 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, lukas, s.hauer, kernel, fugang.duan, jslaby

Split imx earlycon driver from imx serial driver "imx.c" as
separated driver. imx serial driver can be built as module,
but earlycon driver only support build in.

Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
---
 drivers/tty/serial/Kconfig        |  8 +++++
 drivers/tty/serial/imx_earlycon.c | 50 +++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)

diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index 7fa2c78d1989..8a0352eb337c 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -515,6 +515,14 @@ config SERIAL_IMX_CONSOLE
 	  "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 on OF
+	select SERIAL_EARLYCON
+	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/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 v3 2/2] tty: serial: imx: add imx earlycon driver
  2020-07-24  7:08 ` [PATCH tty/serial v3 2/2] tty: serial: imx: add imx earlycon driver Fugang Duan
@ 2020-08-04 12:38   ` Geert Uytterhoeven
  2020-08-05  3:52     ` [EXT] " Andy Duan
  0 siblings, 1 reply; 5+ messages in thread
From: Geert Uytterhoeven @ 2020-08-04 12:38 UTC (permalink / raw)
  To: Fugang Duan
  Cc: Greg KH, open list:SERIAL DRIVERS, Lukas Wunner, Sascha Hauer,
	Jiri Slaby

Hi Fugan,

On Fri, Jul 24, 2020 at 9:17 AM Fugang Duan <fugang.duan@nxp.com> wrote:
> Split imx earlycon driver from imx serial driver "imx.c" as
> separated driver. imx serial driver can be built as module,
> but earlycon driver only support build in.
>
> Signed-off-by: Fugang Duan <fugang.duan@nxp.com>

Thanks for your patch, which is now commit 699cc4dfd14071e4 ("tty: serial:
imx: add imx earlycon driver") in tty-next.

>  drivers/tty/serial/Kconfig        |  8 +++++
>  drivers/tty/serial/imx_earlycon.c | 50 +++++++++++++++++++++++++++++++

Seems like imx_earlycon.c is never built, as no Makefile update is included?
Else this patch is just an obfuscated way to enable SERIAL_EARLYCON
for all OF platforms? ;-)

> --- a/drivers/tty/serial/Kconfig
> +++ b/drivers/tty/serial/Kconfig
> @@ -515,6 +515,14 @@ config SERIAL_IMX_CONSOLE
>           "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 on OF

Obviously this should depend on "ARCH_MXC || COMPILE_TEST".

> +       select SERIAL_EARLYCON
> +       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

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* RE: [EXT] Re: [PATCH tty/serial v3 2/2] tty: serial: imx: add imx earlycon driver
  2020-08-04 12:38   ` Geert Uytterhoeven
@ 2020-08-05  3:52     ` Andy Duan
  0 siblings, 0 replies; 5+ messages in thread
From: Andy Duan @ 2020-08-05  3:52 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Greg KH, open list:SERIAL DRIVERS, Lukas Wunner, Sascha Hauer,
	Jiri Slaby

From: Geert Uytterhoeven <geert@linux-m68k.org>
> Hi Fugan,
> 
> On Fri, Jul 24, 2020 at 9:17 AM Fugang Duan <fugang.duan@nxp.com> wrote:
> > Split imx earlycon driver from imx serial driver "imx.c" as separated
> > driver. imx serial driver can be built as module, but earlycon driver
> > only support build in.
> >
> > Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
> 
> Thanks for your patch, which is now commit 699cc4dfd14071e4 ("tty: serial:
> imx: add imx earlycon driver") in tty-next.
> 
> >  drivers/tty/serial/Kconfig        |  8 +++++
> >  drivers/tty/serial/imx_earlycon.c | 50
> > +++++++++++++++++++++++++++++++
> 
> Seems like imx_earlycon.c is never built, as no Makefile update is included?
> Else this patch is just an obfuscated way to enable SERIAL_EARLYCON for all OF
> platforms? ;-)
> 
> > --- a/drivers/tty/serial/Kconfig
> > +++ b/drivers/tty/serial/Kconfig
> > @@ -515,6 +515,14 @@ config SERIAL_IMX_CONSOLE
> >           "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 on OF
> 
> Obviously this should depend on "ARCH_MXC || COMPILE_TEST".

I will submit another patch for it.
Thanks!
> 
> > +       select SERIAL_EARLYCON
> > +       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
> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But when
> I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds

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

end of thread, other threads:[~2020-08-05  3:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-24  7:08 [PATCH tty/serial v3 0/2] Add support for building i.MX serial driver as module Fugang Duan
2020-07-24  7:08 ` [PATCH tty/serial v3 1/2] tty: serial: imx: enable imx serial console port " Fugang Duan
2020-07-24  7:08 ` [PATCH tty/serial v3 2/2] tty: serial: imx: add imx earlycon driver Fugang Duan
2020-08-04 12:38   ` Geert Uytterhoeven
2020-08-05  3:52     ` [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).