All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/6] arm64: renesas: Obtain MD pin values using syscon/regmap
@ 2016-05-20  6:57 Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 1/6] reset: Add renesas,rst DT bindings Dirk Behme
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Dirk Behme @ 2016-05-20  6:57 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

This is a resend of

http://www.spinics.net/lists/linux-sh/msg44757.html

It's rebased against

https://git.kernel.org/cgit/linux/kernel/git/geert/renesas-drivers.git/log/?h=topic/gen3-latest
renesas-drivers-2016-05-17-v4.6
4717ef6d59c3204e385c
Revert "ASoC: simple-card: Add pm callbacks to platform driver"

and adds support for r8a7796, too.

It's boot tested on r8a7795 Salvator-X and checked that the same
mode value is read without and with this patch series.

Dirk

Changes in v3:
- Rename R-Car M3 -> R-Car M3-W
- Fix subject of patch 2/6

Changes in v2:
- rebase against renesas-drivers-2016-05-17-v4.6
- switch renesas,rst-<soctype> to renesas,<soctype>-rst
- Fix typo in r8a7796-rst
- Move rcar_gen3_read_mode_pins() to renesas-cpg-mssr.c, as we're gonna need it for
  R-Car Gen2 too, if/when that is converted to cpg-mssr.c.

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

* [PATCH v3 1/6] reset: Add renesas,rst DT bindings
  2016-05-20  6:57 [PATCH v3 0/6] arm64: renesas: Obtain MD pin values using syscon/regmap Dirk Behme
@ 2016-05-20  6:57 ` Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 2/6] clk: renesas: cpg-mssr: Document renesas,modemr Dirk Behme
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Dirk Behme @ 2016-05-20  6:57 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Geert Uytterhoeven <geert+renesas@glider.be>

Add DT bindings for the Renesas R-Car Reset Controller.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
---
 .../devicetree/bindings/reset/renesas,rst.txt      | 29 ++++++++++++++++++++++
 1 file changed, 29 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/reset/renesas,rst.txt

diff --git a/Documentation/devicetree/bindings/reset/renesas,rst.txt b/Documentation/devicetree/bindings/reset/renesas,rst.txt
new file mode 100644
index 0000000..35f6c89
--- /dev/null
+++ b/Documentation/devicetree/bindings/reset/renesas,rst.txt
@@ -0,0 +1,29 @@
+DT bindings for the Renesas R-Car Reset Controller
+
+The R-Car Reset Controller provides reset control, and implements the following
+functions:
+  - Register-based reset control for the various CPU cores,
+  - Latching of the levels on mode pins when PRESET# is negated,
+  - Mode monitoring register,
+  - Boot address registers for the various CPU cores.
+
+
+Required properties:
+  - compatible: Should be "renesas,<soctype>-rst", and "syscon".
+		Examples with soctypes are:
+		  - "renesas,r8a7790-rst" (R-Car H2)
+		  - "renesas,r8a7791-rst" (R-Car M2-W)
+		  - "renesas,r8a7792-rst" (R-Car V2H
+		  - "renesas,r8a7793-rst" (R-Car M2-N)
+		  - "renesas,r8a7794-rst" (R-Car E2)
+		  - "renesas,r8a7795-rst" (R-Car H3)
+		  - "renesas,r8a7796-rst" (R-Car M3-W)
+  - reg: Address start and address range for the device.
+
+
+Example:
+
+	rst: reset-controller@e6160000 {
+		compatible = "renesas,r8a7795-rst", "syscon";
+		reg = <0 0xe6160000 0 0x0200>;
+	};
-- 
2.8.0

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

* [PATCH v3 2/6] clk: renesas: cpg-mssr: Document renesas,modemr
  2016-05-20  6:57 [PATCH v3 0/6] arm64: renesas: Obtain MD pin values using syscon/regmap Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 1/6] reset: Add renesas,rst DT bindings Dirk Behme
@ 2016-05-20  6:57 ` Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 3/6] clk: renesas: rcar: Obtain MD pin values using syscon/regmap Dirk Behme
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Dirk Behme @ 2016-05-20  6:57 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Geert Uytterhoeven <geert+renesas@glider.be>

Document the "renesas,modemr" property, which allows the Clock Pulse
Generator driver to obtain the values of the mode pin using syscon and
regmap.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
---
 Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt b/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt
index 394d725..31182f0 100644
--- a/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt
+++ b/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt
@@ -39,6 +39,8 @@ Required Properties:
 	Domain bindings in
 	Documentation/devicetree/bindings/power/power_domain.txt.
 
