All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Chou <thomas@wytron.com.tw>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 04/12] ns16550: add generic binding to unify the drivers
Date: Mon, 16 Nov 2015 22:36:48 +0800	[thread overview]
Message-ID: <1447684616-10297-5-git-send-email-thomas@wytron.com.tw> (raw)
In-Reply-To: <1447684616-10297-1-git-send-email-thomas@wytron.com.tw>

Add generic binding to unify ns16550 drivers. There are
several drivers using almost the same code, such as serial_dw,
serial_keystone, serial_omap, serial_ppc, serial_rockchip,
serial_tegra.c, and serial_x86. But each is platform specific.

The key difference between these drivers is the way to get
input clock frequency. With this unified approach, fixed clock
frequency should be extracted from "clock-frequency" property of
device tree blob. If this property is not available, the macro
CONFIG_SYS_NS16550_CLK will be used. It can be a constant or a
function to get clock, eg, get_serial_clock().

Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
---
 drivers/serial/Kconfig   | 11 +++++++++++
 drivers/serial/ns16550.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)

diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 9476a00..1261356 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -186,6 +186,17 @@ config ROCKCHIP_SERIAL
 	  your board config header. The clock input is automatically set to
 	  use the oscillator (24MHz).
 
+config NS16550_SERIAL
+	bool "NS16550 UART or compatible"
+	depends on DM_SERIAL
+	help
+	  Support NS16550 UART or compatible with driver model. This can be
+	  enabled in the device tree with the correct input clock frequency.
+	  If the input clock frequency is not defined in the device tree,
+	  the macro CONFIG_SYS_NS16550_CLK defined in a legacy board header
+	  file will be used. It can be a constant or a function to get clock,
+	  eg, get_serial_clock().
+
 config SANDBOX_SERIAL
 	bool "Sandbox UART support"
 	depends on SANDBOX
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index 8d028de..f0a9aac 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -56,6 +56,10 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef CONFIG_DM_SERIAL
 
+#ifndef CONFIG_SYS_NS16550_CLK
+#define CONFIG_SYS_NS16550_CLK  0
+#endif
+
 static inline void serial_out_shift(void *addr, int shift, int value)
 {
 #ifdef CONFIG_SYS_NS16550_PORT_MAPPED
@@ -400,6 +404,15 @@ int ns16550_serial_ofdata_to_platdata(struct udevice *dev)
 	plat->base = addr;
 	plat->reg_shift = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
 					 "reg-shift", 1);
+#ifdef CONFIG_NS16550_SERIAL
+	plat->clock = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
+				     "clock-frequency",
+				     CONFIG_SYS_NS16550_CLK);
+	if (!plat->clock) {
+		debug("ns16550 clock not defined\n");
+		return -EINVAL;
+	}
+#endif /* CONFIG_NS16550_SERIAL */
 
 	return 0;
 }
@@ -411,4 +424,35 @@ const struct dm_serial_ops ns16550_serial_ops = {
 	.getc = ns16550_serial_getc,
 	.setbrg = ns16550_serial_setbrg,
 };
+
+#ifdef CONFIG_NS16550_SERIAL
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+static const struct udevice_id ns16550_serial_ids[] = {
+	{ .compatible = "ns16550" },
+	{ .compatible = "ns16550a" },
+	{ .compatible = "nvidia,tegra20-uart" },
+	{ .compatible = "snps,dw-apb-uart" },
+	{ .compatible = "ti,omap2-uart" },
+	{ .compatible = "ti,omap3-uart" },
+	{ .compatible = "ti,omap4-uart" },
+	{ .compatible = "ti,am3352-uart" },
+	{ .compatible = "ti,am4372-uart" },
+	{ .compatible = "ti,dra742-uart" },
+	{}
+};
+#endif
+
+U_BOOT_DRIVER(ns16550_serial) = {
+	.name	= "ns16550_serial",
+	.id	= UCLASS_SERIAL,
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+	.of_match = ns16550_serial_ids,
+	.ofdata_to_platdata = ns16550_serial_ofdata_to_platdata,
+	.platdata_auto_alloc_size = sizeof(struct ns16550_platdata),
+#endif
+	.priv_auto_alloc_size = sizeof(struct NS16550),
+	.probe = ns16550_serial_probe,
+	.ops	= &ns16550_serial_ops,
+};
+#endif /* CONFIG_NS16550_SERIAL */
 #endif /* CONFIG_DM_SERIAL */
-- 
2.5.0

  parent reply	other threads:[~2015-11-16 14:36 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-16 14:36 [U-Boot] [PATCH 00/12] ns16550: add generic binding to unify the drivers Thomas Chou
2015-11-16 14:36 ` [U-Boot] [PATCH 01/12] debug_uart: restore ns16550 as default Thomas Chou
2015-11-16 18:22   ` Tom Rini
2015-11-18  0:51   ` Bin Meng
2015-11-18  1:53     ` Thomas Chou
2015-11-16 14:36 ` [U-Boot] [PATCH 02/12] arc: add mapping between physical and virtual address Thomas Chou
2015-11-17  0:18   ` Thomas Chou
2015-11-16 14:36 ` [U-Boot] [PATCH 03/12] ns16550: change map_sysmem to map_physmem Thomas Chou
2015-11-16 21:08   ` Simon Glass
2015-11-17  0:12     ` Thomas Chou
2015-11-16 14:36 ` Thomas Chou [this message]
2015-11-16 18:22   ` [U-Boot] [PATCH 04/12] ns16550: add generic binding to unify the drivers Tom Rini
2015-11-18  1:03   ` Bin Meng
2015-11-18  1:59     ` Thomas Chou
2015-11-16 14:36 ` [U-Boot] [PATCH 05/12] ns16550: unify serial_x86 Thomas Chou
2015-11-16 18:22   ` Tom Rini
2015-11-18  1:07   ` Bin Meng
2015-11-18  2:02     ` Thomas Chou
2015-11-16 14:36 ` [U-Boot] [PATCH 06/12] ns16550: unify serial_ppc Thomas Chou
2015-11-16 18:22   ` Tom Rini
2015-11-16 14:36 ` [U-Boot] [PATCH 07/12] ns16550: unify serial_rockchip Thomas Chou
2015-11-16 18:22   ` Tom Rini
2015-11-17  0:35   ` Thomas Chou
2015-11-18 14:05     ` Ariel D'Alessandro
2015-11-16 14:36 ` [U-Boot] [PATCH 08/12] ns16550: unify serial_keystone Thomas Chou
2015-11-16 18:22   ` Tom Rini
2015-11-16 14:36 ` [U-Boot] [PATCH 09/12] ns16550: unify serial_dw Thomas Chou
2015-11-16 18:22   ` Tom Rini
2015-11-16 14:36 ` [U-Boot] [PATCH 10/12] ns16550: unify serial_tegra Thomas Chou
2015-11-16 18:22   ` Tom Rini
2015-11-16 14:36 ` [U-Boot] [PATCH 11/12] ns16550: unify serial_omap Thomas Chou
2015-11-16 18:23   ` Tom Rini
2015-11-16 14:36 ` [U-Boot] [PATCH 12/12] nios2: 10m50: change to ns16550 uart Thomas Chou
2015-11-18 13:44 ` [U-Boot] [PATCH v2 00/13] ns16550: add generic binding to unify the drivers Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 01/13] debug_uart: restore ns16550 as default Thomas Chou
2015-11-18 13:51     ` Bin Meng
2015-11-19  6:38     ` Heiko Schocher
2015-11-18 13:44   ` [U-Boot] [PATCH v2 02/13] ns16550: change map_sysmem to map_physmem Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 03/13] ns16550: add generic binding to unify the drivers Thomas Chou
2015-11-18 13:55     ` Bin Meng
2015-11-19  6:39     ` Heiko Schocher
2015-11-18 13:44   ` [U-Boot] [PATCH v2 04/13] ns16550: unify serial_x86 Thomas Chou
2015-11-18 13:56     ` Bin Meng
2015-11-18 13:44   ` [U-Boot] [PATCH v2 05/13] ns16550: unify serial_ppc Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 06/13] ns16550: unify serial_rockchip Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 07/13] ns16550: unify serial_keystone Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 08/13] ns16550: unify serial_dw Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 09/13] ns16550: unify serial_tegra Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 10/13] ns16550: unify serial_omap Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 11/13] ns16550: zap CONFIG_NS16550_SERIAL Thomas Chou
2015-11-18 14:09     ` Bin Meng
2015-11-18 14:36       ` Thomas Chou
2015-11-19  7:17         ` Bin Meng
2015-11-18 13:44   ` [U-Boot] [PATCH v2 12/13] ns16550: move CONFIG_SYS_NS16550 to Kconfig Thomas Chou
2015-11-18 13:44   ` [U-Boot] [PATCH v2 13/13] nios2: 10m50: change to ns16550 uart Thomas Chou
2015-11-19 13:48 ` [U-Boot] [PATCH v3 00/13] ns16550: add generic binding to unify the drivers Thomas Chou
2015-11-19 13:48   ` [U-Boot] [PATCH v3 01/13] debug_uart: restore ns16550 as default Thomas Chou
2015-11-19 20:05     ` Simon Glass
2015-11-22 15:52     ` [U-Boot] [U-Boot, v3, " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 02/13] ns16550: change map_sysmem to map_physmem Thomas Chou
2015-11-19 20:05     ` Simon Glass
2015-11-22 15:52     ` [U-Boot] [U-Boot, v3, " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 03/13] ns16550: add generic binding to unify the drivers Thomas Chou
2015-11-19 20:34     ` Simon Glass
2015-11-22 15:52     ` [U-Boot] [U-Boot, v3, " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 04/13] ns16550: unify serial_x86 Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-22 15:52     ` [U-Boot] [U-Boot,v3,04/13] " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 05/13] ns16550: unify serial_ppc Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-21  0:19       ` Thomas Chou
2015-11-21  0:27         ` Simon Glass
2015-11-21  2:39           ` Thomas Chou
2015-11-21 15:22             ` Tom Rini
2015-11-21 16:10               ` Simon Glass
2015-11-22  2:50                 ` Tom Rini
2015-11-22 15:52     ` [U-Boot] [U-Boot,v3,05/13] " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 06/13] ns16550: unify serial_rockchip Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-22 15:52     ` [U-Boot] [U-Boot,v3,06/13] " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 07/13] ns16550: unify serial_keystone Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-22 15:52     ` [U-Boot] [U-Boot,v3,07/13] " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 08/13] ns16550: unify serial_dw Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-22 15:53     ` [U-Boot] [U-Boot,v3,08/13] " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 09/13] ns16550: unify serial_tegra Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-22 15:53     ` [U-Boot] [U-Boot,v3,09/13] " Tom Rini
2015-12-03 21:33       ` Stephen Warren
2015-12-03 21:43         ` Simon Glass
2015-12-03 22:55           ` Stephen Warren
2015-12-04 13:59             ` Thomas Chou
2015-12-04 14:10               ` Yegor Yefremov
2015-12-04 15:09                 ` Tom Rini
2015-12-04 15:52                   ` Simon Glass
2015-11-19 13:48   ` [U-Boot] [PATCH v3 10/13] ns16550: unify serial_omap Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-22 15:53     ` [U-Boot] [U-Boot,v3,10/13] " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 11/13] ns16550: zap CONFIG_NS16550_SERIAL Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-22 15:53     ` [U-Boot] [U-Boot,v3,11/13] " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 12/13] ns16550: move CONFIG_SYS_NS16550 to Kconfig Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-21  0:24       ` Thomas Chou
2015-11-21  0:27         ` Simon Glass
2015-11-21  0:44           ` Thomas Chou
2015-11-21  1:56             ` Tom Rini
2015-11-22 15:53     ` [U-Boot] [U-Boot, v3, " Tom Rini
2015-11-19 13:48   ` [U-Boot] [PATCH v3 13/13] nios2: 10m50: change to ns16550 uart Thomas Chou
2015-11-20 17:18     ` Simon Glass
2015-11-22 15:53     ` [U-Boot] [U-Boot, v3, " Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1447684616-10297-5-git-send-email-thomas@wytron.com.tw \
    --to=thomas@wytron.com.tw \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.