[U-Boot] [PATCH 1/2] serial_sh: Add OF support

Add device tree support.
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp --- doc/device-tree-bindings/serial/sh.txt | 6 ++++++ drivers/serial/serial_sh.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 doc/device-tree-bindings/serial/sh.txt
diff --git a/doc/device-tree-bindings/serial/sh.txt b/doc/device-tree-bindings/serial/sh.txt new file mode 100644 index 0000000..b23b135 --- /dev/null +++ b/doc/device-tree-bindings/serial/sh.txt @@ -0,0 +1,6 @@ +* Renesas SCI serial interface + +Required properties: +- compatible: must be "renesas,scif" or "renesas,scifa" +- reg: exactly one register range with length +- clock: input clock frequency for the SCI unit diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c index 8693c1e..32b2bf0 100644 --- a/drivers/serial/serial_sh.c +++ b/drivers/serial/serial_sh.c @@ -17,6 +17,8 @@ #include <dm/platform_data/serial_sh.h> #include "serial_sh.h"
+DECLARE_GLOBAL_DATA_PTR; + #if defined(CONFIG_CPU_SH7760) || \ defined(CONFIG_CPU_SH7780) || \ defined(CONFIG_CPU_SH7785) || \ @@ -201,10 +203,35 @@ static const struct dm_serial_ops sh_serial_ops = { .setbrg = sh_serial_setbrg, };
+#ifdef CONFIG_OF_CONTROL +static const struct udevice_id sh_serial_id[] = { + {.compatible = "renesas,scif", .data = PORT_SCIF}, + {.compatible = "renesas,scifa", .data = PORT_SCIFA}, + {} +}; + +static int sh_serial_ofdata_to_platdata(struct udevice *dev) +{ + struct sh_serial_platdata *plat = dev_get_platdata(dev); + fdt_addr_t addr; + + addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg"); + if (addr == FDT_ADDR_T_NONE) + return -EINVAL; + + plat->base = addr; + plat->clk = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "clock", 1); + plat->type = dev_get_driver_data(dev); + return 0; +} +#endif + U_BOOT_DRIVER(serial_sh) = { .name = "serial_sh", .id = UCLASS_SERIAL, + .of_match = of_match_ptr(sh_serial_id), + .ofdata_to_platdata = of_match_ptr(sh_serial_ofdata_to_platdata), + .platdata_auto_alloc_size = sizeof(struct sh_serial_platdata), .probe = sh_serial_probe, .ops = &sh_serial_ops, .flags = DM_FLAG_PRE_RELOC,

Add support for standard type SCI (without FIFO) port.
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp --- doc/device-tree-bindings/serial/sh.txt | 2 +- drivers/serial/serial_sh.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/doc/device-tree-bindings/serial/sh.txt b/doc/device-tree-bindings/serial/sh.txt index b23b135..99634a5 100644 --- a/doc/device-tree-bindings/serial/sh.txt +++ b/doc/device-tree-bindings/serial/sh.txt @@ -1,6 +1,6 @@ * Renesas SCI serial interface
Required properties: -- compatible: must be "renesas,scif" or "renesas,scifa" +- compatible: must be "renesas,scif", "renesas,scifa" or "renesas,sci" - reg: exactly one register range with length - clock: input clock frequency for the SCI unit diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c index 32b2bf0..d2a23a6 100644 --- a/drivers/serial/serial_sh.c +++ b/drivers/serial/serial_sh.c @@ -47,6 +47,11 @@ static int scif_rxfill(struct uart_port *port) else return sci_in(port, SCRFDR); } +#elif defined(CONFIG_SCI) +static int scif_rxfill(struct uart_port *port) +{ + return (sci_in(port, SCxSR) & SCxSR_RDxF(port)) ? 1 : 0; +} #else static int scif_rxfill(struct uart_port *port) { @@ -205,6 +210,7 @@ static const struct dm_serial_ops sh_serial_ops = {
#ifdef CONFIG_OF_CONTROL static const struct udevice_id sh_serial_id[] ={ + {.compatible = "renesas,sci", .data = PORT_SCI}, {.compatible = "renesas,scif", .data = PORT_SCIF}, {.compatible = "renesas,scifa", .data = PORT_SCIFA}, {} @@ -262,6 +268,8 @@ U_BOOT_DRIVER(serial_sh) = {
#if defined(CONFIG_SCIF_A) #define SCIF_BASE_PORT PORT_SCIFA +#elif defined(CONFIG_SCI) + #define SCIF_BASE_PORT PORT_SCI #else #define SCIF_BASE_PORT PORT_SCIF #endif

Hi!
015-05-21 15:31 GMT+09:00 Yoshinori Sato ysato@users.sourceforge.jp:
Add device tree support.
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp
doc/device-tree-bindings/serial/sh.txt | 6 ++++++ drivers/serial/serial_sh.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 doc/device-tree-bindings/serial/sh.txt
2015-05-21 15:31 GMT+09:00 Yoshinori Sato ysato@users.sourceforge.jp:
Add support for standard type SCI (without FIFO) port.
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp
doc/device-tree-bindings/serial/sh.txt | 2 +- drivers/serial/serial_sh.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-)
Thanks for your patch. Sorry, your patch can not apply u-boot/master HEAD. Could you rebase and resend this patch?
Best regards, Nobuhiro
2015-05-21 15:31 GMT+09:00 Yoshinori Sato ysato@users.sourceforge.jp:
Add device tree support.
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp
doc/device-tree-bindings/serial/sh.txt | 6 ++++++ drivers/serial/serial_sh.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 doc/device-tree-bindings/serial/sh.txt
diff --git a/doc/device-tree-bindings/serial/sh.txt b/doc/device-tree-bindings/serial/sh.txt new file mode 100644 index 0000000..b23b135 --- /dev/null +++ b/doc/device-tree-bindings/serial/sh.txt @@ -0,0 +1,6 @@ +* Renesas SCI serial interface
+Required properties: +- compatible: must be "renesas,scif" or "renesas,scifa" +- reg: exactly one register range with length +- clock: input clock frequency for the SCI unit diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c index 8693c1e..32b2bf0 100644 --- a/drivers/serial/serial_sh.c +++ b/drivers/serial/serial_sh.c @@ -17,6 +17,8 @@ #include <dm/platform_data/serial_sh.h> #include "serial_sh.h"
+DECLARE_GLOBAL_DATA_PTR;
#if defined(CONFIG_CPU_SH7760) || \ defined(CONFIG_CPU_SH7780) || \ defined(CONFIG_CPU_SH7785) || \ @@ -201,10 +203,35 @@ static const struct dm_serial_ops sh_serial_ops = { .setbrg = sh_serial_setbrg, };
+#ifdef CONFIG_OF_CONTROL +static const struct udevice_id sh_serial_id[] = {
{.compatible = "renesas,scif", .data = PORT_SCIF},
{.compatible = "renesas,scifa", .data = PORT_SCIFA},
{}
+};
+static int sh_serial_ofdata_to_platdata(struct udevice *dev) +{
struct sh_serial_platdata *plat = dev_get_platdata(dev);
fdt_addr_t addr;
addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg");
if (addr == FDT_ADDR_T_NONE)
return -EINVAL;
plat->base = addr;
plat->clk = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "clock", 1);
plat->type = dev_get_driver_data(dev);
return 0;
+} +#endif
U_BOOT_DRIVER(serial_sh) = { .name = "serial_sh", .id = UCLASS_SERIAL,
.of_match = of_match_ptr(sh_serial_id),
.ofdata_to_platdata = of_match_ptr(sh_serial_ofdata_to_platdata),
.platdata_auto_alloc_size = sizeof(struct sh_serial_platdata), .probe = sh_serial_probe, .ops = &sh_serial_ops, .flags = DM_FLAG_PRE_RELOC,
-- 2.1.4

On Mon, 01 Jun 2015 09:08:55 +0900, Nobuhiro Iwamatsu wrote:
Hi!
015-05-21 15:31 GMT+09:00 Yoshinori Sato ysato@users.sourceforge.jp:
Add device tree support.
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp
doc/device-tree-bindings/serial/sh.txt | 6 ++++++ drivers/serial/serial_sh.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 doc/device-tree-bindings/serial/sh.txt
2015-05-21 15:31 GMT+09:00 Yoshinori Sato ysato@users.sourceforge.jp:
Add support for standard type SCI (without FIFO) port.
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp
doc/device-tree-bindings/serial/sh.txt | 2 +- drivers/serial/serial_sh.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-)
Thanks for your patch. Sorry, your patch can not apply u-boot/master HEAD. Could you rebase and resend this patch?
Oh. I'm Sorry. I will rebase and resend. Thanks.
Best regards, Nobuhiro
2015-05-21 15:31 GMT+09:00 Yoshinori Sato ysato@users.sourceforge.jp:
Add device tree support.
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp
doc/device-tree-bindings/serial/sh.txt | 6 ++++++ drivers/serial/serial_sh.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 doc/device-tree-bindings/serial/sh.txt
diff --git a/doc/device-tree-bindings/serial/sh.txt b/doc/device-tree-bindings/serial/sh.txt new file mode 100644 index 0000000..b23b135 --- /dev/null +++ b/doc/device-tree-bindings/serial/sh.txt @@ -0,0 +1,6 @@ +* Renesas SCI serial interface
+Required properties: +- compatible: must be "renesas,scif" or "renesas,scifa" +- reg: exactly one register range with length +- clock: input clock frequency for the SCI unit diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c index 8693c1e..32b2bf0 100644 --- a/drivers/serial/serial_sh.c +++ b/drivers/serial/serial_sh.c @@ -17,6 +17,8 @@ #include <dm/platform_data/serial_sh.h> #include "serial_sh.h"
+DECLARE_GLOBAL_DATA_PTR;
#if defined(CONFIG_CPU_SH7760) || \ defined(CONFIG_CPU_SH7780) || \ defined(CONFIG_CPU_SH7785) || \ @@ -201,10 +203,35 @@ static const struct dm_serial_ops sh_serial_ops = { .setbrg = sh_serial_setbrg, };
+#ifdef CONFIG_OF_CONTROL +static const struct udevice_id sh_serial_id[] = {
{.compatible = "renesas,scif", .data = PORT_SCIF},
{.compatible = "renesas,scifa", .data = PORT_SCIFA},
{}
+};
+static int sh_serial_ofdata_to_platdata(struct udevice *dev) +{
struct sh_serial_platdata *plat = dev_get_platdata(dev);
fdt_addr_t addr;
addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg");
if (addr == FDT_ADDR_T_NONE)
return -EINVAL;
plat->base = addr;
plat->clk = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "clock", 1);
plat->type = dev_get_driver_data(dev);
return 0;
+} +#endif
U_BOOT_DRIVER(serial_sh) = { .name = "serial_sh", .id = UCLASS_SERIAL,
.of_match = of_match_ptr(sh_serial_id),
.ofdata_to_platdata = of_match_ptr(sh_serial_ofdata_to_platdata),
.platdata_auto_alloc_size = sizeof(struct sh_serial_platdata), .probe = sh_serial_probe, .ops = &sh_serial_ops, .flags = DM_FLAG_PRE_RELOC,
-- 2.1.4
-- Nobuhiro Iwamatsu iwamatsu at {nigauri.org / debian.org} GPG ID: 40AD1FA6

Add device tree support.
Changes v2: rebased v2015.07-rc1
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp --- doc/device-tree-bindings/serial/sh.txt | 6 ++++++ drivers/serial/serial_sh.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 doc/device-tree-bindings/serial/sh.txt
diff --git a/doc/device-tree-bindings/serial/sh.txt b/doc/device-tree-bindings/serial/sh.txt new file mode 100644 index 0000000..b23b135 --- /dev/null +++ b/doc/device-tree-bindings/serial/sh.txt @@ -0,0 +1,6 @@ +* Renesas SCI serial interface + +Required properties: +- compatible: must be "renesas,scif" or "renesas,scifa" +- reg: exactly one register range with length +- clock: input clock frequency for the SCI unit diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c index 8693c1e..32b2bf0 100644 --- a/drivers/serial/serial_sh.c +++ b/drivers/serial/serial_sh.c @@ -17,6 +17,8 @@ #include <dm/platform_data/serial_sh.h> #include "serial_sh.h"
+DECLARE_GLOBAL_DATA_PTR; + #if defined(CONFIG_CPU_SH7760) || \ defined(CONFIG_CPU_SH7780) || \ defined(CONFIG_CPU_SH7785) || \ @@ -201,9 +203,35 @@ static const struct dm_serial_ops sh_serial_ops = { .setbrg = sh_serial_setbrg, };
+#ifdef CONFIG_OF_CONTROL +static const struct udevice_id sh_serial_id[] ={ + {.compatible = "renesas,scif", .data = PORT_SCIF}, + {.compatible = "renesas,scifa", .data = PORT_SCIFA}, + {} +}; + +static int sh_serial_ofdata_to_platdata(struct udevice *dev) +{ + struct sh_serial_platdata *plat = dev_get_platdata(dev); + fdt_addr_t addr; + + addr = fdtdec_get_addr(gd->fdt_blob, dev->of_offset, "reg"); + if (addr == FDT_ADDR_T_NONE) + return -EINVAL; + + plat->base = addr; + plat->clk = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "clock", 1); + plat->type = dev_get_driver_data(dev); + return 0; +} +#endif + U_BOOT_DRIVER(serial_sh) = { .name = "serial_sh", .id = UCLASS_SERIAL, + .of_match = of_match_ptr(sh_serial_id), + .ofdata_to_platdata = of_match_ptr(sh_serial_ofdata_to_platdata), + .platdata_auto_alloc_size = sizeof(struct sh_serial_platdata), .probe = sh_serial_probe, .ops = &sh_serial_ops, .flags = DM_FLAG_PRE_RELOC,

Add support for standard type SCI (without FIFO) port.
Changes v2: rebased for v2015.07-rc1
Signed-off-by: Yoshinori Sato ysato@users.sourceforge.jp --- doc/device-tree-bindings/serial/sh.txt | 2 +- drivers/serial/serial_sh.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/doc/device-tree-bindings/serial/sh.txt b/doc/device-tree-bindings/serial/sh.txt index b23b135..99634a5 100644 --- a/doc/device-tree-bindings/serial/sh.txt +++ b/doc/device-tree-bindings/serial/sh.txt @@ -1,6 +1,6 @@ * Renesas SCI serial interface
Required properties: -- compatible: must be "renesas,scif" or "renesas,scifa" +- compatible: must be "renesas,scif", "renesas,scifa" or "renesas,sci" - reg: exactly one register range with length - clock: input clock frequency for the SCI unit diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c index 32b2bf0..ef7cf0f 100644 --- a/drivers/serial/serial_sh.c +++ b/drivers/serial/serial_sh.c @@ -205,6 +205,7 @@ static const struct dm_serial_ops sh_serial_ops = {
#ifdef CONFIG_OF_CONTROL static const struct udevice_id sh_serial_id[] ={ + {.compatible = "renesas,sci", .data = PORT_SCI}, {.compatible = "renesas,scif", .data = PORT_SCIF}, {.compatible = "renesas,scifa", .data = PORT_SCIFA}, {} @@ -262,6 +263,8 @@ U_BOOT_DRIVER(serial_sh) = {
#if defined(CONFIG_SCIF_A) #define SCIF_BASE_PORT PORT_SCIFA +#elif defined(CONFIG_SCI) + #define SCIF_BASE_PORT PORT_SCI #else #define SCIF_BASE_PORT PORT_SCIF #endif
participants (2)
-
Nobuhiro Iwamatsu
-
Yoshinori Sato