+  - renesas,modemr: Reference to the RST module node, and register offset of
+		    the Mode Monitor Register (MODEMR) inside the RST module
 
 Examples
 --------
@@ -52,6 +54,7 @@ Examples
 		clock-names = "extal", "extalr";
 		#clock-cells = <2>;
 		#power-domain-cells = <0>;
+		renesas,modemr = <&rst 0x60>;
 	};
 
 
-- 
2.8.0

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

* [PATCH v3 3/6] clk: renesas: rcar: Obtain MD pin values using syscon/regmap
  2016-05-20  6:57 [PATCH v3 0/6] arm64: renesas: Obtain MD pin values using syscon/regmap Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 1/6] reset: Add renesas,rst DT bindings Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 2/6] clk: renesas: cpg-mssr: Document renesas,modemr Dirk Behme
@ 2016-05-20  6:57 ` Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 4/6] arm64: dts: renesas: Add device node for RST module Dirk Behme
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Dirk Behme @ 2016-05-20  6:57 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Geert Uytterhoeven <geert+renesas@glider.be>

Obtain the values of the mode pins by reading the Mode Monitoring
Register (MODEMR) using syscon and regmap. The syscon device and
register offset to use are obtained from the "renesas,modemr" property
in DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
---
 drivers/clk/renesas/r8a7795-cpg-mssr.c |  7 ++++++-
 drivers/clk/renesas/r8a7796-cpg-mssr.c |  7 ++++++-
 drivers/clk/renesas/rcar-gen3-cpg.c    | 17 -----------------
 drivers/clk/renesas/rcar-gen3-cpg.h    |  1 -
 drivers/clk/renesas/renesas-cpg-mssr.c | 20 ++++++++++++++++++++
 drivers/clk/renesas/renesas-cpg-mssr.h |  1 +
 6 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/drivers/clk/renesas/r8a7795-cpg-mssr.c b/drivers/clk/renesas/r8a7795-cpg-mssr.c
index e53aff5..cfbe1f3 100644
--- a/drivers/clk/renesas/r8a7795-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c
@@ -294,7 +294,12 @@ static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = {
 static int __init r8a7795_cpg_mssr_init(struct device *dev)
 {
 	const struct rcar_gen3_cpg_pll_config *cpg_pll_config;
-	u32 cpg_mode = rcar_gen3_read_mode_pins();
+	u32 cpg_mode;
+	int ret;
+
+	ret = cpg_mssr_read_mode_pins(dev, &cpg_mode);
+	if (ret)
+		return ret;
 
 	cpg_pll_config = &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)];
 	if (!cpg_pll_config->extal_div) {
diff --git a/drivers/clk/renesas/r8a7796-cpg-mssr.c b/drivers/clk/renesas/r8a7796-cpg-mssr.c
index c84b549..5302251 100644
--- a/drivers/clk/renesas/r8a7796-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c
@@ -159,7 +159,12 @@ static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = {
 static int __init r8a7796_cpg_mssr_init(struct device *dev)
 {
 	const struct rcar_gen3_cpg_pll_config *cpg_pll_config;
-	u32 cpg_mode = rcar_gen3_read_mode_pins();
+	u32 cpg_mode;
+	int ret;
+
+	ret = cpg_mssr_read_mode_pins(dev, &cpg_mode);
+	if (ret)
+		return ret;
 
 	cpg_pll_config = &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)];
 	if (!cpg_pll_config->extal_div) {
diff --git a/drivers/clk/renesas/rcar-gen3-cpg.c b/drivers/clk/renesas/rcar-gen3-cpg.c
index bb4f2f9..9d76076 100644
--- a/drivers/clk/renesas/rcar-gen3-cpg.c
+++ b/drivers/clk/renesas/rcar-gen3-cpg.c
@@ -333,23 +333,6 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct device *dev,
 					 __clk_get_name(parent), 0, mult, div);
 }
 
-/*
- * Reset register definitions.
- */
-#define MODEMR	0xe6160060
-
-u32 __init rcar_gen3_read_mode_pins(void)
-{
-	void __iomem *modemr = ioremap_nocache(MODEMR, 4);
-	u32 mode;
-
-	BUG_ON(!modemr);
-	mode = ioread32(modemr);
-	iounmap(modemr);
-
-	return mode;
-}
-
 int __init rcar_gen3_cpg_init(const struct rcar_gen3_cpg_pll_config *config,
 			      unsigned int clk_extalr)
 {
diff --git a/drivers/clk/renesas/rcar-gen3-cpg.h b/drivers/clk/renesas/rcar-gen3-cpg.h
index f699085..f788f48 100644
--- a/drivers/clk/renesas/rcar-gen3-cpg.h
+++ b/drivers/clk/renesas/rcar-gen3-cpg.h
@@ -33,7 +33,6 @@ struct rcar_gen3_cpg_pll_config {
 
 #define CPG_RCKCR	0x240
 
-u32 rcar_gen3_read_mode_pins(void);
 struct clk *rcar_gen3_cpg_clk_register(struct device *dev,
 	const struct cpg_core_clk *core, const struct cpg_mssr_info *info,
 	struct clk **clks, void __iomem *base);
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
index e1365e7..6c0598a 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.c
+++ b/drivers/clk/renesas/renesas-cpg-mssr.c
@@ -18,13 +18,16 @@
 #include <linux/clk/renesas.h>
 #include <linux/device.h>
 #include <linux/init.h>
+#include <linux/mfd/syscon.h>
 #include <linux/mod_devicetable.h>
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/pm_clock.h>
 #include <linux/pm_domain.h>
+#include <linux/regmap.h>
 #include <linux/slab.h>
 
 #include <dt-bindings/clock/renesas-cpg-mssr.h>
@@ -473,6 +476,23 @@ void cpg_mssr_detach_dev(struct generic_pm_domain *unused, struct device *dev)
 		pm_clk_destroy(dev);
 }
 
+int __init cpg_mssr_read_mode_pins(struct device *dev, u32 *cpg_mode)
+{
+	struct device_node *np = dev->of_node;
+	struct regmap *regmap;
+	u32 reg;
+
+	regmap = syscon_regmap_lookup_by_phandle(np, "renesas,modemr");
+	if (IS_ERR(regmap) ||
+	    of_property_read_u32_index(np, "renesas,modemr", 1, &reg) ||
+	    regmap_read(regmap, reg, cpg_mode)) {
+		dev_err(dev, "Failed to parse renesas,modemr\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static int __init cpg_mssr_add_clk_domain(struct device *dev,
 					  const unsigned int *core_pm_clks,
 					  unsigned int num_core_pm_clks)
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.h b/drivers/clk/renesas/renesas-cpg-mssr.h
index ee7edfa..4bf09c5 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.h
+++ b/drivers/clk/renesas/renesas-cpg-mssr.h
@@ -132,4 +132,5 @@ struct cpg_mssr_info {
 
 extern const struct cpg_mssr_info r8a7795_cpg_mssr_info;
 extern const struct cpg_mssr_info r8a7796_cpg_mssr_info;
+int cpg_mssr_read_mode_pins(struct device *dev, u32 *cpg_mode);
 #endif
-- 
2.8.0

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

* [PATCH v3 4/6] arm64: dts: renesas: Add device node for RST module
  2016-05-20  6:57 [PATCH v3 0/6] arm64: renesas: Obtain MD pin values using syscon/regmap Dirk Behme
                   ` (2 preceding siblings ...)
  2016-05-20  6:57 ` [PATCH v3 3/6] clk: renesas: rcar: Obtain MD pin values using syscon/regmap Dirk Behme
@ 2016-05-20  6:57 ` Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 5/6] arm64: dts: renesas: Link CPG to RST using "renesas,modemr" Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 6/6] arm64: renesas: select MFD_SYSCON Dirk Behme
  5 siblings, 0 replies; 7+ messages in thread
