public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 03/13] ns16550: add generic binding to unify the drivers
Date: Thu, 19 Nov 2015 07:39:09 +0100	[thread overview]
Message-ID: <564D6E8D.9000502@denx.de> (raw)
In-Reply-To: <1447854299-23680-4-git-send-email-thomas@wytron.com.tw>

Hello Thomas,

Am 18.11.2015 um 14:44 schrieb Thomas Chou:
> 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>
> Reviewed-by: Tom Rini <trini@konsulko.com>
> ---
>   drivers/serial/Kconfig   | 11 +++++++++++
>   drivers/serial/ns16550.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
>   2 files changed, 55 insertions(+)

Reviewed-by: Heiko Schocher <hs@denx.de>

bye,
Heiko
>
> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
> index 2a50771..0f0e92d 100644
> --- a/drivers/serial/Kconfig
> +++ b/drivers/serial/Kconfig
> @@ -195,6 +195,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 */
>

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

  parent reply	other threads:[~2015-11-19  6:39 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 ` [U-Boot] [PATCH 04/12] ns16550: add generic binding to unify the drivers Thomas Chou
2015-11-16 18:22   ` 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 [this message]
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=564D6E8D.9000502@denx.de \
    --to=hs@denx.de \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox