All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] serial: nulldev: Add nulldev serial driver
@ 2017-08-23  4:51 Wilson Lee
  2017-08-23 12:50 ` Bin Meng
  0 siblings, 1 reply; 2+ messages in thread
From: Wilson Lee @ 2017-08-23  4:51 UTC (permalink / raw)
  To: u-boot

From: Keng Soon Cheah <keng.soon.cheah@ni.com>

Some device the serial console's initialization cannot run early during
the boot process. Hence, nulldev serial device is helpful on that
situation.

This commit is to adding nulldev serial driver. This will allows the
default console to be specified as a nulldev.

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Signed-off-by: Keng Soon Cheah <keng.soon.cheah@ni.com>
Cc: Chen Yee Chew <chen.yee.chew@ni.com>
Signed-off-by: Wilson Lee <wilson.lee@ni.com>
---

 drivers/serial/Kconfig          |   7 +++
 drivers/serial/Makefile         |   1 +
 drivers/serial/serial.c         |   2 +
 drivers/serial/serial_nulldev.c | 103 ++++++++++++++++++++++++++++++++++++++++
 include/serial.h                |   2 +
 5 files changed, 115 insertions(+)
 create mode 100644 drivers/serial/serial_nulldev.c

diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index a8e9978..5064edf 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -409,6 +409,13 @@ config MXC_UART
 	  If you have a machine based on a Motorola IMX CPU you
 	  can enable its onboard serial port by enabling this option.
 
+config NULLDEV_SERIAL
+	bool "Null serial device"
+	help
+	  Select this to enable null serial device support. A null serial
+	  device merely acts as a placeholder for a serial device and does
+	  nothing for all it's operation.
+
 config PIC32_SERIAL
 	bool "Support for Microchip PIC32 on-chip UART"
 	depends on DM_SERIAL && MACH_PIC32
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index 72a6996..7adcee3 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -49,6 +49,7 @@ obj-$(CONFIG_BCM283X_MU_SERIAL) += serial_bcm283x_mu.o
 obj-$(CONFIG_MSM_SERIAL) += serial_msm.o
 obj-$(CONFIG_MVEBU_A3700_UART) += serial_mvebu_a3700.o
 obj-$(CONFIG_MPC8XX_CONS) += serial_mpc8xx.o
+obj-$(CONFIG_NULLDEV_SERIAL) += serial_nulldev.o
 
 ifndef CONFIG_SPL_BUILD
 obj-$(CONFIG_USB_TTY) += usbtty.o
diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
index cc4bdcb..b902162 100644
--- a/drivers/serial/serial.c
+++ b/drivers/serial/serial.c
@@ -138,6 +138,7 @@ serial_initfunc(mpc8xx_serial_initialize);
 serial_initfunc(mxc_serial_initialize);
 serial_initfunc(mxs_auart_initialize);
 serial_initfunc(ns16550_serial_initialize);
+serial_initfunc(nulldev_serial_initialize);
 serial_initfunc(oc_serial_initialize);
 serial_initfunc(p3mx_serial_initialize);
 serial_initfunc(pl01x_serial_initialize);
@@ -225,6 +226,7 @@ void serial_initialize(void)
 	mxc_serial_initialize();
 	mxs_auart_initialize();
 	ns16550_serial_initialize();
+	nulldev_serial_initialize();
 	oc_serial_initialize();
 	p3mx_serial_initialize();
 	pl01x_serial_initialize();
diff --git a/drivers/serial/serial_nulldev.c b/drivers/serial/serial_nulldev.c
new file mode 100644
index 0000000..0545a74
--- /dev/null
+++ b/drivers/serial/serial_nulldev.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2015 National Instruments
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <serial.h>
+
+
+#ifndef CONFIG_DM_SERIAL
+
+static int nulldev_init(void)
+{
+	/* nulldev is empty! */
+	return 0;
+}
+
+static void nulldev_setbrg(void)
+{
+	/* nulldev is empty! */
+}
+
+static void nulldev_putc(const char c)
+{
+	/* nulldev is empty! */
+}
+
+static void nulldev_puts(const char *s)
+{
+	/* nulldev is empty! */
+}
+
+static int nulldev_input(void)
+{
+	/* nulldev is empty! */
+	return 0;
+}
+
+struct serial_device nulldev_serial_device = {
+	"nulldev",
+	nulldev_init,
+	NULL,
+	nulldev_setbrg,
+	nulldev_input,
+	nulldev_input,
+	nulldev_putc,
+	nulldev_puts,
+};
+
+void nulldev_serial_initialize(void)
+{
+	serial_register(&nulldev_serial_device);
+}
+
+__weak struct serial_device *default_serial_console(void)
+{
+	return &nulldev_serial_device;
+}
+
+#else /* CONFIG_DM_SERIAL */
+
+static int nulldev_serial_setbrg(struct udevice *dev, int baudrate)
+{
+	return 0;
+}
+
+static int nulldev_serial_getc(struct udevice *dev)
+{
+	return -EAGAIN;
+}
+
+static int nulldev_serial_input(struct udevice *dev)
+{
+	return 0;
+}
+
+static int nulldev_serial_putc(struct udevice *dev, const char ch)
+{
+	return 0;
+}
+
+static const struct udevice_id nulldev_serial_ids[] = {
+	{ .compatible = "nulldev-serial" },
+	{ }
+};
+
+
+const struct dm_serial_ops nulldev_serial_ops = {
+	.putc = nulldev_serial_putc,
+	.getc = nulldev_serial_getc,
+	.setbrg = nulldev_serial_setbrg,
+};
+
+U_BOOT_DRIVER(serial_nulldev) = {
+	.name	= "serial_nulldev",
+	.id	= UCLASS_SERIAL,
+	.of_match = nulldev_serial_ids,
+	.ops	= &nulldev_serial_ops,
+};
+
+#endif /* CONFIG_DM_SERIAL */
diff --git a/include/serial.h b/include/serial.h
index f417196..087cabe 100644
--- a/include/serial.h
+++ b/include/serial.h
@@ -40,6 +40,7 @@ extern struct serial_device eserial3_device;
 extern struct serial_device eserial4_device;
 extern struct serial_device eserial5_device;
 extern struct serial_device eserial6_device;
+extern struct serial_device nulldev_serial_device;
 
 extern void serial_register(struct serial_device *);
 extern void serial_initialize(void);
@@ -186,6 +187,7 @@ void mpc8xx_serial_initialize(void);
 void mxc_serial_initialize(void);
 void mxs_auart_initialize(void);
 void ns16550_serial_initialize(void);
+void nulldev_serial_initialize(void);
 void oc_serial_initialize(void);
 void p3mx_serial_initialize(void);
 void pl01x_serial_initialize(void);
-- 
2.7.4

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

* [U-Boot] [PATCH] serial: nulldev: Add nulldev serial driver
  2017-08-23  4:51 [U-Boot] [PATCH] serial: nulldev: Add nulldev serial driver Wilson Lee
@ 2017-08-23 12:50 ` Bin Meng
  0 siblings, 0 replies; 2+ messages in thread