From: Dirk Behme @ 2016-05-20  6:57 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Geert Uytterhoeven <geert+renesas@glider.be>

Add a device node for the RST module, which provides reset control.
Declare it to be a system controller (syscon), so other device nodes can
refer to its registers.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
---
 arch/arm64/boot/dts/renesas/r8a7795.dtsi | 5 +++++
 arch/arm64/boot/dts/renesas/r8a7796.dtsi | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
index 26df300..7be6ae0 100644
--- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
@@ -526,6 +526,11 @@
 			#iommu-cells = <1>;
 		};
 
+		rst: reset-controller@e6160000 {
+			compatible = "renesas,r8a7795-rst", "syscon";
+			reg = <0 0xe6160000 0 0x0200>;
+		};
+
 		dmac0: dma-controller@e6700000 {
 			compatible = "renesas,dmac-r8a7795",
 				     "renesas,rcar-dmac";
diff --git a/arch/arm64/boot/dts/renesas/r8a7796.dtsi b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
index 1389528..75ac18d 100644
--- a/arch/arm64/boot/dts/renesas/r8a7796.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
@@ -115,6 +115,11 @@
 			#power-domain-cells = <1>;
 		};
 
+		rst: reset-controller@e6160000 {
+			compatible = "renesas,r8a7796-rst", "syscon";
+			reg = <0 0xe6160000 0 0x0200>;
+		};
+
 		dmac0: dma-controller@e6700000 {
 			/* Empty node for now */
 		};
-- 
2.8.0

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

* [PATCH v3 5/6] arm64: dts: renesas: Link CPG to RST using "renesas,modemr"
  2016-05-20  6:57 [PATCH v3 0/6] arm64: renesas: Obtain MD pin values using syscon/regmap Dirk Behme
                   ` (3 preceding siblings ...)
  2016-05-20  6:57 ` [PATCH v3 4/6] arm64: dts: renesas: Add device node for RST module Dirk Behme
@ 2016-05-20  6:57 ` Dirk Behme
  2016-05-20  6:57 ` [PATCH v3 6/6] arm64: renesas: select MFD_SYSCON Dirk Behme
  5 siblings, 0 replies; 7+ messages in thread
From: Dirk Behme @ 2016-05-20  6:57 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Geert Uytterhoeven <geert+renesas@glider.be>

Add a link from the Clock Pulse Generator node to the Reset Controller
node, so the CPG can read the Mode Monitoring Register (MODEMR) to
obtain the mode pin values.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
---
 arch/arm64/boot/dts/renesas/r8a7795.dtsi | 1 +
 arch/arm64/boot/dts/renesas/r8a7796.dtsi | 1 +
 2 files changed, 2 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
index 7be6ae0..4e05fcc 100644
--- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
@@ -307,6 +307,7 @@
 			clock-names = "extal", "extalr";
 			#clock-cells = <2>;
 			#power-domain-cells = <0>;
+			renesas,modemr = <&rst 0x60>;
 		};
 
 		sysc: system-controller@e6180000 {
diff --git a/arch/arm64/boot/dts/renesas/r8a7796.dtsi b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
index 75ac18d..13d714d 100644
--- a/arch/arm64/boot/dts/renesas/r8a7796.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
@@ -107,6 +107,7 @@
 			clock-names = "extal", "extalr";
 			#clock-cells = <2>;
 			#power-domain-cells = <0>;
+			renesas,modemr = <&rst 0x60>;
 		};
 
 		sysc: system-controller@e6180000 {
-- 
2.8.0

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

* [PATCH v3 6/6] arm64: renesas: select MFD_SYSCON
  2016-05-20  6:57 [PATCH v3 0/6] arm64: renesas: Obtain MD pin values using syscon/regmap Dirk Behme
                   ` (4 preceding siblings ...)
  2016-05-20  6:57 ` [PATCH v3 5/6] arm64: dts: renesas: Link CPG to RST using "renesas,modemr" Dirk Behme
@ 2016-05-20  6:57 ` Dirk Behme
  5 siblings, 0 replies; 7+ messages in thread
From: Dirk Behme @ 2016-05-20  6:57 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Geert Uytterhoeven <geert+renesas@glider.be>

The Clock Pulse Generator (CPG) relies on syscon to obtain the values of
the mode pins.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
---
 arch/arm64/Kconfig.platforms | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
index 2182fd5..4949b6a 100644
--- a/arch/arm64/Kconfig.platforms
+++ b/arch/arm64/Kconfig.platforms
@@ -108,6 +108,7 @@ config ARCH_SHMOBILE
 config ARCH_RENESAS
 	bool "Renesas SoC Platforms"
 	select ARCH_SHMOBILE
+	select MFD_SYSCON
 	select PINCTRL
 	select PM
 	select PM_GENERIC_DOMAINS
-- 
2.8.0

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

end of thread, other threads:[~2016-05-20  6:59 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-20  6:57 [PATCH v3 0/6] arm64: renesas: Obtain MD pin values using syscon/regmap Dirk Behme
2016-05-20  6:57 ` [PATCH v3 1/6] reset: Add renesas,rst DT bindings Dirk Behme
2016-05-20  6:57 ` [PATCH v3 2/6] clk: renesas: cpg-mssr: Document renesas,modemr Dirk Behme
2016-05-20  6:57 ` [PATCH v3 3/6] clk: renesas: rcar: Obtain MD pin values using syscon/regmap Dirk Behme
2016-05-20  6:57 ` [PATCH v3 4/6] arm64: dts: renesas: Add device node for RST module Dirk Behme
2016-05-20  6:57 ` [PATCH v3 5/6] arm64: dts: renesas: Link CPG to RST using "renesas,modemr" Dirk Behme
2016-05-20  6:57 ` [PATCH v3 6/6] arm64: renesas: select MFD_SYSCON Dirk Behme

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.