All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support
@ 2016-05-11  5:29 Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 01/10] boot-mode-reg: Add core Dirk Behme
                   ` (9 more replies)
  0 siblings, 10 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 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/msg45969.html

Besides some minor clean up and fixes, it's rebased against

https://git.kernel.org/cgit/linux/kernel/git/geert/renesas-drivers.git/log/?h=topic/gen3-latest
0ea1cc9f0c9537d3fb42722c188
[WIP] arm64: r8a7796: Integration

and adds support for RCar Gen3. Additionally, it moves the MODEMR
register to device tree instead of hard coding its address.

These patches are available in

https://github.com/dirkbehme/linux-renesas-rcar-gen3/commits/geert/topic/gen3-latest-modereg

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 v2:

* Correct link & subject in introduction patch 0000
* Fix some spelling errors
* Drop the goto in boot_mode_reg_get() and boot_mode_reg_get()
* Convert device tree node to renesas,rcar-rst and use whole reset device
* Add devcie tree node documentation
* Preserve compatibility with old DTBs that don't have the node in DT

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

* [PATCH v2 01/10] boot-mode-reg: Add core
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  7:54   ` Geert Uytterhoeven
  2016-05-11  5:29 ` [PATCH v2 02/10] boot-mode-reg: Add R-Car driver Dirk Behme
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Simon Horman <horms+renesas@verge.net.au>

The motivation for this new module is to add a small frame work to allow
kernel subsystems to obtain boot mode information from a centralised
source using a new, and hopefully soon well-known, API.

The new API consists of two function calls and nothing more:

boot_mode_reg_set: Should be called by platform-specific drivers
                   to register the boot mode register value which
		   they obtain from hardware or otherwise.

boot_mode_reg_get: Should be called by consumers; subsystems that
                   wish to know he boot mode register.

The boot mode register is a 32bit unsigned entity,
the meaning of its values are implementation dependent.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
---
 MAINTAINERS                         |  1 +
 drivers/misc/Kconfig                |  1 +
 drivers/misc/Makefile               |  1 +
 drivers/misc/boot-mode-reg/Kconfig  | 11 ++++++
 drivers/misc/boot-mode-reg/Makefile |  6 +++
 drivers/misc/boot-mode-reg/core.c   | 76 +++++++++++++++++++++++++++++++++++++
 include/misc/boot-mode-reg.h        | 24 ++++++++++++
 7 files changed, 120 insertions(+)
 create mode 100644 drivers/misc/boot-mode-reg/Kconfig
 create mode 100644 drivers/misc/boot-mode-reg/Makefile
 create mode 100644 drivers/misc/boot-mode-reg/core.c
 create mode 100644 include/misc/boot-mode-reg.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 23e68db..e2bf6ea 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -10734,6 +10734,7 @@ S:	Maintained
 F:	Documentation/sh/
 F:	arch/sh/
 F:	drivers/sh/
+F:	drivers/misc/boot-mode-reg/
 
 SUSPEND TO RAM
 M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index a216b46..deba6b6 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -816,4 +816,5 @@ source "drivers/misc/mic/Kconfig"
 source "drivers/misc/genwqe/Kconfig"
 source "drivers/misc/echo/Kconfig"
 source "drivers/misc/cxl/Kconfig"
+source "drivers/misc/boot-mode-reg/Kconfig"
 endmenu
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index b2fb6dbf..d2a8ae4 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -57,3 +57,4 @@ obj-$(CONFIG_ECHO)		+= echo/
 obj-$(CONFIG_VEXPRESS_SYSCFG)	+= vexpress-syscfg.o
 obj-$(CONFIG_CXL_BASE)		+= cxl/
 obj-$(CONFIG_PANEL)             += panel.o
+obj-$(CONFIG_BOOT_MODE_REG_CORE)	+= boot-mode-reg/
diff --git a/drivers/misc/boot-mode-reg/Kconfig b/drivers/misc/boot-mode-reg/Kconfig
new file mode 100644
index 0000000..3c4ddde
--- /dev/null
+++ b/drivers/misc/boot-mode-reg/Kconfig
@@ -0,0 +1,11 @@
+#
+# Boot Mode Register Drivers
+#
+
+config BOOT_MODE_REG_CORE
+	tristate "Boot Mode Register Core Driver"
+	default n
+	depends on ARCH_SHMOBILE || ARCH_RENESAS || COMPILE_TEST
+	help
+	  Say Y here to allow support for drivers to read boot mode
+	  registers and make the value available to other subsystems.
diff --git a/drivers/misc/boot-mode-reg/Makefile b/drivers/misc/boot-mode-reg/Makefile
new file mode 100644
index 0000000..19134b2
--- /dev/null
+++ b/drivers/misc/boot-mode-reg/Makefile
@@ -0,0 +1,6 @@
+
+#
+# Makefile for misc devices that really don't fit anywhere else.
+#
+
+obj-$(CONFIG_BOOT_MODE_REG_CORE)	+= core.o
diff --git a/drivers/misc/boot-mode-reg/core.c b/drivers/misc/boot-mode-reg/core.c
new file mode 100644
index 0000000..983bf4c
--- /dev/null
+++ b/drivers/misc/boot-mode-reg/core.c
@@ -0,0 +1,76 @@
+/*
+ * Boot Mode Register
+ *
+ * Copyright (C) 2015 Simon Horman
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <asm/errno.h>
+
+#include <linux/export.h>
+#include <linux/module.h>
+
+#include <misc/boot-mode-reg.h>
+
+static DEFINE_MUTEX(boot_mode_mutex);
+static bool boot_mode_is_set;
+static u32 boot_mode;
+
+/**
+ * boot_mode_reg_get() - retrieve boot mode register value
+ * @mode: implementation-dependent boot mode register value
+ *
+ * Retrieves the boot mode register value previously registered
+ * using boot_mode_reg_set().
+ *
+ * return: 0 on success
+ */
+int boot_mode_reg_get(u32 *mode)
+{
+	int err = -ENOENT;
+
+	mutex_lock(&boot_mode_mutex);
+	if (boot_mode_is_set) {
+		*mode = boot_mode;
+		err = 0;
+	}
+	mutex_unlock(&boot_mode_mutex);
+	return err;
+}
+EXPORT_SYMBOL_GPL(boot_mode_reg_get);
+
+/**
+ * boot_mode_reg_set() - record boot mode register value
+ * @mode: implementation-dependent boot mode register value
+ *
+ * Records the boot mode register value which may subsequently
+ * be retrieved using boot_mode_reg_get().
+ *
+ * return: 0 on success
+ */
+int boot_mode_reg_set(u32 mode)
+{
+	int err = -EBUSY;
+
+	mutex_lock(&boot_mode_mutex);
+	if (!boot_mode_is_set) {
+		boot_mode = mode;
+		boot_mode_is_set = true;
+		err = 0;
+	}
+	mutex_unlock(&boot_mode_mutex);
+	return err;
+}
+EXPORT_SYMBOL_GPL(boot_mode_reg_set);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Simon Horman <horms@verge.net.au>");
+MODULE_DESCRIPTION("Core Boot Mode Register Driver");
diff --git a/include/misc/boot-mode-reg.h b/include/misc/boot-mode-reg.h
new file mode 100644
index 0000000..34ee653
--- /dev/null
+++ b/include/misc/boot-mode-reg.h
@@ -0,0 +1,24 @@
+/*
+ * Boot Mode Register
+ *
+ * Copyright (C) 2015 Simon Horman
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _BOOT_MODE_REG_H
+#define _BOOT_MODE_REG_H
+
+#include <linux/types.h>
+
+int boot_mode_reg_get(u32 *mode);
+int boot_mode_reg_set(u32 mode);
+
+#endif
-- 
2.8.0

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

* [PATCH v2 02/10] boot-mode-reg: Add R-Car driver
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 01/10] boot-mode-reg: Add core Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 03/10] arm: renesas: rcar-gen2: Obtain MD pin value using boot-mode-reg Dirk Behme
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc

From: Simon Horman <horms+renesas@verge.net.au>

Boot mode register driver for R-Car.

If running on a supported platform it reads the boot mode register and
records it using the boot mode register infrastructure established by an
earlier patch.

rcar_init_boot_mode() is exported allow it to be explicitly called in
cases where the boot mode register is needed before init calls are made.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
 drivers/misc/boot-mode-reg/Kconfig  |  8 +++++
 drivers/misc/boot-mode-reg/Makefile |  1 +
 drivers/misc/boot-mode-reg/rcar.c   | 60 +++++++++++++++++++++++++++++++++++++
 include/misc/boot-mode-reg.h        |  3 ++
 4 files changed, 72 insertions(+)
 create mode 100644 drivers/misc/boot-mode-reg/rcar.c

diff --git a/drivers/misc/boot-mode-reg/Kconfig b/drivers/misc/boot-mode-reg/Kconfig
index 3c4ddde..3868c36 100644
--- a/drivers/misc/boot-mode-reg/Kconfig
+++ b/drivers/misc/boot-mode-reg/Kconfig
@@ -9,3 +9,11 @@ config BOOT_MODE_REG_CORE
 	help
 	  Say Y here to allow support for drivers to read boot mode
 	  registers and make the value available to other subsystems.
+
+config BOOT_MODE_REG_RCAR
+	tristate "Boot Mode Register Driver for Renesas R-Car SoCs"
+	default n
+	select BOOT_MODE_REG_CORE
+	help
+	  Say Y here to allow support for reading the boot mode register
+	  on Renesas R-Car SoCs.
diff --git a/drivers/misc/boot-mode-reg/Makefile b/drivers/misc/boot-mode-reg/Makefile
index 19134b2..5469a1d 100644
--- a/drivers/misc/boot-mode-reg/Makefile
+++ b/drivers/misc/boot-mode-reg/Makefile
@@ -4,3 +4,4 @@
 #
 
 obj-$(CONFIG_BOOT_MODE_REG_CORE)	+= core.o
+obj-$(CONFIG_BOOT_MODE_REG_RCAR)	+= rcar.o
diff --git a/drivers/misc/boot-mode-reg/rcar.c b/drivers/misc/boot-mode-reg/rcar.c
new file mode 100644
index 0000000..c3b778fe
--- /dev/null
+++ b/drivers/misc/boot-mode-reg/rcar.c
@@ -0,0 +1,60 @@
+/*
+ * R-Car Boot Mode Register Driver
+ *
+ * Copyright (C) 2015 Simon Horman
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of.h>
+
+#include <misc/boot-mode-reg.h>
+
+#define MODEMR 0xe6160060
+
+static int __init rcar_read_mode_pins(void)
+{
+	void __iomem *modemr;
+	int err = -ENOMEM;
+	static u32 mode;
+
+	modemr = ioremap_nocache(MODEMR, 4);
+	if (!modemr) {
+		pr_err("failed to map boot mode register");
+		goto err;
+	}
+	mode = ioread32(modemr);
+	iounmap(modemr);
+
+	err = boot_mode_reg_set(mode);
+err:
+	if (err)
+		pr_err("failed to initialise boot mode");
+	return err;
+}
+
+int __init rcar_init_boot_mode(void)
+{
+	if (of_machine_is_compatible("renesas,r8a7790") ||
+	    of_machine_is_compatible("renesas,r8a7791") ||
+	    of_machine_is_compatible("renesas,r8a7792") ||
+	    of_machine_is_compatible("renesas,r8a7793") ||
+	    of_machine_is_compatible("renesas,r8a7794"))
+		return rcar_read_mode_pins();
+
+	return 0;
+}
+early_initcall(rcar_init_boot_mode);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Simon Horman <horms@verge.net.au>");
+MODULE_DESCRIPTION("R-Car Boot Mode Register Driver");
diff --git a/include/misc/boot-mode-reg.h b/include/misc/boot-mode-reg.h
index 34ee653..35d7f57 100644
--- a/include/misc/boot-mode-reg.h
+++ b/include/misc/boot-mode-reg.h
@@ -21,4 +21,7 @@
 int boot_mode_reg_get(u32 *mode);
 int boot_mode_reg_set(u32 mode);
 
+/* Allow explicit initialisation before initcalls */
+int rcar_init_boot_mode(void);
+
 #endif
-- 
2.8.0

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

* [PATCH v2 03/10] arm: renesas: rcar-gen2: Obtain MD pin value using boot-mode-reg
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 01/10] boot-mode-reg: Add core Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 02/10] boot-mode-reg: Add R-Car driver Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 04/10] arm: renesas: r8a7791: " Dirk Behme
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc

From: Simon Horman <horms+renesas@verge.net.au>

Use new boot mode reg infrastructure to obtain the mode pin
value for initialising arch timer for R-Car Gen2 SoCs.

Subsequent patches will remove other calls to rcar_gen2_read_mode_pins()
and in turn that function.

rcar_init_boot_mode() is called to implicitly initialise
the R-Car Gen2 boot mod register driver as rcar_gen2_timer_init()
is run before initcalls.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
 arch/arm/mach-shmobile/Kconfig           |  1 +
 arch/arm/mach-shmobile/setup-rcar-gen2.c | 24 +++++++++++++++++++++---
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig
index fe4ccb5..314dcaa 100644
--- a/arch/arm/mach-shmobile/Kconfig
+++ b/arch/arm/mach-shmobile/Kconfig
@@ -23,6 +23,7 @@ config ARCH_RCAR_GEN2
 	select RENESAS_IRQC
 	select SYS_SUPPORTS_SH_CMT
 	select PCI_DOMAINS if PCI
+	select BOOT_MODE_REG_RCAR
 
 config ARCH_RMOBILE
 	bool
diff --git a/arch/arm/mach-shmobile/setup-rcar-gen2.c b/arch/arm/mach-shmobile/setup-rcar-gen2.c
index 1c6fd11..a45b05b 100644
--- a/arch/arm/mach-shmobile/setup-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/setup-rcar-gen2.c
@@ -24,6 +24,7 @@
 #include <linux/memblock.h>
 #include <linux/of.h>
 #include <linux/of_fdt.h>
+#include <misc/boot-mode-reg.h>
 #include <asm/mach/arch.h>
 #include "common.h"
 #include "rcar-gen2.h"
@@ -49,13 +50,19 @@ u32 rcar_gen2_read_mode_pins(void)
 #define CNTCR 0
 #define CNTFID0 0x20
 
-void __init rcar_gen2_timer_init(void)
+void __init rcar_gen2_timer_init_for_arch_timer(void)
 {
-	u32 mode = rcar_gen2_read_mode_pins();
 #ifdef CONFIG_ARM_ARCH_TIMER
 	void __iomem *base;
 	int extal_mhz = 0;
-	u32 freq;
+	u32 freq, mode;
+	int err;
+
+	err = boot_mode_reg_get(&mode);
+	if (err) {
+		pr_err("%s: failed obtain boot mode\n", __func__);
+		return;
+	}
 
 	if (of_machine_is_compatible("renesas,r8a7794")) {
 		freq = 260000000 / 8;	/* ZS / 8 */
@@ -126,7 +133,18 @@ void __init rcar_gen2_timer_init(void)
 
 	iounmap(base);
 #endif /* CONFIG_ARM_ARCH_TIMER */
+}
+
+void __init rcar_gen2_timer_init(void)
+{
+	int err;
+	u32 mode = rcar_gen2_read_mode_pins();
+
+	err = rcar_init_boot_mode();
+	if (err)
+		pr_err("Could not initialise boot mode register driver\n");
 
+	rcar_gen2_timer_init_for_arch_timer();
 	rcar_gen2_clocks_init(mode);
 	clocksource_probe();
 }
-- 
2.8.0

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

* [PATCH v2 04/10] arm: renesas: r8a7791: Obtain MD pin value using boot-mode-reg
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
                   ` (2 preceding siblings ...)
  2016-05-11  5:29 ` [PATCH v2 03/10] arm: renesas: rcar-gen2: Obtain MD pin value using boot-mode-reg Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 05/10] clk: renesas: rcar-gen2: " Dirk Behme
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Simon Horman <horms+renesas@verge.net.au>

Use new boot mode reg infrastructure to obtain the mode pin
value when initialising SMP for r8a7791 SoC.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
---
 arch/arm/mach-shmobile/smp-r8a7791.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-shmobile/smp-r8a7791.c b/arch/arm/mach-shmobile/smp-r8a7791.c
index 2d6417a..00d794d 100644
--- a/arch/arm/mach-shmobile/smp-r8a7791.c
+++ b/arch/arm/mach-shmobile/smp-r8a7791.c
@@ -20,6 +20,8 @@
 
 #include <asm/smp_plat.h>
 
+#include <misc/boot-mode-reg.h>
+
 #include "common.h"
 #include "platsmp-apmu.h"
 #include "r8a7791.h"
@@ -45,8 +47,17 @@ static void __init r8a7791_smp_prepare_cpus(unsigned int max_cpus)
 static int r8a7791_smp_boot_secondary(unsigned int cpu,
 				      struct task_struct *idle)
 {
+	int err;
+	u32 mode;
+
+	err = boot_mode_reg_get(&mode);
+	if (err) {
+		pr_warn("Unable to retrieve boot mode register\n");
+		return err;
+	}
+
 	/* Error out when hardware debug mode is enabled */
-	if (rcar_gen2_read_mode_pins() & BIT(21)) {
+	if (mode & BIT(21)) {
 		pr_warn("Unable to boot CPU%u when MD21 is set\n", cpu);
 		return -ENOTSUPP;
 	}
-- 
2.8.0

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

* [PATCH v2 05/10] clk: renesas: rcar-gen2: Obtain MD pin value using boot-mode-reg
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
                   ` (3 preceding siblings ...)
  2016-05-11  5:29 ` [PATCH v2 04/10] arm: renesas: r8a7791: " Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 06/10] arm: renesas: rcar-gen2: Remove unused rcar_gen2_read_mode_pins() Dirk Behme
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Simon Horman <horms+renesas@verge.net.au>

Use new boot mode reg infrastructure to obtain the mode pin
value for initializing clocks for for R-Car Gen2 SoCs.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
---
 arch/arm/mach-shmobile/setup-rcar-gen2.c |  3 +--
 drivers/clk/renesas/clk-rcar-gen2.c      | 12 ++++++++++--
 include/linux/clk/renesas.h              |  2 +-
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-shmobile/setup-rcar-gen2.c b/arch/arm/mach-shmobile/setup-rcar-gen2.c
index a45b05b..2af84d8 100644
--- a/arch/arm/mach-shmobile/setup-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/setup-rcar-gen2.c
@@ -138,14 +138,13 @@ void __init rcar_gen2_timer_init_for_arch_timer(void)
 void __init rcar_gen2_timer_init(void)
 {
 	int err;
-	u32 mode = rcar_gen2_read_mode_pins();
 
 	err = rcar_init_boot_mode();
 	if (err)
 		pr_err("Could not initialise boot mode register driver\n");
 
 	rcar_gen2_timer_init_for_arch_timer();
-	rcar_gen2_clocks_init(mode);
+	rcar_gen2_clocks_init();
 	clocksource_probe();
 }
 
diff --git a/drivers/clk/renesas/clk-rcar-gen2.c b/drivers/clk/renesas/clk-rcar-gen2.c
index 00e6aba..0109878 100644
--- a/drivers/clk/renesas/clk-rcar-gen2.c
+++ b/drivers/clk/renesas/clk-rcar-gen2.c
@@ -20,6 +20,8 @@
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 
+#include <misc/boot-mode-reg.h>
+
 struct rcar_gen2_cpg {
 	struct clk_onecell_data data;
 	spinlock_t lock;
@@ -421,9 +423,15 @@ static void __init rcar_gen2_cpg_clocks_init(struct device_node *np)
 CLK_OF_DECLARE(rcar_gen2_cpg_clks, "renesas,rcar-gen2-cpg-clocks",
 	       rcar_gen2_cpg_clocks_init);
 
-void __init rcar_gen2_clocks_init(u32 mode)
+void __init rcar_gen2_clocks_init(void)
 {
-	cpg_mode = mode;
+	int err;
+
+	err = boot_mode_reg_get(&cpg_mode);
+	if (err) {
+		pr_err("%s: failed to obtain boot mode\n", __func__);
+		return;
+	}
 
 	of_clk_init(NULL);
 }
diff --git a/include/linux/clk/renesas.h b/include/linux/clk/renesas.h
index ba6fa41..d4a1518 100644
--- a/include/linux/clk/renesas.h
+++ b/include/linux/clk/renesas.h
@@ -22,7 +22,7 @@ struct generic_pm_domain;
 
 void r8a7778_clocks_init(u32 mode);
 void r8a7779_clocks_init(u32 mode);
-void rcar_gen2_clocks_init(u32 mode);
+void rcar_gen2_clocks_init(void);
 
 void cpg_mstp_add_clk_domain(struct device_node *np);
 #ifdef CONFIG_CLK_RENESAS_CPG_MSTP
-- 
2.8.0

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

* [PATCH v2 06/10] arm: renesas: rcar-gen2: Remove unused rcar_gen2_read_mode_pins()
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
                   ` (4 preceding siblings ...)
  2016-05-11  5:29 ` [PATCH v2 05/10] clk: renesas: rcar-gen2: " Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 07/10] arm: renesas: rcar-gen3: Make boot-mode-reg Gen3 compatible Dirk Behme
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc

From: Simon Horman <horms+renesas@verge.net.au>

The new boot mode reg infrastructure is now used in
place of rcar_gen2_read_mode_pins so the latter may now be removed.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
 arch/arm/mach-shmobile/rcar-gen2.h       |  1 -
 arch/arm/mach-shmobile/setup-rcar-gen2.c | 18 ------------------
 2 files changed, 19 deletions(-)

diff --git a/arch/arm/mach-shmobile/rcar-gen2.h b/arch/arm/mach-shmobile/rcar-gen2.h
index 8a66b4a..4c4ec37 100644
--- a/arch/arm/mach-shmobile/rcar-gen2.h
+++ b/arch/arm/mach-shmobile/rcar-gen2.h
@@ -3,7 +3,6 @@
 
 void rcar_gen2_timer_init(void);
 #define MD(nr) BIT(nr)
-u32 rcar_gen2_read_mode_pins(void);
 void rcar_gen2_reserve(void);
 void rcar_gen2_pm_init(void);
 
diff --git a/arch/arm/mach-shmobile/setup-rcar-gen2.c b/arch/arm/mach-shmobile/setup-rcar-gen2.c
index 2af84d8..5942b93 100644
--- a/arch/arm/mach-shmobile/setup-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/setup-rcar-gen2.c
@@ -29,24 +29,6 @@
 #include "common.h"
 #include "rcar-gen2.h"
 
-#define MODEMR 0xe6160060
-
-u32 rcar_gen2_read_mode_pins(void)
-{
-	static u32 mode;
-	static bool mode_valid;
-
-	if (!mode_valid) {
-		void __iomem *modemr = ioremap_nocache(MODEMR, 4);
-		BUG_ON(!modemr);
-		mode = ioread32(modemr);
-		iounmap(modemr);
-		mode_valid = true;
-	}
-
-	return mode;
-}
-
 #define CNTCR 0
 #define CNTFID0 0x20
 
-- 
2.8.0

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

* [PATCH v2 07/10] arm: renesas: rcar-gen3: Make boot-mode-reg Gen3 compatible
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
                   ` (5 preceding siblings ...)
  2016-05-11  5:29 ` [PATCH v2 06/10] arm: renesas: rcar-gen2: Remove unused rcar_gen2_read_mode_pins() Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 08/10] clk: renesas: rcar-gen3: Obtain MD pin value using boot-mode-reg Dirk Behme
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Dirk Behme <dirk.behme@gmail.com>

The boot mode register is available on Renesas Gen3, too.
Use the same driver on Gen3 as on Gen2.

Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
---
 arch/arm64/Kconfig.platforms      | 1 +
 drivers/misc/boot-mode-reg/rcar.c | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
index fda93a2..591ab8f 100644
--- a/arch/arm64/Kconfig.platforms
+++ b/arch/arm64/Kconfig.platforms
@@ -106,6 +106,7 @@ config ARCH_SHMOBILE
 config ARCH_RENESAS
 	bool "Renesas SoC Platforms"
 	select ARCH_SHMOBILE
+	select BOOT_MODE_REG_RCAR
 	select PINCTRL
 	select PM
 	select PM_GENERIC_DOMAINS
diff --git a/drivers/misc/boot-mode-reg/rcar.c b/drivers/misc/boot-mode-reg/rcar.c
index c3b778fe..e994980 100644
--- a/drivers/misc/boot-mode-reg/rcar.c
+++ b/drivers/misc/boot-mode-reg/rcar.c
@@ -48,7 +48,9 @@ int __init rcar_init_boot_mode(void)
 	    of_machine_is_compatible("renesas,r8a7791") ||
 	    of_machine_is_compatible("renesas,r8a7792") ||
 	    of_machine_is_compatible("renesas,r8a7793") ||
-	    of_machine_is_compatible("renesas,r8a7794"))
+	    of_machine_is_compatible("renesas,r8a7794") ||
+	    of_machine_is_compatible("renesas,r8a7795") ||
+	    of_machine_is_compatible("renesas,r8a7796"))
 		return rcar_read_mode_pins();
 
 	return 0;
-- 
2.8.0

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

* [PATCH v2 08/10] clk: renesas: rcar-gen3: Obtain MD pin value using boot-mode-reg
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
                   ` (6 preceding siblings ...)
  2016-05-11  5:29 ` [PATCH v2 07/10] arm: renesas: rcar-gen3: Make boot-mode-reg Gen3 compatible Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support Dirk Behme
  2016-05-11  5:29 ` [PATCH v2 10/10] boot-mode-reg: Convert to device tree Dirk Behme
  9 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Dirk Behme <dirk.behme@gmail.com>