From: Bin Meng @ 2017-08-23 12:50 UTC (permalink / raw)
  To: u-boot

Hi Wilson,

On Wed, Aug 23, 2017 at 12:51 PM, Wilson Lee <wilson.lee@ni.com> wrote:
> From: Keng Soon Cheah <keng.soon.cheah@ni.com>
>
> Some device the serial console's initialization cannot run early during
> the boot process. Hence, nulldev serial device is helpful on that
> situation.
>
> This commit is to adding nulldev serial driver. This will allows the
> default console to be specified as a nulldev.

Can you elaborate more on what issue this patch is going to resolve?

>
> Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
> Signed-off-by: Keng Soon Cheah <keng.soon.cheah@ni.com>
> Cc: Chen Yee Chew <chen.yee.chew@ni.com>
> Signed-off-by: Wilson Lee <wilson.lee@ni.com>
> ---
>
>  drivers/serial/Kconfig          |   7 +++
>  drivers/serial/Makefile         |   1 +
>  drivers/serial/serial.c         |   2 +
>  drivers/serial/serial_nulldev.c | 103 ++++++++++++++++++++++++++++++++++++++++
>  include/serial.h                |   2 +
>  5 files changed, 115 insertions(+)
>  create mode 100644 drivers/serial/serial_nulldev.c
>
> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
> index a8e9978..5064edf 100644
> --- a/drivers/serial/Kconfig
> +++ b/drivers/serial/Kconfig
> @@ -409,6 +409,13 @@ config MXC_UART
>           If you have a machine based on a Motorola IMX CPU you
>           can enable its onboard serial port by enabling this option.
>
> +config NULLDEV_SERIAL
> +       bool "Null serial device"
> +       help
> +         Select this to enable null serial device support. A null serial
> +         device merely acts as a placeholder for a serial device and does
> +         nothing for all it's operation.
> +
>  config PIC32_SERIAL
>         bool "Support for Microchip PIC32 on-chip UART"
>         depends on DM_SERIAL && MACH_PIC32
> diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
> index 72a6996..7adcee3 100644
> --- a/drivers/serial/Makefile
> +++ b/drivers/serial/Makefile
> @@ -49,6 +49,7 @@ obj-$(CONFIG_BCM283X_MU_SERIAL) += serial_bcm283x_mu.o
>  obj-$(CONFIG_MSM_SERIAL) += serial_msm.o
>  obj-$(CONFIG_MVEBU_A3700_UART) += serial_mvebu_a3700.o
>  obj-$(CONFIG_MPC8XX_CONS) += serial_mpc8xx.o
> +obj-$(CONFIG_NULLDEV_SERIAL) += serial_nulldev.o
>
>  ifndef CONFIG_SPL_BUILD
>  obj-$(CONFIG_USB_TTY) += usbtty.o
> diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
> index cc4bdcb..b902162 100644
> --- a/drivers/serial/serial.c
> +++ b/drivers/serial/serial.c
> @@ -138,6 +138,7 @@ serial_initfunc(mpc8xx_serial_initialize);
>  serial_initfunc(mxc_serial_initialize);
>  serial_initfunc(mxs_auart_initialize);
>  serial_initfunc(ns16550_serial_initialize);
> +serial_initfunc(nulldev_serial_initialize);
>  serial_initfunc(oc_serial_initialize);
>  serial_initfunc(p3mx_serial_initialize);
>  serial_initfunc(pl01x_serial_initialize);
> @@ -225,6 +226,7 @@ void serial_initialize(void)
>         mxc_serial_initialize();
>         mxs_auart_initialize();
>         ns16550_serial_initialize();
> +       nulldev_serial_initialize();

