* [PATCH V2 01/12] clk: shmobile: add CPG driver for rz-platforms
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 12:12 ` Laurent Pinchart
2014-03-06 11:32 ` [PATCH V2 02/12] ARM: shmobile: r7s72100: document MSTP clock support Wolfram Sang
` (9 subsequent siblings)
10 siblings, 1 reply; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
Changes since V1:
* added docs
* preparation for usb_x1 support by documenting two input clocks
* static-consted frqcr_tab
* bail out if num_clks == 0
* cosmetic fixes
Mike: if you are fine with this driver, it would be good if you could apply it.
Then, we can deal with the orthogonal dependencies in mach-shmobile seperately
and know that the driver is already in place when the rest gets resolved.
Thanks!
.../bindings/clock/renesas,rz-cpg-clocks.txt | 29 ++++++
drivers/clk/shmobile/Makefile | 1 +
drivers/clk/shmobile/clk-rz.c | 113 +++++++++++++++++++++
3 files changed, 143 insertions(+)
create mode 100644 Documentation/devicetree/bindings/clock/renesas,rz-cpg-clocks.txt
create mode 100644 drivers/clk/shmobile/clk-rz.c
diff --git a/Documentation/devicetree/bindings/clock/renesas,rz-cpg-clocks.txt b/Documentation/devicetree/bindings/clock/renesas,rz-cpg-clocks.txt
new file mode 100644
index 000000000000..c8e8821f08f6
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/renesas,rz-cpg-clocks.txt
@@ -0,0 +1,29 @@
+* Renesas RZ Clock Pulse Generator (CPG)
+
+The CPG generates core clocks for the RZ SoCs. It includes the PLL, variable
+CPU and GPU clocks, and several fixed ratio dividers.
+
+Required Properties:
+
+ - compatible: Must be one of
+ - "renesas,r7s72100-cpg-clocks" for the r7s72100 CPG
+ - "renesas,rz-cpg-clocks" for the generic RZ CPG
+ - reg: Base address and length of the memory resource used by the CPG
+ - clocks: References to possible parent clocks. Order must match clock modes
+ in the datasheet.
+ - #clock-cells: Must be 1
+ - clock-output-names: The names of the clocks. Supported clocks are "pll",
+ "i", and "g"
+
+
+Example
+-------
+
+ cpg_clocks: cpg_clocks at fcfe0000 {
+ #clock-cells = <1>;
+ compatible = "renesas,r7s72100-cpg-clocks",
+ "renesas,rz-cpg-clocks";
+ reg = <0xfcfe0000 0x18>;
+ clocks = <&extal_clk>, <&usb_x1_clk>;
+ clock-output-names = "pll", "i", "g";
+ };
diff --git a/drivers/clk/shmobile/Makefile b/drivers/clk/shmobile/Makefile
index 9ecef140dba7..5404cb931ebf 100644
--- a/drivers/clk/shmobile/Makefile
+++ b/drivers/clk/shmobile/Makefile
@@ -1,4 +1,5 @@
obj-$(CONFIG_ARCH_EMEV2) += clk-emev2.o
+obj-$(CONFIG_ARCH_R7S72100) += clk-rz.o
obj-$(CONFIG_ARCH_R8A7790) += clk-rcar-gen2.o
obj-$(CONFIG_ARCH_R8A7791) += clk-rcar-gen2.o
obj-$(CONFIG_ARCH_SHMOBILE_MULTI) += clk-div6.o
diff --git a/drivers/clk/shmobile/clk-rz.c b/drivers/clk/shmobile/clk-rz.c
new file mode 100644
index 000000000000..2901db3ac5d3
--- /dev/null
+++ b/drivers/clk/shmobile/clk-rz.c
@@ -0,0 +1,113 @@
+/*
+ * rz Core CPG Clocks
+ *
+ * Copyright (C) 2013 Ideas On Board SPRL
+ * Copyright (C) 2014 Wolfram Sang, Sang Engineering <wsa@sang-engineering.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/slab.h>
+
+struct rz_cpg {
+ struct clk_onecell_data data;
+ void __iomem *reg;
+};
+
+#define CPG_FRQCR 0x10
+#define CPG_FRQCR2 0x14
+
+/* -----------------------------------------------------------------------------
+ * Initialization
+ */
+
+static struct clk * __init
+rz_cpg_register_clock(struct device_node *np, struct rz_cpg *cpg, const char *name)
+{
+ u32 val;
+ unsigned mult;
+ static const unsigned frqcr_tab[4] = { 3, 2, 0, 1 };
+
+ if (strcmp(name, "pll") == 0) {
+ /* FIXME: cpg_mode should be read from GPIO. But no GPIO support yet */
+ unsigned cpg_mode = 0; /* hardcoded to EXTAL for now */
+ const char *parent_name = of_clk_get_parent_name(np, cpg_mode);
+
+ mult = cpg_mode ? (32 / 4) : 30;
+
+ return clk_register_fixed_factor(NULL, name, parent_name, 0, mult, 1);
+ }
+
+ /* FIXME:"i" and "g" are variable clocks with non-integer dividers (e.g. 2/3)
+ * and the constraint that always g <= i. To get the rz platform started,
+ * let them run@fixed current speed and implement the details later.
+ */
+ if (strcmp(name, "i") == 0)
+ val = (clk_readl(cpg->reg + CPG_FRQCR) >> 8) & 3;
+ else if (strcmp(name, "g") == 0)
+ val = clk_readl(cpg->reg + CPG_FRQCR2) & 3;
+ else
+ return ERR_PTR(-EINVAL);
+
+ mult = frqcr_tab[val];
+ return clk_register_fixed_factor(NULL, name, "pll", 0, mult, 3);
+}
+
+static void __init rz_cpg_clocks_init(struct device_node *np)
+{
+ struct rz_cpg *cpg;
+ struct clk **clks;
+ unsigned i;
+ int num_clks;
+
+ num_clks = of_property_count_strings(np, "clock-output-names");
+ if (WARN(num_clks <= 0, "can't count CPG clocks\n"))
+ goto out;
+
+ cpg = kzalloc(sizeof(*cpg), GFP_KERNEL);
+ if (WARN(!cpg, "out of memory!\n"))
+ goto out;
+
+ clks = kzalloc(num_clks * sizeof(*clks), GFP_KERNEL);
+ if (WARN(!clks, "out of memory!\n"))
+ goto free_cpg;
+
+ cpg->data.clks = clks;
+ cpg->data.clk_num = num_clks;
+
+ cpg->reg = of_iomap(np, 0);
+ if (WARN(!cpg->reg, "can't remap CPG registers!\n"))
+ goto free_clks;
+
+ for (i = 0; i < num_clks; ++i) {
+ const char *name;
+ struct clk *clk;
+
+ of_property_read_string_index(np, "clock-output-names", i, &name);
+
+ clk = rz_cpg_register_clock(np, cpg, name);
+ if (IS_ERR(clk))
+ pr_err("%s: failed to register %s %s clock (%ld)\n",
+ __func__, np->name, name, PTR_ERR(clk));
+ else
+ cpg->data.clks[i] = clk;
+ }
+
+ of_clk_add_provider(np, of_clk_src_onecell_get, &cpg->data);
+ return;
+
+free_clks:
+ kfree(clks);
+free_cpg:
+ kfree(cpg);
+out:
+ return;
+}
+CLK_OF_DECLARE(rz_cpg_clks, "renesas,rz-cpg-clocks", rz_cpg_clocks_init);
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 01/12] clk: shmobile: add CPG driver for rz-platforms
2014-03-06 11:32 ` [PATCH V2 01/12] clk: shmobile: add CPG driver for rz-platforms Wolfram Sang
@ 2014-03-06 12:12 ` Laurent Pinchart
2014-03-06 13:06 ` Wolfram Sang
0 siblings, 1 reply; 17+ messages in thread
From: Laurent Pinchart @ 2014-03-06 12:12 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram,
Thank you for the patch.
On Thursday 06 March 2014 12:32:21 Wolfram Sang wrote:
> From: Wolfram Sang <wsa@sang-engineering.com>
>
> Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
> ---
>
> Changes since V1:
> * added docs
> * preparation for usb_x1 support by documenting two input clocks
> * static-consted frqcr_tab
> * bail out if num_clks == 0
> * cosmetic fixes
>
> Mike: if you are fine with this driver, it would be good if you could apply
> it. Then, we can deal with the orthogonal dependencies in mach-shmobile
> seperately and know that the driver is already in place when the rest gets
> resolved. Thanks!
>
> .../bindings/clock/renesas,rz-cpg-clocks.txt | 29 ++++++
> drivers/clk/shmobile/Makefile | 1 +
> drivers/clk/shmobile/clk-rz.c | 113 ++++++++++++++++++
> 3 files changed, 143 insertions(+)
> create mode 100644
> Documentation/devicetree/bindings/clock/renesas,rz-cpg-clocks.txt create
> mode 100644 drivers/clk/shmobile/clk-rz.c
>
> diff --git
> a/Documentation/devicetree/bindings/clock/renesas,rz-cpg-clocks.txt
> b/Documentation/devicetree/bindings/clock/renesas,rz-cpg-clocks.txt new
> file mode 100644
> index 000000000000..c8e8821f08f6
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/clock/renesas,rz-cpg-clocks.txt
> @@ -0,0 +1,29 @@
> +* Renesas RZ Clock Pulse Generator (CPG)
> +
> +The CPG generates core clocks for the RZ SoCs. It includes the PLL,
> variable +CPU and GPU clocks, and several fixed ratio dividers.
> +
> +Required Properties:
> +
> + - compatible: Must be one of
> + - "renesas,r7s72100-cpg-clocks" for the r7s72100 CPG
> + - "renesas,rz-cpg-clocks" for the generic RZ CPG
> + - reg: Base address and length of the memory resource used by the CPG
> + - clocks: References to possible parent clocks. Order must match clock
> modes
> + in the datasheet.
I believe the order should be documented explicitly instead of referring to
the datasheet.
> + - #clock-cells: Must be 1
> + - clock-output-names: The names of the clocks. Supported clocks are
> "pll",
> + "i", and "g"
> +
> +
> +Example
> +-------
> +
> + cpg_clocks: cpg_clocks at fcfe0000 {
> + #clock-cells = <1>;
> + compatible = "renesas,r7s72100-cpg-clocks",
> + "renesas,rz-cpg-clocks";
> + reg = <0xfcfe0000 0x18>;
> + clocks = <&extal_clk>, <&usb_x1_clk>;
> + clock-output-names = "pll", "i", "g";
> + };
> diff --git a/drivers/clk/shmobile/Makefile b/drivers/clk/shmobile/Makefile
> index 9ecef140dba7..5404cb931ebf 100644
> --- a/drivers/clk/shmobile/Makefile
> +++ b/drivers/clk/shmobile/Makefile
> @@ -1,4 +1,5 @@
> obj-$(CONFIG_ARCH_EMEV2) += clk-emev2.o
> +obj-$(CONFIG_ARCH_R7S72100) += clk-rz.o
> obj-$(CONFIG_ARCH_R8A7790) += clk-rcar-gen2.o
> obj-$(CONFIG_ARCH_R8A7791) += clk-rcar-gen2.o
> obj-$(CONFIG_ARCH_SHMOBILE_MULTI) += clk-div6.o
> diff --git a/drivers/clk/shmobile/clk-rz.c b/drivers/clk/shmobile/clk-rz.c
> new file mode 100644
> index 000000000000..2901db3ac5d3
> --- /dev/null
> +++ b/drivers/clk/shmobile/clk-rz.c
> @@ -0,0 +1,113 @@
> +/*
> + * rz Core CPG Clocks
> + *
> + * Copyright (C) 2013 Ideas On Board SPRL
> + * Copyright (C) 2014 Wolfram Sang, Sang Engineering
> <wsa@sang-engineering.com> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; version 2 of the License.
> + */
> +
> +#include <linux/clk-provider.h>
> +#include <linux/init.h>
> +#include <linux/kernel.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/slab.h>
> +
> +struct rz_cpg {
> + struct clk_onecell_data data;
> + void __iomem *reg;
> +};
> +
> +#define CPG_FRQCR 0x10
> +#define CPG_FRQCR2 0x14
> +
> +/*
> ---------------------------------------------------------------------------
> -- + * Initialization
> + */
> +
> +static struct clk * __init
> +rz_cpg_register_clock(struct device_node *np, struct rz_cpg *cpg, const
> char *name)
> +{
> + u32 val;
> + unsigned mult;
> + static const unsigned frqcr_tab[4] = { 3, 2, 0, 1 };
> +
> + if (strcmp(name, "pll") == 0) {
> + /* FIXME: cpg_mode should be read from GPIO. But no GPIO support yet
> */
> + unsigned cpg_mode = 0; /* hardcoded to EXTAL for now */
> + const char *parent_name = of_clk_get_parent_name(np, cpg_mode);
> +
> + mult = cpg_mode ? (32 / 4) : 30;
> +
> + return clk_register_fixed_factor(NULL, name, parent_name, 0, mult,
> 1);
> + }
> +
> + /* FIXME:"i" and "g" are variable clocks with non-integer dividers (e.g.
> 2/3)
> + * and the constraint that always g <= i. To get the rz platform started,
> + * let them run at fixed current speed and implement the details later.
> + */
> + if (strcmp(name, "i") == 0)
> + val = (clk_readl(cpg->reg + CPG_FRQCR) >> 8) & 3;
> + else if (strcmp(name, "g") == 0)
> + val = clk_readl(cpg->reg + CPG_FRQCR2) & 3;
> + else
> + return ERR_PTR(-EINVAL);
> +
> + mult = frqcr_tab[val];
> + return clk_register_fixed_factor(NULL, name, "pll", 0, mult, 3);
> +}
> +
> +static void __init rz_cpg_clocks_init(struct device_node *np)
> +{
> + struct rz_cpg *cpg;
> + struct clk **clks;
> + unsigned i;
> + int num_clks;
> +
> + num_clks = of_property_count_strings(np, "clock-output-names");
> + if (WARN(num_clks <= 0, "can't count CPG clocks\n"))
> + goto out;
You can return directly instead of goto out.
> +
> + cpg = kzalloc(sizeof(*cpg), GFP_KERNEL);
> + if (WARN(!cpg, "out of memory!\n"))
kmalloc() warns already when it can't allocate memory, so you can remove the
warning here.
> + goto out;
You can return directly here too.
> +
> + clks = kzalloc(num_clks * sizeof(*clks), GFP_KERNEL);
> + if (WARN(!clks, "out of memory!\n"))
You can remove this warning too.
> + goto free_cpg;
> +
> + cpg->data.clks = clks;
> + cpg->data.clk_num = num_clks;
> +
> + cpg->reg = of_iomap(np, 0);
> + if (WARN(!cpg->reg, "can't remap CPG registers!\n"))
> + goto free_clks;
> +
> + for (i = 0; i < num_clks; ++i) {
> + const char *name;
> + struct clk *clk;
> +
> + of_property_read_string_index(np, "clock-output-names", i, &name);
> +
> + clk = rz_cpg_register_clock(np, cpg, name);
> + if (IS_ERR(clk))
> + pr_err("%s: failed to register %s %s clock (%ld)\n",
> + __func__, np->name, name, PTR_ERR(clk));
> + else
> + cpg->data.clks[i] = clk;
> + }
> +
> + of_clk_add_provider(np, of_clk_src_onecell_get, &cpg->data);
> + return;
> +
> +free_clks:
> + kfree(clks);
> +free_cpg:
> + kfree(cpg);
> +out:
> + return;
No need for an explicit return.
> +}
> +CLK_OF_DECLARE(rz_cpg_clks, "renesas,rz-cpg-clocks", rz_cpg_clocks_init);
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH V2 01/12] clk: shmobile: add CPG driver for rz-platforms
2014-03-06 12:12 ` Laurent Pinchart
@ 2014-03-06 13:06 ` Wolfram Sang
2014-03-06 13:21 ` Geert Uytterhoeven
0 siblings, 1 reply; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 13:06 UTC (permalink / raw)
To: linux-arm-kernel
> > + - clocks: References to possible parent clocks. Order must match clock
> > modes
> > + in the datasheet.
>
> I believe the order should be documented explicitly instead of referring to
> the datasheet.
I wanted to keep it generic in case future SoCs want to use the driver.
> > + num_clks = of_property_count_strings(np, "clock-output-names");
> > + if (WARN(num_clks <= 0, "can't count CPG clocks\n"))
> > + goto out;
>
> You can return directly instead of goto out.
I personally don't prefer the mixture of goto and direct return. Please
say if you insist on that.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140306/2817bf52/attachment-0001.sig>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH V2 01/12] clk: shmobile: add CPG driver for rz-platforms
2014-03-06 13:06 ` Wolfram Sang
@ 2014-03-06 13:21 ` Geert Uytterhoeven
0 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2014-03-06 13:21 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram,
On Thu, Mar 6, 2014 at 2:06 PM, Wolfram Sang <wsa@the-dreams.de> wrote:
>> > + num_clks = of_property_count_strings(np, "clock-output-names");
>> > + if (WARN(num_clks <= 0, "can't count CPG clocks\n"))
>> > + goto out;
>>
>> You can return directly instead of goto out.
>
> I personally don't prefer the mixture of goto and direct return. Please
> say if you insist on that.
Here it's not really a mix: there is a strict separation between cases where
cleanup/error handling is done and case where it's not.
So it serves as a clue for the reader, who doesn't have to scroll down to see
that no cleanup/error handling is done later.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at 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] 17+ messages in thread
* [PATCH V2 02/12] ARM: shmobile: r7s72100: document MSTP clock support
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 01/12] clk: shmobile: add CPG driver for rz-platforms Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 03/12] ARM: shmobile: r7s72100: add essential clock nodes to dtsi Wolfram Sang
` (8 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt b/Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt
index a6a352c2771e..395b2e8ecfd1 100644
--- a/Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt
+++ b/Documentation/devicetree/bindings/clock/renesas,cpg-mstp-clocks.txt
@@ -10,6 +10,7 @@ index in the group, from 0 to 31.
Required Properties:
- compatible: Must be one of the following
+ - "renesas,r7s72100-mstp-clocks" for R7S72100 (RZ) MSTP gate clocks
- "renesas,r8a7790-mstp-clocks" for R8A7790 (R-Car H2) MSTP gate clocks
- "renesas,r8a7791-mstp-clocks" for R8A7791 (R-Car M2) MSTP gate clocks
- "renesas,cpg-mstp-clock" for generic MSTP gate clocks
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 03/12] ARM: shmobile: r7s72100: add essential clock nodes to dtsi
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 01/12] clk: shmobile: add CPG driver for rz-platforms Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 02/12] ARM: shmobile: r7s72100: document MSTP clock support Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 12:16 ` Laurent Pinchart
2014-03-06 11:32 ` [PATCH V2 04/12] ARM: shmobile: r7s72100: genmai: populate nodes for external clocks Wolfram Sang
` (7 subsequent siblings)
10 siblings, 1 reply; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Only essential clocks are added for now. Other clocks will be added when
needed.
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
Changes since V1:
* add usb_x1 clock
* reference usb_x1 to cpg
* improved wording
* #clock-cells consistently first property
arch/arm/boot/dts/r7s72100.dtsi | 86 +++++++++++++++++++++++++++++-
include/dt-bindings/clock/r7s72100-clock.h | 25 +++++++++
2 files changed, 110 insertions(+), 1 deletion(-)
create mode 100644 include/dt-bindings/clock/r7s72100-clock.h
diff --git a/arch/arm/boot/dts/r7s72100.dtsi b/arch/arm/boot/dts/r7s72100.dtsi
index ee700717a34b..2429b5be2e56 100644
--- a/arch/arm/boot/dts/r7s72100.dtsi
+++ b/arch/arm/boot/dts/r7s72100.dtsi
@@ -1,13 +1,15 @@
/*
* Device Tree Source for the r7s72100 SoC
*
- * Copyright (C) 2013 Renesas Solutions Corp.
+ * Copyright (C) 2013-14 Renesas Solutions Corp.
+ * Copyright (C) 2014 Wolfram Sang, Sang Engineering <wsa@sang-engineering.com>
*
* This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of any
* kind, whether express or implied.
*/
+#include <dt-bindings/clock/r7s72100-clock.h>
#include <dt-bindings/interrupt-controller/irq.h>
/ {
@@ -28,6 +30,88 @@
spi4 = &spi4;
};
+ clocks {
+ ranges;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ /* External clocks */
+ extal_clk: extal_clk {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ /* If clk present, value must be set by board */
+ clock-frequency = <0>;
+ clock-output-names = "extal";
+ };
+
+ usb_x1_clk: usb_x1_clk {
+ #clock-cells = <0>;
+ compatible = "fixed-clock";
+ /* If clk present, value must be set by board */
+ clock-frequency = <0>;
+ clock-output-names = "usb_x1";
+ };
+
+ /* Special CPG clocks */
+ cpg_clocks: cpg_clocks at fcfe0000 {
+ #clock-cells = <1>;
+ compatible = "renesas,r7s72100-cpg-clocks",
+ "renesas,rz-cpg-clocks";
+ reg = <0xfcfe0000 0x18>;
+ clocks = <&extal_clk>, <&usb_x1_clk>;
+ clock-output-names = "pll", "i", "g";
+ };
+
+ /* Fixed factor clocks */
+ b_clk: b_clk {
+ #clock-cells = <0>;
+ compatible = "fixed-factor-clock";
+ clocks = <&cpg_clocks 0>;
+ clock-mult = <1>;
+ clock-div = <3>;
+ clock-output-names = "b";
+ };
+ p1_clk: p1_clk {
+ #clock-cells = <0>;
+ compatible = "fixed-factor-clock";
+ clocks = <&cpg_clocks 0>;
+ clock-mult = <1>;
+ clock-div = <6>;
+ clock-output-names = "p1";
+ };
+ p0_clk: p0_clk {
+ #clock-cells = <0>;
+ compatible = "fixed-factor-clock";
+ clocks = <&cpg_clocks 0>;
+ clock-mult = <1>;
+ clock-div = <12>;
+ clock-output-names = "p0";
+ };
+
+ /* MSTP clocks */
+ mstp3_clks: mstp3_clks at fcfe0420 {
+ #clock-cells = <1>;
+ compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
+ reg = <0xfcfe0420 4>;
+ clocks = <&p0_clk>;
+ renesas,clock-indices = <R7S72100_CLK_MTU2>;
+ clock-output-names = "mtu2";
+ };
+
+ mstp4_clks: mstp4_clks at fcfe0424 {
+ #clock-cells = <1>;
+ compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
+ reg = <0xfcfe0424 4>;
+ clocks = <&p1_clk>, <&p1_clk>, <&p1_clk>, <&p1_clk>,
+ <&p1_clk>, <&p1_clk>, <&p1_clk>, <&p1_clk>;
+ renesas,clock-indices = <
+ R7S72100_CLK_SCIF0 R7S72100_CLK_SCIF1 R7S72100_CLK_SCIF2 R7S72100_CLK_SCIF3
+ R7S72100_CLK_SCIF4 R7S72100_CLK_SCIF5 R7S72100_CLK_SCIF6 R7S72100_CLK_SCIF7
+ >;
+ clock-output-names = "scif0", "scif1", "scif2", "scif3", "scif4", "scif5", "scif6", "scif7";
+ };
+ };
+
cpus {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/include/dt-bindings/clock/r7s72100-clock.h b/include/dt-bindings/clock/r7s72100-clock.h
new file mode 100644
index 000000000000..eced0a8382b0
--- /dev/null
+++ b/include/dt-bindings/clock/r7s72100-clock.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2014 Wolfram Sang, Sang Engineering <wsa@sang-engineering.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ */
+
+#ifndef __DT_BINDINGS_CLOCK_R7S72100_H__
+#define __DT_BINDINGS_CLOCK_R7S72100_H__
+
+/* MSTP3 */
+#define R7S72100_CLK_MTU2 3
+
+/* MSTP4 */
+#define R7S72100_CLK_SCIF0 7
+#define R7S72100_CLK_SCIF1 6
+#define R7S72100_CLK_SCIF2 5
+#define R7S72100_CLK_SCIF3 4
+#define R7S72100_CLK_SCIF4 3
+#define R7S72100_CLK_SCIF5 2
+#define R7S72100_CLK_SCIF6 1
+#define R7S72100_CLK_SCIF7 0
+
+#endif /* __DT_BINDINGS_CLOCK_R7S72100_H__ */
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 03/12] ARM: shmobile: r7s72100: add essential clock nodes to dtsi
2014-03-06 11:32 ` [PATCH V2 03/12] ARM: shmobile: r7s72100: add essential clock nodes to dtsi Wolfram Sang
@ 2014-03-06 12:16 ` Laurent Pinchart
0 siblings, 0 replies; 17+ messages in thread
From: Laurent Pinchart @ 2014-03-06 12:16 UTC (permalink / raw)
To: linux-arm-kernel
Hi Wolfram,
Thank you for the patch.
On Thursday 06 March 2014 12:32:23 Wolfram Sang wrote:
> From: Wolfram Sang <wsa@sang-engineering.com>
>
> Only essential clocks are added for now. Other clocks will be added when
> needed.
>
> Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
> ---
>
> Changes since V1:
> * add usb_x1 clock
> * reference usb_x1 to cpg
> * improved wording
> * #clock-cells consistently first property
>
> arch/arm/boot/dts/r7s72100.dtsi | 86 ++++++++++++++++++++++++++-
> include/dt-bindings/clock/r7s72100-clock.h | 25 +++++++++
> 2 files changed, 110 insertions(+), 1 deletion(-)
> create mode 100644 include/dt-bindings/clock/r7s72100-clock.h
>
> diff --git a/arch/arm/boot/dts/r7s72100.dtsi
> b/arch/arm/boot/dts/r7s72100.dtsi index ee700717a34b..2429b5be2e56 100644
> --- a/arch/arm/boot/dts/r7s72100.dtsi
> +++ b/arch/arm/boot/dts/r7s72100.dtsi
> @@ -1,13 +1,15 @@
> /*
> * Device Tree Source for the r7s72100 SoC
> *
> - * Copyright (C) 2013 Renesas Solutions Corp.
> + * Copyright (C) 2013-14 Renesas Solutions Corp.
> + * Copyright (C) 2014 Wolfram Sang, Sang Engineering
> <wsa@sang-engineering.com>
> *
> * This file is licensed under the terms of the GNU General Public License
> * version 2. This program is licensed "as is" without any warranty of any
> * kind, whether express or implied.
> */
>
> +#include <dt-bindings/clock/r7s72100-clock.h>
> #include <dt-bindings/interrupt-controller/irq.h>
>
> / {
> @@ -28,6 +30,88 @@
> spi4 = &spi4;
> };
>
> + clocks {
> + ranges;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + /* External clocks */
> + extal_clk: extal_clk {
> + #clock-cells = <0>;
> + compatible = "fixed-clock";
> + /* If clk present, value must be set by board */
> + clock-frequency = <0>;
> + clock-output-names = "extal";
> + };
> +
> + usb_x1_clk: usb_x1_clk {
> + #clock-cells = <0>;
> + compatible = "fixed-clock";
> + /* If clk present, value must be set by board */
> + clock-frequency = <0>;
> + clock-output-names = "usb_x1";
> + };
> +
> + /* Special CPG clocks */
> + cpg_clocks: cpg_clocks at fcfe0000 {
> + #clock-cells = <1>;
> + compatible = "renesas,r7s72100-cpg-clocks",
> + "renesas,rz-cpg-clocks";
> + reg = <0xfcfe0000 0x18>;
> + clocks = <&extal_clk>, <&usb_x1_clk>;
> + clock-output-names = "pll", "i", "g";
> + };
> +
> + /* Fixed factor clocks */
> + b_clk: b_clk {
> + #clock-cells = <0>;
> + compatible = "fixed-factor-clock";
> + clocks = <&cpg_clocks 0>;
What about adding #define's for the CPG clocks to include/dt-
bindings/clock/r7s72100-clock.h like is done for the R8A7790 and R8A7791 ?
> + clock-mult = <1>;
> + clock-div = <3>;
> + clock-output-names = "b";
> + };
> + p1_clk: p1_clk {
> + #clock-cells = <0>;
> + compatible = "fixed-factor-clock";
> + clocks = <&cpg_clocks 0>;
> + clock-mult = <1>;
> + clock-div = <6>;
> + clock-output-names = "p1";
> + };
> + p0_clk: p0_clk {
> + #clock-cells = <0>;
> + compatible = "fixed-factor-clock";
> + clocks = <&cpg_clocks 0>;
> + clock-mult = <1>;
> + clock-div = <12>;
> + clock-output-names = "p0";
> + };
> +
> + /* MSTP clocks */
> + mstp3_clks: mstp3_clks at fcfe0420 {
> + #clock-cells = <1>;
> + compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-
clocks";
> + reg = <0xfcfe0420 4>;
> + clocks = <&p0_clk>;
> + renesas,clock-indices = <R7S72100_CLK_MTU2>;
> + clock-output-names = "mtu2";
> + };
> +
> + mstp4_clks: mstp4_clks at fcfe0424 {
> + #clock-cells = <1>;
> + compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-
clocks";
> + reg = <0xfcfe0424 4>;
> + clocks = <&p1_clk>, <&p1_clk>, <&p1_clk>, <&p1_clk>,
> + <&p1_clk>, <&p1_clk>, <&p1_clk>, <&p1_clk>;
> + renesas,clock-indices = <
> + R7S72100_CLK_SCIF0 R7S72100_CLK_SCIF1 R7S72100_CLK_SCIF2
> R7S72100_CLK_SCIF3 + R7S72100_CLK_SCIF4 R7S72100_CLK_SCIF5
> R7S72100_CLK_SCIF6 R7S72100_CLK_SCIF7 + >;
> + clock-output-names = "scif0", "scif1", "scif2", "scif3", "scif4",
> "scif5", "scif6", "scif7"; + };
> + };
> +
> cpus {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/include/dt-bindings/clock/r7s72100-clock.h
> b/include/dt-bindings/clock/r7s72100-clock.h new file mode 100644
> index 000000000000..eced0a8382b0
> --- /dev/null
> +++ b/include/dt-bindings/clock/r7s72100-clock.h
> @@ -0,0 +1,25 @@
> +/*
> + * Copyright (C) 2014 Wolfram Sang, Sang Engineering
> <wsa@sang-engineering.com> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; version 2 of the License.
> + */
> +
> +#ifndef __DT_BINDINGS_CLOCK_R7S72100_H__
> +#define __DT_BINDINGS_CLOCK_R7S72100_H__
> +
> +/* MSTP3 */
> +#define R7S72100_CLK_MTU2 3
> +
> +/* MSTP4 */
> +#define R7S72100_CLK_SCIF0 7
> +#define R7S72100_CLK_SCIF1 6
> +#define R7S72100_CLK_SCIF2 5
> +#define R7S72100_CLK_SCIF3 4
> +#define R7S72100_CLK_SCIF4 3
> +#define R7S72100_CLK_SCIF5 2
> +#define R7S72100_CLK_SCIF6 1
> +#define R7S72100_CLK_SCIF7 0
> +
> +#endif /* __DT_BINDINGS_CLOCK_R7S72100_H__ */
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH V2 04/12] ARM: shmobile: r7s72100: genmai: populate nodes for external clocks
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
` (2 preceding siblings ...)
2014-03-06 11:32 ` [PATCH V2 03/12] ARM: shmobile: r7s72100: add essential clock nodes to dtsi Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 05/12] ARM: shmobile: r7s72100: use workaround for non DT-clocks Wolfram Sang
` (6 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
Changes since V1:
* activate usb_x1, too
arch/arm/boot/dts/r7s72100-genmai-reference.dts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm/boot/dts/r7s72100-genmai-reference.dts b/arch/arm/boot/dts/r7s72100-genmai-reference.dts
index e664611a47c8..941e72ce7c82 100644
--- a/arch/arm/boot/dts/r7s72100-genmai-reference.dts
+++ b/arch/arm/boot/dts/r7s72100-genmai-reference.dts
@@ -30,6 +30,14 @@
};
};
+&extal_clk {
+ clock-frequency = <13330000>;
+};
+
+&usb_x1_clk {
+ clock-frequency = <48000000>;
+};
+
&i2c2 {
status = "okay";
clock-frequency = <400000>;
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 05/12] ARM: shmobile: r7s72100: use workaround for non DT-clocks
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
` (3 preceding siblings ...)
2014-03-06 11:32 ` [PATCH V2 04/12] ARM: shmobile: r7s72100: genmai: populate nodes for external clocks Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 06/12] ARM: shmobile: r7s72100: add scif nodes to dtsi Wolfram Sang
` (5 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
SCIF2 and MTU2 are not yet prepared for DT usage, so use the common
workaround via clkdev for now.
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
No changes since V1.
arch/arm/mach-shmobile/board-genmai-reference.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-shmobile/board-genmai-reference.c b/arch/arm/mach-shmobile/board-genmai-reference.c
index 7630c1053e32..91dcdd0e026d 100644
--- a/arch/arm/mach-shmobile/board-genmai-reference.c
+++ b/arch/arm/mach-shmobile/board-genmai-reference.c
@@ -18,18 +18,29 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <linux/clk-provider.h>
#include <linux/kernel.h>
#include <linux/of_platform.h>
+#include <mach/clock.h>
#include <mach/common.h>
#include <mach/r7s72100.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
+#ifdef CONFIG_COMMON_CLK
+/*
+ * This is a really crude hack to provide clkdev support to platform
+ * devices until they get moved to DT.
+ */
+static const struct clk_name clk_names[] = {
+ { "mtu2", NULL, "sh_mtu2.0" },
+ { "scif2", NULL, "sh-sci.2" },
+};
+#endif
+
static void __init genmai_add_standard_devices(void)
{
#ifdef CONFIG_COMMON_CLK
- of_clk_init(NULL);
+ shmobile_clk_workaround(clk_names, ARRAY_SIZE(clk_names), true);
#else
r7s72100_clock_init();
#endif
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 06/12] ARM: shmobile: r7s72100: add scif nodes to dtsi
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
` (4 preceding siblings ...)
2014-03-06 11:32 ` [PATCH V2 05/12] ARM: shmobile: r7s72100: use workaround for non DT-clocks Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 07/12] ARM: shmobile: r7s72100: genmai: activate scif2 for console output Wolfram Sang
` (4 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
arch/arm/boot/dts/r7s72100.dtsi | 104 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 104 insertions(+)
diff --git a/arch/arm/boot/dts/r7s72100.dtsi b/arch/arm/boot/dts/r7s72100.dtsi
index 2429b5be2e56..a926f61f7f69 100644
--- a/arch/arm/boot/dts/r7s72100.dtsi
+++ b/arch/arm/boot/dts/r7s72100.dtsi
@@ -23,6 +23,14 @@
i2c1 = &i2c1;
i2c2 = &i2c2;
i2c3 = &i2c3;
+ serial0 = &scif0;
+ serial1 = &scif1;
+ serial2 = &scif2;
+ serial3 = &scif3;
+ serial4 = &scif4;
+ serial5 = &scif5;
+ serial6 = &scif6;
+ serial7 = &scif7;
spi0 = &spi0;
spi1 = &spi1;
spi2 = &spi2;
@@ -200,6 +208,102 @@
status = "disabled";
};
+ scif0: serial at e8007000 {
+ compatible = "renesas,scif-r7s72100", "renesas,scif";
+ reg = <0xe8007000 64>;
+ interrupts = <0 190 IRQ_TYPE_LEVEL_HIGH>,
+ <0 191 IRQ_TYPE_LEVEL_HIGH>,
+ <0 192 IRQ_TYPE_LEVEL_HIGH>,
+ <0 189 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp4_clks R7S72100_CLK_SCIF0>;
+ clock-names = "sci_ick";
+ status = "disabled";
+ };
+
+ scif1: serial at e8007800 {
+ compatible = "renesas,scif-r7s72100", "renesas,scif";
+ reg = <0xe8007800 64>;
+ interrupts = <0 194 IRQ_TYPE_LEVEL_HIGH>,
+ <0 195 IRQ_TYPE_LEVEL_HIGH>,
+ <0 196 IRQ_TYPE_LEVEL_HIGH>,
+ <0 193 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp4_clks R7S72100_CLK_SCIF1>;
+ clock-names = "sci_ick";
+ status = "disabled";
+ };
+
+ scif2: serial at e8008000 {
+ compatible = "renesas,scif-r7s72100", "renesas,scif";
+ reg = <0xe8008000 64>;
+ interrupts = <0 198 IRQ_TYPE_LEVEL_HIGH>,
+ <0 199 IRQ_TYPE_LEVEL_HIGH>,
+ <0 200 IRQ_TYPE_LEVEL_HIGH>,
+ <0 197 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp4_clks R7S72100_CLK_SCIF2>;
+ clock-names = "sci_ick";
+ status = "disabled";
+ };
+
+ scif3: serial at e8008800 {
+ compatible = "renesas,scif-r7s72100", "renesas,scif";
+ reg = <0xe8008800 64>;
+ interrupts = <0 202 IRQ_TYPE_LEVEL_HIGH>,
+ <0 203 IRQ_TYPE_LEVEL_HIGH>,
+ <0 204 IRQ_TYPE_LEVEL_HIGH>,
+ <0 201 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp4_clks R7S72100_CLK_SCIF3>;
+ clock-names = "sci_ick";
+ status = "disabled";
+ };
+
+ scif4: serial at e8009000 {
+ compatible = "renesas,scif-r7s72100", "renesas,scif";
+ reg = <0xe8009000 64>;
+ interrupts = <0 206 IRQ_TYPE_LEVEL_HIGH>,
+ <0 207 IRQ_TYPE_LEVEL_HIGH>,
+ <0 208 IRQ_TYPE_LEVEL_HIGH>,
+ <0 205 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp4_clks R7S72100_CLK_SCIF4>;
+ clock-names = "sci_ick";
+ status = "disabled";
+ };
+
+ scif5: serial at e8009800 {
+ compatible = "renesas,scif-r7s72100", "renesas,scif";
+ reg = <0xe8009800 64>;
+ interrupts = <0 210 IRQ_TYPE_LEVEL_HIGH>,
+ <0 211 IRQ_TYPE_LEVEL_HIGH>,
+ <0 212 IRQ_TYPE_LEVEL_HIGH>,
+ <0 209 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp4_clks R7S72100_CLK_SCIF5>;
+ clock-names = "sci_ick";
+ status = "disabled";
+ };
+
+ scif6: serial at e800a000 {
+ compatible = "renesas,scif-r7s72100", "renesas,scif";
+ reg = <0xe800a000 64>;
+ interrupts = <0 214 IRQ_TYPE_LEVEL_HIGH>,
+ <0 215 IRQ_TYPE_LEVEL_HIGH>,
+ <0 216 IRQ_TYPE_LEVEL_HIGH>,
+ <0 213 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp4_clks R7S72100_CLK_SCIF6>;
+ clock-names = "sci_ick";
+ status = "disabled";
+ };
+
+ scif7: serial at e800a800 {
+ compatible = "renesas,scif-r7s72100", "renesas,scif";
+ reg = <0xe800a800 64>;
+ interrupts = <0 218 IRQ_TYPE_LEVEL_HIGH>,
+ <0 219 IRQ_TYPE_LEVEL_HIGH>,
+ <0 220 IRQ_TYPE_LEVEL_HIGH>,
+ <0 217 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp4_clks R7S72100_CLK_SCIF7>;
+ clock-names = "sci_ick";
+ status = "disabled";
+ };
+
spi0: spi at e800c800 {
compatible = "renesas,rspi-r7s72100", "renesas,rspi-rz";
reg = <0xe800c800 0x24>;
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 07/12] ARM: shmobile: r7s72100: genmai: activate scif2 for console output
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
` (5 preceding siblings ...)
2014-03-06 11:32 ` [PATCH V2 06/12] ARM: shmobile: r7s72100: add scif nodes to dtsi Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 08/12] ARM: shmobile: r7s72100: genmai: platform scif devices only for legacy support Wolfram Sang
` (3 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
arch/arm/boot/dts/r7s72100-genmai-reference.dts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/arm/boot/dts/r7s72100-genmai-reference.dts b/arch/arm/boot/dts/r7s72100-genmai-reference.dts
index 941e72ce7c82..82901a2cd947 100644
--- a/arch/arm/boot/dts/r7s72100-genmai-reference.dts
+++ b/arch/arm/boot/dts/r7s72100-genmai-reference.dts
@@ -48,3 +48,7 @@
pagesize = <64>;
};
};
+
+&scif2 {
+ status = "okay";
+};
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 08/12] ARM: shmobile: r7s72100: genmai: platform scif devices only for legacy support
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
` (6 preceding siblings ...)
2014-03-06 11:32 ` [PATCH V2 07/12] ARM: shmobile: r7s72100: genmai: activate scif2 for console output Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 09/12] ARM: shmobile: r7s72100: add i2c clocks to dtsi Wolfram Sang
` (2 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
We have now DT support for SCIF, so use the platform_device
initialization only for the legacy support.
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
arch/arm/mach-shmobile/board-genmai-reference.c | 1 -
arch/arm/mach-shmobile/board-genmai.c | 44 +++++++++++++++++++++++++
arch/arm/mach-shmobile/setup-r7s72100.c | 43 ------------------------
3 files changed, 44 insertions(+), 44 deletions(-)
diff --git a/arch/arm/mach-shmobile/board-genmai-reference.c b/arch/arm/mach-shmobile/board-genmai-reference.c
index 91dcdd0e026d..fde558b66d4e 100644
--- a/arch/arm/mach-shmobile/board-genmai-reference.c
+++ b/arch/arm/mach-shmobile/board-genmai-reference.c
@@ -33,7 +33,6 @@
*/
static const struct clk_name clk_names[] = {
{ "mtu2", NULL, "sh_mtu2.0" },
- { "scif2", NULL, "sh-sci.2" },
};
#endif
diff --git a/arch/arm/mach-shmobile/board-genmai.c b/arch/arm/mach-shmobile/board-genmai.c
index 6c328d63b819..c94201ee8596 100644
--- a/arch/arm/mach-shmobile/board-genmai.c
+++ b/arch/arm/mach-shmobile/board-genmai.c
@@ -21,6 +21,7 @@
#include <linux/kernel.h>
#include <linux/platform_device.h>
+#include <linux/serial_sci.h>
#include <linux/sh_eth.h>
#include <linux/spi/rspi.h>
#include <linux/spi/spi.h>
@@ -89,6 +90,40 @@ static const struct spi_board_info spi_info[] __initconst = {
},
};
+/* SCIF */
+#define R7S72100_SCIF(index, baseaddr, irq) \
+static const struct plat_sci_port scif##index##_platform_data = { \
+ .type = PORT_SCIF, \
+ .regtype = SCIx_SH2_SCIF_FIFODATA_REGTYPE, \
+ .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, \
+ .scscr = SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | \
+ SCSCR_REIE, \
+}; \
+ \
+static struct resource scif##index##_resources[] = { \
+ DEFINE_RES_MEM(baseaddr, 0x100), \
+ DEFINE_RES_IRQ(irq + 1), \
+ DEFINE_RES_IRQ(irq + 2), \
+ DEFINE_RES_IRQ(irq + 3), \
+ DEFINE_RES_IRQ(irq), \
+} \
+
+R7S72100_SCIF(0, 0xe8007000, gic_iid(221));
+R7S72100_SCIF(1, 0xe8007800, gic_iid(225));
+R7S72100_SCIF(2, 0xe8008000, gic_iid(229));
+R7S72100_SCIF(3, 0xe8008800, gic_iid(233));
+R7S72100_SCIF(4, 0xe8009000, gic_iid(237));
+R7S72100_SCIF(5, 0xe8009800, gic_iid(241));
+R7S72100_SCIF(6, 0xe800a000, gic_iid(245));
+R7S72100_SCIF(7, 0xe800a800, gic_iid(249));
+
+#define r7s72100_register_scif(index) \
+ platform_device_register_resndata(&platform_bus, "sh-sci", index, \
+ scif##index##_resources, \
+ ARRAY_SIZE(scif##index##_resources), \
+ &scif##index##_platform_data, \
+ sizeof(scif##index##_platform_data))
+
static void __init genmai_add_standard_devices(void)
{
r7s72100_clock_init();
@@ -102,6 +137,15 @@ static void __init genmai_add_standard_devices(void)
r7s72100_register_rspi(3);
r7s72100_register_rspi(4);
spi_register_board_info(spi_info, ARRAY_SIZE(spi_info));
+
+ r7s72100_register_scif(0);
+ r7s72100_register_scif(1);
+ r7s72100_register_scif(2);
+ r7s72100_register_scif(3);
+ r7s72100_register_scif(4);
+ r7s72100_register_scif(5);
+ r7s72100_register_scif(6);
+ r7s72100_register_scif(7);
}
static const char * const genmai_boards_compat_dt[] __initconst = {
diff --git a/arch/arm/mach-shmobile/setup-r7s72100.c b/arch/arm/mach-shmobile/setup-r7s72100.c
index 9c0b3a9d5f7a..828842319653 100644
--- a/arch/arm/mach-shmobile/setup-r7s72100.c
+++ b/arch/arm/mach-shmobile/setup-r7s72100.c
@@ -21,47 +21,12 @@
#include <linux/irq.h>
#include <linux/kernel.h>
#include <linux/of_platform.h>
-#include <linux/serial_sci.h>
#include <linux/sh_timer.h>
#include <mach/common.h>
#include <mach/irqs.h>
#include <mach/r7s72100.h>
#include <asm/mach/arch.h>
-#define R7S72100_SCIF(index, baseaddr, irq) \
-static const struct plat_sci_port scif##index##_platform_data = { \
- .type = PORT_SCIF, \
- .regtype = SCIx_SH2_SCIF_FIFODATA_REGTYPE, \
- .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, \
- .scscr = SCSCR_RIE | SCSCR_TIE | SCSCR_RE | SCSCR_TE | \
- SCSCR_REIE, \
-}; \
- \
-static struct resource scif##index##_resources[] = { \
- DEFINE_RES_MEM(baseaddr, 0x100), \
- DEFINE_RES_IRQ(irq + 1), \
- DEFINE_RES_IRQ(irq + 2), \
- DEFINE_RES_IRQ(irq + 3), \
- DEFINE_RES_IRQ(irq), \
-} \
-
-R7S72100_SCIF(0, 0xe8007000, gic_iid(221));
-R7S72100_SCIF(1, 0xe8007800, gic_iid(225));
-R7S72100_SCIF(2, 0xe8008000, gic_iid(229));
-R7S72100_SCIF(3, 0xe8008800, gic_iid(233));
-R7S72100_SCIF(4, 0xe8009000, gic_iid(237));
-R7S72100_SCIF(5, 0xe8009800, gic_iid(241));
-R7S72100_SCIF(6, 0xe800a000, gic_iid(245));
-R7S72100_SCIF(7, 0xe800a800, gic_iid(249));
-
-#define r7s72100_register_scif(index) \
- platform_device_register_resndata(&platform_bus, "sh-sci", index, \
- scif##index##_resources, \
- ARRAY_SIZE(scif##index##_resources), \
- &scif##index##_platform_data, \
- sizeof(scif##index##_platform_data))
-
-
static struct sh_timer_config mtu2_0_platform_data __initdata = {
.name = "MTU2_0",
.timer_bit = 0,
@@ -83,14 +48,6 @@ static struct resource mtu2_0_resources[] __initdata = {
void __init r7s72100_add_dt_devices(void)
{
- r7s72100_register_scif(0);
- r7s72100_register_scif(1);
- r7s72100_register_scif(2);
- r7s72100_register_scif(3);
- r7s72100_register_scif(4);
- r7s72100_register_scif(5);
- r7s72100_register_scif(6);
- r7s72100_register_scif(7);
r7s72100_register_mtu2(0);
}
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 09/12] ARM: shmobile: r7s72100: add i2c clocks to dtsi
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
` (7 preceding siblings ...)
2014-03-06 11:32 ` [PATCH V2 08/12] ARM: shmobile: r7s72100: genmai: platform scif devices only for legacy support Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 10/12] ARM: shmobile: r7s72100: remove I2C DT clocks from legacy clock support Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 11/12] ARM: shmobile: r7s72100: add spi clocks to dtsi Wolfram Sang
10 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
arch/arm/boot/dts/r7s72100.dtsi | 15 +++++++++++++++
include/dt-bindings/clock/r7s72100-clock.h | 6 ++++++
2 files changed, 21 insertions(+)
diff --git a/arch/arm/boot/dts/r7s72100.dtsi b/arch/arm/boot/dts/r7s72100.dtsi
index a926f61f7f69..7d2f12ede1f7 100644
--- a/arch/arm/boot/dts/r7s72100.dtsi
+++ b/arch/arm/boot/dts/r7s72100.dtsi
@@ -118,6 +118,17 @@
>;
clock-output-names = "scif0", "scif1", "scif2", "scif3", "scif4", "scif5", "scif6", "scif7";
};
+
+ mstp9_clks: mstp9_clks at fcfe0438 {
+ #clock-cells = <1>;
+ compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
+ reg = <0xfcfe0438 4>;
+ clocks = <&p0_clk>, <&p0_clk>, <&p0_clk>, <&p0_clk>;
+ renesas,clock-indices = <
+ R7S72100_CLK_I2C0 R7S72100_CLK_I2C1 R7S72100_CLK_I2C2 R7S72100_CLK_I2C3
+ >;
+ clock-output-names = "i2c0", "i2c1", "i2c2", "i2c3";
+ };
};
cpus {
@@ -153,6 +164,7 @@
<0 162 IRQ_TYPE_LEVEL_HIGH>,
<0 163 IRQ_TYPE_LEVEL_HIGH>,
<0 164 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp9_clks R7S72100_CLK_I2C0>;
clock-frequency = <100000>;
status = "disabled";
};
@@ -170,6 +182,7 @@
<0 170 IRQ_TYPE_LEVEL_HIGH>,
<0 171 IRQ_TYPE_LEVEL_HIGH>,
<0 172 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp9_clks R7S72100_CLK_I2C1>;
clock-frequency = <100000>;
status = "disabled";
};
@@ -187,6 +200,7 @@
<0 178 IRQ_TYPE_LEVEL_HIGH>,
<0 179 IRQ_TYPE_LEVEL_HIGH>,
<0 180 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp9_clks R7S72100_CLK_I2C2>;
clock-frequency = <100000>;
status = "disabled";
};
@@ -204,6 +218,7 @@
<0 186 IRQ_TYPE_LEVEL_HIGH>,
<0 187 IRQ_TYPE_LEVEL_HIGH>,
<0 188 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&mstp9_clks R7S72100_CLK_I2C3>;
clock-frequency = <100000>;
status = "disabled";
};
diff --git a/include/dt-bindings/clock/r7s72100-clock.h b/include/dt-bindings/clock/r7s72100-clock.h
index eced0a8382b0..46fab31d070a 100644
--- a/include/dt-bindings/clock/r7s72100-clock.h
+++ b/include/dt-bindings/clock/r7s72100-clock.h
@@ -22,4 +22,10 @@
#define R7S72100_CLK_SCIF6 1
#define R7S72100_CLK_SCIF7 0
+/* MSTP9 */
+#define R7S72100_CLK_I2C0 7
+#define R7S72100_CLK_I2C1 6
+#define R7S72100_CLK_I2C2 5
+#define R7S72100_CLK_I2C3 4
+
#endif /* __DT_BINDINGS_CLOCK_R7S72100_H__ */
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 10/12] ARM: shmobile: r7s72100: remove I2C DT clocks from legacy clock support
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
` (8 preceding siblings ...)
2014-03-06 11:32 ` [PATCH V2 09/12] ARM: shmobile: r7s72100: add i2c clocks to dtsi Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 11:32 ` [PATCH V2 11/12] ARM: shmobile: r7s72100: add spi clocks to dtsi Wolfram Sang
10 siblings, 0 replies; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Not used anymore since we switched to CCF.
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
arch/arm/mach-shmobile/clock-r7s72100.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/arch/arm/mach-shmobile/clock-r7s72100.c b/arch/arm/mach-shmobile/clock-r7s72100.c
index f17a5db00221..dd14cfb7ac12 100644
--- a/arch/arm/mach-shmobile/clock-r7s72100.c
+++ b/arch/arm/mach-shmobile/clock-r7s72100.c
@@ -199,10 +199,6 @@ static struct clk_lookup lookups[] = {
CLKDEV_DEV_ID("e800d800.spi", &mstp_clks[MSTP105]),
CLKDEV_DEV_ID("e800e000.spi", &mstp_clks[MSTP104]),
CLKDEV_DEV_ID("e800e800.spi", &mstp_clks[MSTP103]),
- CLKDEV_DEV_ID("fcfee000.i2c", &mstp_clks[MSTP97]),
- CLKDEV_DEV_ID("fcfee400.i2c", &mstp_clks[MSTP96]),
- CLKDEV_DEV_ID("fcfee800.i2c", &mstp_clks[MSTP95]),
- CLKDEV_DEV_ID("fcfeec00.i2c", &mstp_clks[MSTP94]),
CLKDEV_DEV_ID("r7s72100-ether", &mstp_clks[MSTP74]),
CLKDEV_CON_ID("mtu2_fck", &mstp_clks[MSTP33]),
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 11/12] ARM: shmobile: r7s72100: add spi clocks to dtsi
2014-03-06 11:32 [PATCH V2 00/12] CCF support for Renesas r7s72100 Wolfram Sang
` (9 preceding siblings ...)
2014-03-06 11:32 ` [PATCH V2 10/12] ARM: shmobile: r7s72100: remove I2C DT clocks from legacy clock support Wolfram Sang
@ 2014-03-06 11:32 ` Wolfram Sang
2014-03-06 13:03 ` Geert Uytterhoeven
10 siblings, 1 reply; 17+ messages in thread
From: Wolfram Sang @ 2014-03-06 11:32 UTC (permalink / raw)
To: linux-arm-kernel
From: Wolfram Sang <wsa@sang-engineering.com>
Signed-off-by: Wolfram Sang <wsa@sang-engineering.com>
---
arch/arm/boot/dts/r7s72100.dtsi | 18 ++++++++++++++++++
include/dt-bindings/clock/r7s72100-clock.h | 7 +++++++
2 files changed, 25 insertions(+)
diff --git a/arch/arm/boot/dts/r7s72100.dtsi b/arch/arm/boot/dts/r7s72100.dtsi
index 7d2f12ede1f7..d074ae9a684d 100644
--- a/arch/arm/boot/dts/r7s72100.dtsi
+++ b/arch/arm/boot/dts/r7s72100.dtsi
@@ -129,6 +129,19 @@
>;
clock-output-names = "i2c0", "i2c1", "i2c2", "i2c3";
};
+
+ mstp10_clks: mstp10_clks at fcfe043c {
+ #clock-cells = <1>;
+ compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
+ reg = <0xfcfe043c 4>;
+ clocks = <&p1_clk>, <&p1_clk>, <&p1_clk>, <&p1_clk>,
+ <&p1_clk>;
+ renesas,clock-indices = <
+ R7S72100_CLK_SPI0 R7S72100_CLK_SPI1 R7S72100_CLK_SPI2 R7S72100_CLK_SPI3
+ R7S72100_CLK_SPI4
+ >;
+ clock-output-names = "spi0", "spi1", "spi2", "spi3", "spi4";
+ };
};
cpus {
@@ -326,6 +339,7 @@
<0 239 IRQ_TYPE_LEVEL_HIGH>,
<0 240 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "error", "rx", "tx";
+ clocks = <&mstp10_clks R7S72100_CLK_SPI0>;
num-cs = <1>;
#address-cells = <1>;
#size-cells = <0>;
@@ -339,6 +353,7 @@
<0 242 IRQ_TYPE_LEVEL_HIGH>,
<0 243 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "error", "rx", "tx";
+ clocks = <&mstp10_clks R7S72100_CLK_SPI1>;
num-cs = <1>;
#address-cells = <1>;
#size-cells = <0>;
@@ -352,6 +367,7 @@
<0 245 IRQ_TYPE_LEVEL_HIGH>,
<0 246 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "error", "rx", "tx";
+ clocks = <&mstp10_clks R7S72100_CLK_SPI2>;
num-cs = <1>;
#address-cells = <1>;
#size-cells = <0>;
@@ -365,6 +381,7 @@
<0 248 IRQ_TYPE_LEVEL_HIGH>,
<0 249 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "error", "rx", "tx";
+ clocks = <&mstp10_clks R7S72100_CLK_SPI3>;
num-cs = <1>;
#address-cells = <1>;
#size-cells = <0>;
@@ -378,6 +395,7 @@
<0 251 IRQ_TYPE_LEVEL_HIGH>,
<0 252 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "error", "rx", "tx";
+ clocks = <&mstp10_clks R7S72100_CLK_SPI4>;
num-cs = <1>;
#address-cells = <1>;
#size-cells = <0>;
diff --git a/include/dt-bindings/clock/r7s72100-clock.h b/include/dt-bindings/clock/r7s72100-clock.h
index 46fab31d070a..fa9132bd5b35 100644
--- a/include/dt-bindings/clock/r7s72100-clock.h
+++ b/include/dt-bindings/clock/r7s72100-clock.h
@@ -28,4 +28,11 @@
#define R7S72100_CLK_I2C2 5
#define R7S72100_CLK_I2C3 4
+/* MSTP10 */
+#define R7S72100_CLK_SPI0 7
+#define R7S72100_CLK_SPI1 6
+#define R7S72100_CLK_SPI2 5
+#define R7S72100_CLK_SPI3 4
+#define R7S72100_CLK_SPI4 3
+
#endif /* __DT_BINDINGS_CLOCK_R7S72100_H__ */
--
1.9.0
^ permalink raw reply related [flat|nested] 17+ messages in thread