Use new boot mode reg infrastructure to obtain the mode pin
value for initialising clocks for for R-Car Gen3 SoCs.

Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
---
 drivers/clk/renesas/r8a7795-cpg-mssr.c | 11 ++++++++++-
 drivers/clk/renesas/r8a7796-cpg-mssr.c | 11 ++++++++++-
 drivers/clk/renesas/rcar-gen3-cpg.c    | 17 -----------------
 drivers/clk/renesas/rcar-gen3-cpg.h    |  1 -
 4 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/clk/renesas/r8a7795-cpg-mssr.c b/drivers/clk/renesas/r8a7795-cpg-mssr.c
index e53aff5..23bd58f 100644
--- a/drivers/clk/renesas/r8a7795-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c
@@ -18,6 +18,8 @@
 
 #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
 
+#include <misc/boot-mode-reg.h>
+
 #include "renesas-cpg-mssr.h"
 #include "rcar-gen3-cpg.h"
 
@@ -294,7 +296,14 @@ 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 err;
+
+	err = boot_mode_reg_get(&cpg_mode);
+	if (err) {
+		dev_err(dev, "Failed obtain boot mode: %i\n", err);
+		return err;
+	}
 
 	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..2ecb135 100644
--- a/drivers/clk/renesas/r8a7796-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c
@@ -19,6 +19,8 @@
 
 #include <dt-bindings/clock/r8a7796-cpg-mssr.h>
 