Please stop adding non-DM driver.

>         oc_serial_initialize();
>         p3mx_serial_initialize();
>         pl01x_serial_initialize();
> diff --git a/drivers/serial/serial_nulldev.c b/drivers/serial/serial_nulldev.c
> new file mode 100644
> index 0000000..0545a74
> --- /dev/null
> +++ b/drivers/serial/serial_nulldev.c
> @@ -0,0 +1,103 @@
> +/*
> + * Copyright (c) 2015 National Instruments
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <serial.h>
> +
> +
> +#ifndef CONFIG_DM_SERIAL
> +
> +static int nulldev_init(void)
> +{
> +       /* nulldev is empty! */
> +       return 0;
> +}
> +
> +static void nulldev_setbrg(void)
> +{
> +       /* nulldev is empty! */
> +}
> +
> +static void nulldev_putc(const char c)
> +{
> +       /* nulldev is empty! */
> +}
> +
> +static void nulldev_puts(const char *s)
> +{
> +       /* nulldev is empty! */
> +}
> +
> +static int nulldev_input(void)
> +{
> +       /* nulldev is empty! */
> +       return 0;
> +}
> +
> +struct serial_device nulldev_serial_device = {
> +       "nulldev",
> +       nulldev_init,
> +       NULL,
> +       nulldev_setbrg,
> +       nulldev_input,
> +       nulldev_input,
> +       nulldev_putc,
> +       nulldev_puts,
> +};
> +
> +void nulldev_serial_initialize(void)
> +{
> +       serial_register(&nulldev_serial_device);
> +}
> +
> +__weak struct serial_device *default_serial_console(void)
> +{
> +       return &nulldev_serial_device;
> +}
> +
> +#else /* CONFIG_DM_SERIAL */
> +
> +static int nulldev_serial_setbrg(struct udevice *dev, int baudrate)
> +{
> +       return 0;
> +}
> +
> +static int nulldev_serial_getc(struct udevice *dev)
> +{
> +       return -EAGAIN;
> +}
> +
> +static int nulldev_serial_input(struct udevice *dev)
> +{
> +       return 0;
> +}
> +
> +static int nulldev_serial_putc(struct udevice *dev, const char ch)
> +{
> +       return 0;
> +}
> +
> +static const struct udevice_id nulldev_serial_ids[] = {
> +       { .compatible = "nulldev-serial" },
> +       { }
> +};
> +
> +
> +const struct dm_serial_ops nulldev_serial_ops = {
> +       .putc = nulldev_serial_putc,
> +       .getc = nulldev_serial_getc,
> +       .setbrg = nulldev_serial_setbrg,
> +};
> +
> +U_BOOT_DRIVER(serial_nulldev) = {
> +       .name   = "serial_nulldev",
> +       .id     = UCLASS_SERIAL,
> +       .of_match = nulldev_serial_ids,
> +       .ops    = &nulldev_serial_ops,
> +};
> +
> +#endif /* CONFIG_DM_SERIAL */
> diff --git a/include/serial.h b/include/serial.h
> index f417196..087cabe 100644
> --- a/include/serial.h
> +++ b/include/serial.h
> @@ -40,6 +40,7 @@ extern struct serial_device eserial3_device;
>  extern struct serial_device eserial4_device;
>  extern struct serial_device eserial5_device;
>  extern struct serial_device eserial6_device;
> +extern struct serial_device nulldev_serial_device;
>
>  extern void serial_register(struct serial_device *);
>  extern void serial_initialize(void);
> @@ -186,6 +187,7 @@ void mpc8xx_serial_initialize(void);
>  void mxc_serial_initialize(void);
>  void mxs_auart_initialize(void);
>  void ns16550_serial_initialize(void);
> +void nulldev_serial_initialize(void);
>  void oc_serial_initialize(void);
>  void p3mx_serial_initialize(void);
>  void pl01x_serial_initialize(void);
> --

Regards,
Bin

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

end of thread, other threads:[~2017-08-23 12:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-23  4:51 [U-Boot] [PATCH] serial: nulldev: Add nulldev serial driver Wilson Lee
2017-08-23 12:50 ` Bin Meng

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.