* [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
* 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 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
* [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
* 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 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
* [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