+#include <misc/boot-mode-reg.h>
+
 #include "renesas-cpg-mssr.h"
 #include "rcar-gen3-cpg.h"
 
@@ -159,7 +161,14 @@ 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 err;
+
+	err = boot_mode_reg_get(&cpg_mode);
+	if (err) {
+		dev_err(dev, "Failed obtain boot mode: %i\n", err);
+		return err;
+	}
 
 	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);
-- 
2.8.0

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

* [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
                   ` (7 preceding siblings ...)
  2016-05-11  5:29 ` [PATCH v2 08/10] clk: renesas: rcar-gen3: Obtain MD pin value using boot-mode-reg Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  2016-05-11  8:06   ` Geert Uytterhoeven
  2016-05-11  5:29 ` [PATCH v2 10/10] boot-mode-reg: Convert to device tree Dirk Behme
  9 siblings, 1 reply; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Dirk Behme <dirk.behme@gmail.com>

The reset module on RCar Gen2 and Gen3 SoCs contains various reset handling
related registers. Their content is implementation dependent.

Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
---
 .../devicetree/bindings/misc/renesas,rcar-rst.txt         | 15 +++++++++++++++
 arch/arm/boot/dts/r8a7790.dtsi                            |  5 +++++
 arch/arm/boot/dts/r8a7791.dtsi                            |  5 +++++
 arch/arm/boot/dts/r8a7793.dtsi                            |  5 +++++
 arch/arm/boot/dts/r8a7794.dtsi                            |  6 ++++++
 arch/arm64/boot/dts/renesas/r8a7795.dtsi                  |  5 +++++
 arch/arm64/boot/dts/renesas/r8a7796.dtsi                  |  5 +++++
 7 files changed, 46 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt

diff --git a/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
new file mode 100644
index 0000000..88695c4
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
@@ -0,0 +1,15 @@
+Renesas RCar r8a779x reset module
+-----------------------------------------------------
+This binding defines the reset module found on Renesas RCar r8a779x
+SoCs. The reset module contains several reset related registers,
+the meaning of them is implementation dependent.
+
+Required properties:
+- compatible : "renesas,rcar-rst"
+- reg : Location and size of the reset module
+
+Example:
+	reset-controller@e6160000 {
+		compatible = "renesas,rcar-rst";
+		reg = <0 0xe6160000 0 0x200>;
+	};
\ No newline at end of file
diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi
index 83cf23c..d9b86c4 100644
--- a/arch/arm/boot/dts/r8a7790.dtsi
+++ b/arch/arm/boot/dts/r8a7790.dtsi
@@ -1102,6 +1102,11 @@
 			#power-domain-cells = <0>;
 		};
 
+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
 		/* Variable factor clocks */
 		sd2_clk: sd2@e6150078 {
 			compatible = "renesas,r8a7790-div6-clock", "renesas,cpg-div6-clock";
diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
index db67e34..9c7a210 100644
--- a/arch/arm/boot/dts/r8a7791.dtsi
+++ b/arch/arm/boot/dts/r8a7791.dtsi
@@ -1122,6 +1122,11 @@
 			#power-domain-cells = <0>;
 		};
 
+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
 		/* Variable factor clocks */
 		sd2_clk: sd2@e6150078 {
 			compatible = "renesas,r8a7791-div6-clock", "renesas,cpg-div6-clock";
diff --git a/arch/arm/boot/dts/r8a7793.dtsi b/arch/arm/boot/dts/r8a7793.dtsi
index 1dd6d20..31858c6 100644
--- a/arch/arm/boot/dts/r8a7793.dtsi
+++ b/arch/arm/boot/dts/r8a7793.dtsi
@@ -933,6 +933,11 @@
 			#power-domain-cells = <0>;
 		};
 
+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
 		/* Variable factor clocks */
 		sd2_clk: sd2@e6150078 {
 			compatible = "renesas,r8a7793-div6-clock",
diff --git a/arch/arm/boot/dts/r8a7794.dtsi b/arch/arm/boot/dts/r8a7794.dtsi
index f334a3a..c419ca6 100644
--- a/arch/arm/boot/dts/r8a7794.dtsi
+++ b/arch/arm/boot/dts/r8a7794.dtsi
@@ -932,6 +932,12 @@
 					     "rcan";
 			#power-domain-cells = <0>;
 		};
+
+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
 		/* Variable factor clocks */
 		sd2_clk: sd2@e6150078 {
 			compatible = "renesas,r8a7794-div6-clock", "renesas,cpg-div6-clock";
diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
index 7181db0..1266975 100644
--- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
@@ -309,6 +309,11 @@
 			#power-domain-cells = <0>;
 		};
 
+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
 		sysc: system-controller@e6180000 {
 			compatible = "renesas,r8a7795-sysc";
 			reg = <0 0xe6180000 0 0x0400>;
diff --git a/arch/arm64/boot/dts/renesas/r8a7796.dtsi b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
index 1389528..c3d6075 100644
--- a/arch/arm64/boot/dts/renesas/r8a7796.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
@@ -109,6 +109,11 @@
 			#power-domain-cells = <0>;
 		};
 
+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
 		sysc: system-controller@e6180000 {
 			compatible = "renesas,r8a7796-sysc";
 			reg = <0 0xe6180000 0 0x0400>;
-- 
2.8.0

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

* [PATCH v2 10/10] boot-mode-reg: Convert to device tree
  2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
                   ` (8 preceding siblings ...)
  2016-05-11  5:29 ` [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support Dirk Behme
@ 2016-05-11  5:29 ` Dirk Behme
  9 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  5:29 UTC (permalink / raw)
  To: Geert Uytterhoeven, Simon Horman, linux-renesas-soc; +Cc: Dirk Behme

From: Dirk Behme <dirk.behme@gmail.com>

Instead of using a hard coded address in the driver for the boot mode
register, optain it from the device tree.

Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
---
 drivers/misc/boot-mode-reg/rcar.c | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/drivers/misc/boot-mode-reg/rcar.c b/drivers/misc/boot-mode-reg/rcar.c
index e994980..0b23352 100644
--- a/drivers/misc/boot-mode-reg/rcar.c
+++ b/drivers/misc/boot-mode-reg/rcar.c
@@ -16,24 +16,37 @@
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 
 #include <misc/boot-mode-reg.h>
 
-#define MODEMR 0xe6160060
+#define RCAR_RST_BASE 0xe6160000
+#define RCAR_RST_SIZE 0x200
+#define MODEMR 0x60
 
 static int __init rcar_read_mode_pins(void)
 {
-	void __iomem *modemr;
+	void __iomem *reset;
+	struct device_node *np;
 	int err = -ENOMEM;
 	static u32 mode;
 
-	modemr = ioremap_nocache(MODEMR, 4);
-	if (!modemr) {
-		pr_err("failed to map boot mode register");
+	np = of_find_compatible_node(NULL, NULL, "renesas,rcar-rst");
+	if (np)
+		reset = of_iomap(np, 0);
+	else {
+		pr_warn("can't find renesas rcar-rst device node");
+		reset = ioremap_nocache(RCAR_RST_BASE, RCAR_RST_SIZE);
+	}
+
+	if (!reset) {
+		pr_err("failed to map reset registers");
+		of_node_put(np);
 		goto err;
 	}
-	mode = ioread32(modemr);
-	iounmap(modemr);
+	mode = ioread32(reset + MODEMR);
+	iounmap(reset);
+	of_node_put(np);
 
 	err = boot_mode_reg_set(mode);
 err:
-- 
2.8.0

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

* Re: [PATCH v2 01/10] boot-mode-reg: Add core
  2016-05-11  5:29 ` [PATCH v2 01/10] boot-mode-reg: Add core Dirk Behme
@ 2016-05-11  7:54   ` Geert Uytterhoeven
  2016-05-11  8:39     ` Dirk Behme
  0 siblings, 1 reply; 22+ messages in thread
From: Geert Uytterhoeven @ 2016-05-11  7:54 UTC (permalink / raw)
  To: Dirk Behme
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Dirk,

On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
> --- /dev/null
> +++ b/drivers/misc/boot-mode-reg/core.c

> +/**
> + * boot_mode_reg_set() - record boot mode register value
> + * @mode: implementation-dependent boot mode register value
> + *
> + * Records the boot mode register value which may subsequently
> + * be retrieved using boot_mode_reg_get().
> + *
> + * return: 0 on success
> + */
> +int boot_mode_reg_set(u32 mode)
> +{
> +       int err = -EBUSY;
> +
> +       mutex_lock(&boot_mode_mutex);
> +       if (!boot_mode_is_set) {

You've dropped the check for calling this function a subsequent time with
a different value of mode?

> +               boot_mode = mode;
> +               boot_mode_is_set = true;
> +               err = 0;
> +       }
> +       mutex_unlock(&boot_mode_mutex);
> +       return err;
> +}

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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] 22+ messages in thread

* Re: [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support
  2016-05-11  5:29 ` [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support Dirk Behme
@ 2016-05-11  8:06   ` Geert Uytterhoeven
  2016-05-11 11:56     ` Dirk Behme
  0 siblings, 1 reply; 22+ messages in thread
From: Geert Uytterhoeven @ 2016-05-11  8:06 UTC (permalink / raw)
  To: Dirk Behme
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Dirk,

On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
> @@ -0,0 +1,15 @@
> +Renesas RCar r8a779x reset module
> +-----------------------------------------------------
> +This binding defines the reset module found on Renesas RCar r8a779x
> +SoCs. The reset module contains several reset related registers,
> +the meaning of them is implementation dependent.
> +
> +Required properties:
> +- compatible : "renesas,rcar-rst"
> +- reg : Location and size of the reset module
> +
> +Example:
> +       reset-controller@e6160000 {
> +               compatible = "renesas,rcar-rst";
> +               reg = <0 0xe6160000 0 0x200>;
> +       };

While I understand you want to match on a single comptible value, the RST
module itself highly depends on the actual SoC.
Furthermore, R-Car Gen1 doesn't have RST.

Hence I'd go for requiring 2 compatible values:
  - An SoC-specific one, e.g. "renesas,r8a7795-rst",
  - A family-specific one, e.g. "renesas,rcar-gen3-rst".

Your driver code can match against the two family-specific compatible values
using of_find_matching_node().

> \ No newline at end of file

Oops.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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] 22+ messages in thread

* Re: [PATCH v2 01/10] boot-mode-reg: Add core
  2016-05-11  7:54   ` Geert Uytterhoeven
@ 2016-05-11  8:39     ` Dirk Behme
  2016-05-11  8:41       ` Geert Uytterhoeven
  0 siblings, 1 reply; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  8:39 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Geert,

On 11.05.2016 09:54, Geert Uytterhoeven wrote:
> Hi Dirk,
>
> On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
>> --- /dev/null
>> +++ b/drivers/misc/boot-mode-reg/core.c
>
>> +/**
>> + * boot_mode_reg_set() - record boot mode register value
>> + * @mode: implementation-dependent boot mode register value
>> + *
>> + * Records the boot mode register value which may subsequently
>> + * be retrieved using boot_mode_reg_get().
>> + *
>> + * return: 0 on success
>> + */
>> +int boot_mode_reg_set(u32 mode)
>> +{
>> +       int err = -EBUSY;
>> +
>> +       mutex_lock(&boot_mode_mutex);
>> +       if (!boot_mode_is_set) {
>
> You've dropped the check for calling this function a subsequent time with
> a different value of mode?


Sometimes inverting 'complex' if statements is not that easy ;)

You mean

if (!boot_mode_is_set || boot_mode != mode)

?

Best regards

Dirk

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

* Re: [PATCH v2 01/10] boot-mode-reg: Add core
  2016-05-11  8:39     ` Dirk Behme
@ 2016-05-11  8:41       ` Geert Uytterhoeven
  2016-05-11  8:55         ` Dirk Behme
  0 siblings, 1 reply; 22+ messages in thread
From: Geert Uytterhoeven @ 2016-05-11  8:41 UTC (permalink / raw)
  To: Dirk Behme
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Dirk,

On Wed, May 11, 2016 at 10:39 AM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
> On 11.05.2016 09:54, Geert Uytterhoeven wrote:
>> On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com>
>> wrote:
>>>
>>> --- /dev/null
>>> +++ b/drivers/misc/boot-mode-reg/core.c
>>
>>> +/**
>>> + * boot_mode_reg_set() - record boot mode register value
>>> + * @mode: implementation-dependent boot mode register value
>>> + *
>>> + * Records the boot mode register value which may subsequently
>>> + * be retrieved using boot_mode_reg_get().
>>> + *
>>> + * return: 0 on success
>>> + */
>>> +int boot_mode_reg_set(u32 mode)
>>> +{
>>> +       int err = -EBUSY;
>>> +
>>> +       mutex_lock(&boot_mode_mutex);
>>> +       if (!boot_mode_is_set) {
>>
>> You've dropped the check for calling this function a subsequent time with
>> a different value of mode?
>
> Sometimes inverting 'complex' if statements is not that easy ;)
>
> You mean
>
> if (!boot_mode_is_set || boot_mode != mode)

No, De Morgan says

        if (!boot_mode_is_set || boot_mode == mode)

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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] 22+ messages in thread

* Re: [PATCH v2 01/10] boot-mode-reg: Add core
  2016-05-11  8:41       ` Geert Uytterhoeven
@ 2016-05-11  8:55         ` Dirk Behme
  2016-05-11  9:12           ` Geert Uytterhoeven
  0 siblings, 1 reply; 22+ messages in thread
From: Dirk Behme @ 2016-05-11  8:55 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Geert,

On 11.05.2016 10:41, Geert Uytterhoeven wrote:
> Hi Dirk,
>
> On Wed, May 11, 2016 at 10:39 AM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
>> On 11.05.2016 09:54, Geert Uytterhoeven wrote:
>>> On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com>
>>> wrote:
>>>>
>>>> --- /dev/null
>>>> +++ b/drivers/misc/boot-mode-reg/core.c
>>>
>>>> +/**
>>>> + * boot_mode_reg_set() - record boot mode register value
>>>> + * @mode: implementation-dependent boot mode register value
>>>> + *
>>>> + * Records the boot mode register value which may subsequently
>>>> + * be retrieved using boot_mode_reg_get().
>>>> + *
>>>> + * return: 0 on success
>>>> + */
>>>> +int boot_mode_reg_set(u32 mode)
>>>> +{
>>>> +       int err = -EBUSY;
>>>> +
>>>> +       mutex_lock(&boot_mode_mutex);
>>>> +       if (!boot_mode_is_set) {
>>>
>>> You've dropped the check for calling this function a subsequent time with
>>> a different value of mode?
>>
>> Sometimes inverting 'complex' if statements is not that easy ;)
>>
>> You mean
>>
>> if (!boot_mode_is_set || boot_mode != mode)
>
> No, De Morgan says
>
>         if (!boot_mode_is_set || boot_mode == mode)


Hmm, sorry if I don't have enough coffee today ;)

But why should we do

if (... boot_mode == mode)
	boot_mode = mode;

?

Or in other words:

We want to execute the if code if

boot_mode_is_set is false

or

boot_mode is not equal mode, i.e. mode has changed

?


Best regards

Dirk

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

* Re: [PATCH v2 01/10] boot-mode-reg: Add core
  2016-05-11  8:55         ` Dirk Behme
@ 2016-05-11  9:12           ` Geert Uytterhoeven
  0 siblings, 0 replies; 22+ messages in thread
From: Geert Uytterhoeven @ 2016-05-11  9:12 UTC (permalink / raw)
  To: Dirk Behme
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Dirk,

On Wed, May 11, 2016 at 10:55 AM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
> On 11.05.2016 10:41, Geert Uytterhoeven wrote:
>> On Wed, May 11, 2016 at 10:39 AM, Dirk Behme <dirk.behme@de.bosch.com>
>> wrote:
>>> On 11.05.2016 09:54, Geert Uytterhoeven wrote:
>>>> On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com>
>>>> wrote:
>>>>> --- /dev/null
>>>>> +++ b/drivers/misc/boot-mode-reg/core.c
>>>>> +/**
>>>>> + * boot_mode_reg_set() - record boot mode register value
>>>>> + * @mode: implementation-dependent boot mode register value
>>>>> + *
>>>>> + * Records the boot mode register value which may subsequently
>>>>> + * be retrieved using boot_mode_reg_get().
>>>>> + *
>>>>> + * return: 0 on success
>>>>> + */
>>>>> +int boot_mode_reg_set(u32 mode)
>>>>> +{
>>>>> +       int err = -EBUSY;
>>>>> +
>>>>> +       mutex_lock(&boot_mode_mutex);
>>>>> +       if (!boot_mode_is_set) {
>>>>
>>>> You've dropped the check for calling this function a subsequent time
>>>> with
>>>> a different value of mode?
>>>
>>> Sometimes inverting 'complex' if statements is not that easy ;)
>>>
>>> You mean
>>>
>>> if (!boot_mode_is_set || boot_mode != mode)
>>
>>
>> No, De Morgan says
>>
>>         if (!boot_mode_is_set || boot_mode == mode)
>
> Hmm, sorry if I don't have enough coffee today ;)
>
> But why should we do
>
> if (... boot_mode == mode)
>         boot_mode = mode;
>
> ?
>
> Or in other words:
>
> We want to execute the if code if
>
> boot_mode_is_set is false
>
> or
>
> boot_mode is not equal mode, i.e. mode has changed
>
> ?

We want to fail if the mode has changed.
Doing the assignment a second time doesn't hurt.

But as this seems to hurt readability, the better solution may be:

        if (!boot_mode_is_set) {
                boot_mode = mode;
                boot_mode_is_set = true;
                err = 0;
        } else if (boot_mode == mode) {
               err = 0;
        } else {
               err = -EBUSY;
        }

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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] 22+ messages in thread

* Re: [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support
  2016-05-11  8:06   ` Geert Uytterhoeven
@ 2016-05-11 11:56     ` Dirk Behme
  2016-05-11 12:13       ` Geert Uytterhoeven
  0 siblings, 1 reply; 22+ messages in thread
From: Dirk Behme @ 2016-05-11 11:56 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Geert,

On 11.05.2016 10:06, Geert Uytterhoeven wrote:
> Hi Dirk,
>
> On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
>> @@ -0,0 +1,15 @@
>> +Renesas RCar r8a779x reset module
>> +-----------------------------------------------------
>> +This binding defines the reset module found on Renesas RCar r8a779x
>> +SoCs. The reset module contains several reset related registers,
>> +the meaning of them is implementation dependent.
>> +
>> +Required properties:
>> +- compatible : "renesas,rcar-rst"
>> +- reg : Location and size of the reset module
>> +
>> +Example:
>> +       reset-controller@e6160000 {
>> +               compatible = "renesas,rcar-rst";
>> +               reg = <0 0xe6160000 0 0x200>;
>> +       };
>
> While I understand you want to match on a single comptible value, the RST
> module itself highly depends on the actual SoC.
> Furthermore, R-Car Gen1 doesn't have RST.
>
> Hence I'd go for requiring 2 compatible values:
>   - An SoC-specific one, e.g. "renesas,r8a7795-rst",
>   - A family-specific one, e.g. "renesas,rcar-gen3-rst".
>
> Your driver code can match against the two family-specific compatible values
> using of_find_matching_node().


This way? See below [1].

Best regards

Dirk

[1]

--- a/drivers/misc/boot-mode-reg/rcar.c
+++ b/drivers/misc/boot-mode-reg/rcar.c
@@ -16,24 +16,43 @@
  #include <linux/io.h>
  #include <linux/module.h>
  #include <linux/of.h>
+#include <linux/of_address.h>

  #include <misc/boot-mode-reg.h>

-#define MODEMR 0xe6160060
+#define RCAR_RST_BASE 0xe6160000
+#define RCAR_RST_SIZE 0x200
+#define MODEMR 0x60
+
+static struct of_device_id rcar_rst_ids[] __initdata = {
+	{ .compatible = "renesas,rcar-gen2-rst" },
+	{ .compatible = "renesas,rcar-gen3-rst" },
+	{}
+};

  static int __init rcar_read_mode_pins(void)
  {
-	void __iomem *modemr;
+	void __iomem *reset;
+	struct device_node *np;
  	int err = -ENOMEM;
  	static u32 mode;

-	modemr = ioremap_nocache(MODEMR, 4);
-	if (!modemr) {
-		pr_err("failed to map boot mode register");
+	np = of_find_matching_node(NULL, rcar_rst_ids);
+	if (np)
+		reset = of_iomap(np, 0);
+	else {
+		pr_warn("can't find renesas rcar-rst device node");
+		reset = ioremap_nocache(RCAR_RST_BASE, RCAR_RST_SIZE);
+	}
+
+	if (!reset) {
+		pr_err("failed to map reset registers");
+		of_node_put(np);
  		goto err;
  	}
-	mode = ioread32(modemr);
-	iounmap(modemr);
+	mode = ioread32(reset + MODEMR);
+	iounmap(reset);
+	of_node_put(np);

  	err = boot_mode_reg_set(mode);
  err:
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
@@ -0,0 +1,24 @@
+Renesas RCar r8a779x reset module
+-----------------------------------------------------
+This binding defines the reset module found on Renesas RCar r8a779x
+SoCs. The reset module contains several reset related registers,
+the meaning of them is implementation dependent.
+
+Required properties:
+- compatible : "renesas,rcar-gen2-rst" for RCar Gen2 or
+               "renesas,rcar-gen3-rst" for RCar Gen3
+	       and additionally a SoC specific property like
+	       "renesas,r8a7790-rst" or
+	       "renesas,r8a7791-rst" or
+	       "renesas,r8a7792-rst" or
+	       "renesas,r8a7793-rst" or
+	       "renesas,r8a7794-rst" or
+	       "renesas,r8a7795-rst" or
+	       "renesas,r8a7796-rst"
+- reg : Location and size of the reset module
+
+Example:
+	reset-controller@e6160000 {
+		compatible = "renesas,rcar-gen3-rst", "renesas,r8a7795-rst";
+		reg = <0 0xe6160000 0 0x200>;
+	};
diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi
index 83cf23c..7102002 100644
--- a/arch/arm/boot/dts/r8a7790.dtsi
+++ b/arch/arm/boot/dts/r8a7790.dtsi
@@ -1102,6 +1102,11 @@
  			#power-domain-cells = <0>;
  		};

+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-gen2-rst", "renesas,r8a7790-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
  		/* Variable factor clocks */
  		sd2_clk: sd2@e6150078 {
  			compatible = "renesas,r8a7790-div6-clock", "renesas,cpg-div6-clock";
diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
index db67e34..d54b58e 100644
--- a/arch/arm/boot/dts/r8a7791.dtsi
+++ b/arch/arm/boot/dts/r8a7791.dtsi
@@ -1122,6 +1122,11 @@
  			#power-domain-cells = <0>;
  		};

+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-gen2-rst", "renesas,r8a7791-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
  		/* Variable factor clocks */
  		sd2_clk: sd2@e6150078 {
  			compatible = "renesas,r8a7791-div6-clock", "renesas,cpg-div6-clock";
diff --git a/arch/arm/boot/dts/r8a7793.dtsi b/arch/arm/boot/dts/r8a7793.dtsi
index 1dd6d20..9ebe978 100644
--- a/arch/arm/boot/dts/r8a7793.dtsi
+++ b/arch/arm/boot/dts/r8a7793.dtsi
@@ -933,6 +933,11 @@
  			#power-domain-cells = <0>;
  		};

+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-gen2-rst", "renesas,r8a7793-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
  		/* Variable factor clocks */
  		sd2_clk: sd2@e6150078 {
  			compatible = "renesas,r8a7793-div6-clock",
diff --git a/arch/arm/boot/dts/r8a7794.dtsi b/arch/arm/boot/dts/r8a7794.dtsi
index f334a3a..bd998fd 100644
--- a/arch/arm/boot/dts/r8a7794.dtsi
+++ b/arch/arm/boot/dts/r8a7794.dtsi
@@ -932,6 +932,12 @@
  					     "rcan";
  			#power-domain-cells = <0>;
  		};
+
+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-gen2-rst", "renesas,r8a7794-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
  		/* Variable factor clocks */
  		sd2_clk: sd2@e6150078 {
  			compatible = "renesas,r8a7794-div6-clock", "renesas,cpg-div6-clock";
diff --git a/arch/arm64/boot/dts/renesas/r8a7795.dtsi 
b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
index 7181db0..b846bca 100644
--- a/arch/arm64/boot/dts/renesas/r8a7795.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7795.dtsi
@@ -309,6 +309,11 @@
  			#power-domain-cells = <0>;
  		};

+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-gen3-rst", "renesas,r8a7795-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
  		sysc: system-controller@e6180000 {
  			compatible = "renesas,r8a7795-sysc";
  			reg = <0 0xe6180000 0 0x0400>;
diff --git a/arch/arm64/boot/dts/renesas/r8a7796.dtsi 
b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
index 1389528..7c65f8a 100644
--- a/arch/arm64/boot/dts/renesas/r8a7796.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
@@ -109,6 +109,11 @@
  			#power-domain-cells = <0>;
  		};

+		reset-controller@e6160000 {
+			compatible = "renesas,rcar-gen3-rst", "renesas,r8a7796-rst";
+			reg = <0 0xe6160000 0 0x200>;
+		};
+
  		sysc: system-controller@e6180000 {
  			compatible = "renesas,r8a7796-sysc";
  			reg = <0 0xe6180000 0 0x0400>;

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

* Re: [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support
  2016-05-11 11:56     ` Dirk Behme
@ 2016-05-11 12:13       ` Geert Uytterhoeven
  2016-05-11 13:36         ` Dirk Behme
  0 siblings, 1 reply; 22+ messages in thread
From: Geert Uytterhoeven @ 2016-05-11 12:13 UTC (permalink / raw)
  To: Dirk Behme
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Dirk,

On Wed, May 11, 2016 at 1:56 PM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
> On 11.05.2016 10:06, Geert Uytterhoeven wrote:
>> On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com>
>> wrote:
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
>>> @@ -0,0 +1,15 @@
>>> +Renesas RCar r8a779x reset module
>>> +-----------------------------------------------------
>>> +This binding defines the reset module found on Renesas RCar r8a779x
>>> +SoCs. The reset module contains several reset related registers,
>>> +the meaning of them is implementation dependent.
>>> +
>>> +Required properties:
>>> +- compatible : "renesas,rcar-rst"
>>> +- reg : Location and size of the reset module
>>> +
>>> +Example:
>>> +       reset-controller@e6160000 {
>>> +               compatible = "renesas,rcar-rst";
>>> +               reg = <0 0xe6160000 0 0x200>;
>>> +       };
>>
>>
>> While I understand you want to match on a single comptible value, the RST
>> module itself highly depends on the actual SoC.
>> Furthermore, R-Car Gen1 doesn't have RST.
>>
>> Hence I'd go for requiring 2 compatible values:
>>   - An SoC-specific one, e.g. "renesas,r8a7795-rst",
>>   - A family-specific one, e.g. "renesas,rcar-gen3-rst".
>>
>> Your driver code can match against the two family-specific compatible
>> values
>> using of_find_matching_node().
>
> This way? See below [1].
>
> Best regards
>
> Dirk
>
> [1]
>
> --- a/drivers/misc/boot-mode-reg/rcar.c
> +++ b/drivers/misc/boot-mode-reg/rcar.c
> @@ -16,24 +16,43 @@
>  #include <linux/io.h>
>  #include <linux/module.h>
>  #include <linux/of.h>
> +#include <linux/of_address.h>
>
>  #include <misc/boot-mode-reg.h>
>
> -#define MODEMR 0xe6160060
> +#define RCAR_RST_BASE 0xe6160000
> +#define RCAR_RST_SIZE 0x200
> +#define MODEMR 0x60
> +
> +static struct of_device_id rcar_rst_ids[] __initdata = {

const

> +       { .compatible = "renesas,rcar-gen2-rst" },
> +       { .compatible = "renesas,rcar-gen3-rst" },
> +       {}
> +};
>
>  static int __init rcar_read_mode_pins(void)
>  {
> -       void __iomem *modemr;
> +       void __iomem *reset;
> +       struct device_node *np;
>         int err = -ENOMEM;
>         static u32 mode;
>
> -       modemr = ioremap_nocache(MODEMR, 4);
> -       if (!modemr) {
> -               pr_err("failed to map boot mode register");
> +       np = of_find_matching_node(NULL, rcar_rst_ids);

Yep, like this.

> --- /dev/null
> +++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
> @@ -0,0 +1,24 @@
> +Renesas RCar r8a779x reset module

R-Car Gen2 and Gen3

> +-----------------------------------------------------
> +This binding defines the reset module found on Renesas RCar r8a779x

R-Car Gen2 and Gen3

> +SoCs. The reset module contains several reset related registers,
> +the meaning of them is implementation dependent.

You may want to add more functionality from
http://www.spinics.net/lists/linux-sh/msg44754.html

> +Required properties:
> +- compatible : "renesas,rcar-gen2-rst" for RCar Gen2 or

R-Car

> +               "renesas,rcar-gen3-rst" for RCar Gen3

R-Car

> +              and additionally a SoC specific property like
> +              "renesas,r8a7790-rst" or
> +              "renesas,r8a7791-rst" or
> +              "renesas,r8a7792-rst" or
> +              "renesas,r8a7793-rst" or
> +              "renesas,r8a7794-rst" or
> +              "renesas,r8a7795-rst" or
> +              "renesas,r8a7796-rst"

The SoC-specific compatible values should be listed first.

> +- reg : Location and size of the reset module
> +
> +Example:
> +       reset-controller@e6160000 {
> +               compatible = "renesas,rcar-gen3-rst", "renesas,r8a7795-rst";

The SoC-specific compatible value should be listed first.
The same is true for the actual dtsi files.

> +               reg = <0 0xe6160000 0 0x200>;
> +       };

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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] 22+ messages in thread

* Re: [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support
  2016-05-11 12:13       ` Geert Uytterhoeven
@ 2016-05-11 13:36         ` Dirk Behme
  2016-05-11 13:51           ` Geert Uytterhoeven
  0 siblings, 1 reply; 22+ messages in thread
From: Dirk Behme @ 2016-05-11 13:36 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme

Hi Geert,

On 11.05.2016 14:13, Geert Uytterhoeven wrote:
> Hi Dirk,
>
> On Wed, May 11, 2016 at 1:56 PM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
>> On 11.05.2016 10:06, Geert Uytterhoeven wrote:
>>> On Wed, May 11, 2016 at 7:29 AM, Dirk Behme <dirk.behme@de.bosch.com>
>>> wrote:
>>>> --- /dev/null
>>>> +++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
>>>> @@ -0,0 +1,15 @@
>>>> +Renesas RCar r8a779x reset module
>>>> +-----------------------------------------------------
>>>> +This binding defines the reset module found on Renesas RCar r8a779x
>>>> +SoCs. The reset module contains several reset related registers,
>>>> +the meaning of them is implementation dependent.
>>>> +
>>>> +Required properties:
>>>> +- compatible : "renesas,rcar-rst"
>>>> +- reg : Location and size of the reset module
>>>> +
>>>> +Example:
>>>> +       reset-controller@e6160000 {
>>>> +               compatible = "renesas,rcar-rst";
>>>> +               reg = <0 0xe6160000 0 0x200>;
>>>> +       };
>>>
>>>
>>> While I understand you want to match on a single comptible value, the RST
>>> module itself highly depends on the actual SoC.
>>> Furthermore, R-Car Gen1 doesn't have RST.
>>>
>>> Hence I'd go for requiring 2 compatible values:
>>>   - An SoC-specific one, e.g. "renesas,r8a7795-rst",
>>>   - A family-specific one, e.g. "renesas,rcar-gen3-rst".
>>>
>>> Your driver code can match against the two family-specific compatible
>>> values
>>> using of_find_matching_node().
>>
>> This way? See below [1].
>>
>> Best regards
>>
>> Dirk
>>
>> [1]
>>
>> --- a/drivers/misc/boot-mode-reg/rcar.c
>> +++ b/drivers/misc/boot-mode-reg/rcar.c
>> @@ -16,24 +16,43 @@
>>  #include <linux/io.h>
>>  #include <linux/module.h>
>>  #include <linux/of.h>
>> +#include <linux/of_address.h>
>>
>>  #include <misc/boot-mode-reg.h>
>>
>> -#define MODEMR 0xe6160060
>> +#define RCAR_RST_BASE 0xe6160000
>> +#define RCAR_RST_SIZE 0x200
>> +#define MODEMR 0x60
>> +
>> +static struct of_device_id rcar_rst_ids[] __initdata = {
>
> const
>
>> +       { .compatible = "renesas,rcar-gen2-rst" },
>> +       { .compatible = "renesas,rcar-gen3-rst" },
>> +       {}
>> +};
>>
>>  static int __init rcar_read_mode_pins(void)
>>  {
>> -       void __iomem *modemr;
>> +       void __iomem *reset;
>> +       struct device_node *np;
>>         int err = -ENOMEM;
>>         static u32 mode;
>>
>> -       modemr = ioremap_nocache(MODEMR, 4);
>> -       if (!modemr) {
>> -               pr_err("failed to map boot mode register");
>> +       np = of_find_matching_node(NULL, rcar_rst_ids);
>
> Yep, like this.
>
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/misc/renesas,rcar-rst.txt
>> @@ -0,0 +1,24 @@
>> +Renesas RCar r8a779x reset module
>
> R-Car Gen2 and Gen3
>
>> +-----------------------------------------------------
>> +This binding defines the reset module found on Renesas RCar r8a779x
>
> R-Car Gen2 and Gen3
>
>> +SoCs. The reset module contains several reset related registers,
>> +the meaning of them is implementation dependent.
>
> You may want to add more functionality from
> http://www.spinics.net/lists/linux-sh/msg44754.html


Just an understanding question:

Why do you prefer the solution with the drivers/misc/boot-mode-reg/ 
solution done in this patch series over the solution you proposed in

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

and the reset of that series?

Best regards

Dirk


>> +Required properties:
>> +- compatible : "renesas,rcar-gen2-rst" for RCar Gen2 or
>
> R-Car
>
>> +               "renesas,rcar-gen3-rst" for RCar Gen3
>
> R-Car
>
>> +              and additionally a SoC specific property like
>> +              "renesas,r8a7790-rst" or
>> +              "renesas,r8a7791-rst" or
>> +              "renesas,r8a7792-rst" or
>> +              "renesas,r8a7793-rst" or
>> +              "renesas,r8a7794-rst" or
>> +              "renesas,r8a7795-rst" or
>> +              "renesas,r8a7796-rst"
>
> The SoC-specific compatible values should be listed first.
>
>> +- reg : Location and size of the reset module
>> +
>> +Example:
>> +       reset-controller@e6160000 {
>> +               compatible = "renesas,rcar-gen3-rst", "renesas,r8a7795-rst";
>
> The SoC-specific compatible value should be listed first.
> The same is true for the actual dtsi files.
>
>> +               reg = <0 0xe6160000 0 0x200>;
>> +       };
>

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

* Re: [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support
  2016-05-11 13:36         ` Dirk Behme
@ 2016-05-11 13:51           ` Geert Uytterhoeven
  2016-05-11 14:22             ` Dirk Behme
  0 siblings, 1 reply; 22+ messages in thread
From: Geert Uytterhoeven @ 2016-05-11 13:51 UTC (permalink / raw)
  To: Dirk Behme
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme,
	Laurent Pinchart

Hi Dirk,

CC Laurent

On Wed, May 11, 2016 at 3:36 PM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
> Just an understanding question:
>
> Why do you prefer the solution with the drivers/misc/boot-mode-reg/ solution
> done in this patch series over the solution you proposed in
>
> http://www.spinics.net/lists/linux-sh/msg44755.html
>
> and the reset of that series?

Do I? :-)

drivers/misc/boot-mode-reg/ will need agreement outside the linux-renesas-soc
community. My renesas,modemr proposal won't.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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] 22+ messages in thread

* Re: [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support
  2016-05-11 13:51           ` Geert Uytterhoeven
@ 2016-05-11 14:22             ` Dirk Behme
  0 siblings, 0 replies; 22+ messages in thread
From: Dirk Behme @ 2016-05-11 14:22 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Geert Uytterhoeven, Simon Horman, linux-renesas-soc, Dirk Behme,
	Laurent Pinchart

On 11.05.2016 15:51, Geert Uytterhoeven wrote:
> Hi Dirk,
>
> CC Laurent
>
> On Wed, May 11, 2016 at 3:36 PM, Dirk Behme <dirk.behme@de.bosch.com> wrote:
>> Just an understanding question:
>>
>> Why do you prefer the solution with the drivers/misc/boot-mode-reg/ solution
>> done in this patch series over the solution you proposed in
>>
>> http://www.spinics.net/lists/linux-sh/msg44755.html
>>
>> and the reset of that series?
>
> Do I? :-)
>
> drivers/misc/boot-mode-reg/ will need agreement outside the linux-renesas-soc
> community. My renesas,modemr proposal won't.


Then I'll have a look at

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

and drop the boot-mode-reg patches?

Ok?

Do you remember the status of

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

Anything I should know looking at it?

Best regards

Dirk

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

end of thread, other threads:[~2016-05-11 14:22 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-11  5:29 [PATCH v2 00/10] ARM: renesas RCar: Add boot-mode-reg core support Dirk Behme
2016-05-11  5:29 ` [PATCH v2 01/10] boot-mode-reg: Add core Dirk Behme
2016-05-11  7:54   ` Geert Uytterhoeven
2016-05-11  8:39     ` Dirk Behme
2016-05-11  8:41       ` Geert Uytterhoeven
2016-05-11  8:55         ` Dirk Behme
2016-05-11  9:12           ` Geert Uytterhoeven
2016-05-11  5:29 ` [PATCH v2 02/10] boot-mode-reg: Add R-Car driver Dirk Behme
2016-05-11  5:29 ` [PATCH v2 03/10] arm: renesas: rcar-gen2: Obtain MD pin value using boot-mode-reg Dirk Behme
2016-05-11  5:29 ` [PATCH v2 04/10] arm: renesas: r8a7791: " Dirk Behme
2016-05-11  5:29 ` [PATCH v2 05/10] clk: renesas: rcar-gen2: " Dirk Behme
2016-05-11  5:29 ` [PATCH v2 06/10] arm: renesas: rcar-gen2: Remove unused rcar_gen2_read_mode_pins() Dirk Behme
2016-05-11  5:29 ` [PATCH v2 07/10] arm: renesas: rcar-gen3: Make boot-mode-reg Gen3 compatible Dirk Behme
2016-05-11  5:29 ` [PATCH v2 08/10] clk: renesas: rcar-gen3: Obtain MD pin value using boot-mode-reg Dirk Behme
2016-05-11  5:29 ` [PATCH v2 09/10] ARM: dts: r8a779x: Add reset module support Dirk Behme
2016-05-11  8:06   ` Geert Uytterhoeven
2016-05-11 11:56     ` Dirk Behme
2016-05-11 12:13       ` Geert Uytterhoeven
2016-05-11 13:36         ` Dirk Behme
2016-05-11 13:51           ` Geert Uytterhoeven
2016-05-11 14:22             ` Dirk Behme
2016-05-11  5:29 ` [PATCH v2 10/10] boot-mode-reg: Convert to device tree 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.