All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-03 15:34 ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

	Hi Rafael, Simon, Magnus,

This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.

Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
abstraction of PM domains in DT, it should be sufficiently generic to handle
other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
R-Mobile APE6 (r8a73a4)).

Functionality-wise, this behaves the same as the legacy (non-DT) version
(modulo missing DT support in some device drivers).

Dependencies:
  - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
    Rafael J. Wysocki's linux-pm.git#linux-next,
  - This depends on "PM / Domains: Change prototype for the ->attach_dev()
    callback" from Ulf hanson, which is intended to still enter v3.18-rcX
    through the linux-pm tree.
    As this is a one-line change, I included this patch as the first patch of
    this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
    we don't have to wait for the v3.18-rcX that will include it?

For your convenience, I've also pushed this to
git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd

Changes compared to v3 (more detailed changelogs in the individual patches):
  - I dropped the patch to add preliminary PM domain latencies, as I want to do
    more measurements for PM domains that are currently never powered off.
    Values seem to range between 8.5 and 26 us, depending on the PM domain.
  - I dropped all patches related to QoS device latencies, as these need more
    discussion,
  - The power-{on,off}-latency properties have been changed from a single value
    to a list,
  - Device save/restore state latencies have been dropped, as they're Linux
    driver-specific, and thus don't belong in DT,
  - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
    returning an error code again,
  - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
  - Always keep D4 powered, until the new Coresight code handles runtime
    PM,
  - Remove bogus power-domains properties from clock nodes, as these will not
    be instantiated as platform devices,
  - Add power-domains properties to the recently added TMU nodes,
  - Added Acked-by, Reviewed-by.

Changes compared to v2 (more detailed changelogs in the individual patches):
  - Minor changes to attach/detach callbacks,
  - Really add the A4MP and D4 PM domains, as fixes are available (see
    dependencies below),
  - Scan DT topology to identify special PM domains (CPUs and console),
  - Move PM domain power-on/off latencies to a separate patch.

Changes compared to v1 (more detailed changelogs in the individual patches):
  - Several new patches: PM QoS device latencies in DT, attach/detach
    callbacks,
  - Run-Time management of the module clocks, making the hack in
    drivers/sh/pm_runtime.c obsolete for DT platforms using genpd,
  - Addition of PM QoS device latencies, specified from DT,
  - Addition of build glue, so this builds and runs without additional
    changes, incl. s2ram.

Thanks!

Geert Uytterhoeven (8):
  PM / Domains: Add DT bindings for power-on/off latencies
  PM / Domains: Add DT bindings for the R-Mobile System Controller
  ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk
    setup
  ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
  ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
  ARM: shmobile: R-Mobile: Add DT support for PM domains
  ARM: shmobile: r8a7740 dtsi: Add PM domain support
  drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd

Ulf Hansson (1):
  PM / Domains: Change prototype for the ->attach_dev() callback

 .../devicetree/bindings/power/power_domain.txt     |  14 +-
 .../bindings/power/renesas,sysc-rmobile.txt        | 107 ++++++++
 arch/arm/boot/dts/r8a7740.dtsi                     |  99 +++++++
 arch/arm/mach-shmobile/Kconfig                     |   3 +-
 arch/arm/mach-shmobile/pm-r8a7740.c                |  14 +
 arch/arm/mach-shmobile/pm-rmobile.c                | 284 +++++++++++++++++++--
 arch/arm/mach-shmobile/pm-rmobile.h                |   3 +-
 arch/arm/mach-shmobile/pm-sh7372.c                 |  11 +
 drivers/sh/pm_runtime.c                            |   2 +
 include/linux/pm_domain.h                          |   2 +-
 10 files changed, 519 insertions(+), 20 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt

-- 
1.9.1

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] 53+ messages in thread

* [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-03 15:34 ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

	Hi Rafael, Simon, Magnus,

This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.

Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
abstraction of PM domains in DT, it should be sufficiently generic to handle
other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
R-Mobile APE6 (r8a73a4)).

Functionality-wise, this behaves the same as the legacy (non-DT) version
(modulo missing DT support in some device drivers).

Dependencies:
  - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
    Rafael J. Wysocki's linux-pm.git#linux-next,
  - This depends on "PM / Domains: Change prototype for the ->attach_dev()
    callback" from Ulf hanson, which is intended to still enter v3.18-rcX
    through the linux-pm tree.
    As this is a one-line change, I included this patch as the first patch of
    this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
    we don't have to wait for the v3.18-rcX that will include it?

For your convenience, I've also pushed this to
git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd

Changes compared to v3 (more detailed changelogs in the individual patches):
  - I dropped the patch to add preliminary PM domain latencies, as I want to do
    more measurements for PM domains that are currently never powered off.
    Values seem to range between 8.5 and 26 us, depending on the PM domain.
  - I dropped all patches related to QoS device latencies, as these need more
    discussion,
  - The power-{on,off}-latency properties have been changed from a single value
    to a list,
  - Device save/restore state latencies have been dropped, as they're Linux
    driver-specific, and thus don't belong in DT,
  - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
    returning an error code again,
  - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
  - Always keep D4 powered, until the new Coresight code handles runtime
    PM,
  - Remove bogus power-domains properties from clock nodes, as these will not
    be instantiated as platform devices,
  - Add power-domains properties to the recently added TMU nodes,
  - Added Acked-by, Reviewed-by.

Changes compared to v2 (more detailed changelogs in the individual patches):
  - Minor changes to attach/detach callbacks,
  - Really add the A4MP and D4 PM domains, as fixes are available (see
    dependencies below),
  - Scan DT topology to identify special PM domains (CPUs and console),
  - Move PM domain power-on/off latencies to a separate patch.

Changes compared to v1 (more detailed changelogs in the individual patches):
  - Several new patches: PM QoS device latencies in DT, attach/detach
    callbacks,
  - Run-Time management of the module clocks, making the hack in
    drivers/sh/pm_runtime.c obsolete for DT platforms using genpd,
  - Addition of PM QoS device latencies, specified from DT,
  - Addition of build glue, so this builds and runs without additional
    changes, incl. s2ram.

Thanks!

Geert Uytterhoeven (8):
  PM / Domains: Add DT bindings for power-on/off latencies
  PM / Domains: Add DT bindings for the R-Mobile System Controller
  ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk
    setup
  ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
  ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
  ARM: shmobile: R-Mobile: Add DT support for PM domains
  ARM: shmobile: r8a7740 dtsi: Add PM domain support
  drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd

Ulf Hansson (1):
  PM / Domains: Change prototype for the ->attach_dev() callback

 .../devicetree/bindings/power/power_domain.txt     |  14 +-
 .../bindings/power/renesas,sysc-rmobile.txt        | 107 ++++++++
 arch/arm/boot/dts/r8a7740.dtsi                     |  99 +++++++
 arch/arm/mach-shmobile/Kconfig                     |   3 +-
 arch/arm/mach-shmobile/pm-r8a7740.c                |  14 +
 arch/arm/mach-shmobile/pm-rmobile.c                | 284 +++++++++++++++++++--
 arch/arm/mach-shmobile/pm-rmobile.h                |   3 +-
 arch/arm/mach-shmobile/pm-sh7372.c                 |  11 +
 drivers/sh/pm_runtime.c                            |   2 +
 include/linux/pm_domain.h                          |   2 +-
 10 files changed, 519 insertions(+), 20 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt

-- 
1.9.1

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] 53+ messages in thread

* [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-03 15:34 ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

	Hi Rafael, Simon, Magnus,

This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.

Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
abstraction of PM domains in DT, it should be sufficiently generic to handle
other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
R-Mobile APE6 (r8a73a4)).

Functionality-wise, this behaves the same as the legacy (non-DT) version
(modulo missing DT support in some device drivers).

Dependencies:
  - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
    Rafael J. Wysocki's linux-pm.git#linux-next,
  - This depends on "PM / Domains: Change prototype for the ->attach_dev()
    callback" from Ulf hanson, which is intended to still enter v3.18-rcX
    through the linux-pm tree.
    As this is a one-line change, I included this patch as the first patch of
    this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
    we don't have to wait for the v3.18-rcX that will include it?

For your convenience, I've also pushed this to
git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd

Changes compared to v3 (more detailed changelogs in the individual patches):
  - I dropped the patch to add preliminary PM domain latencies, as I want to do
    more measurements for PM domains that are currently never powered off.
    Values seem to range between 8.5 and 26 us, depending on the PM domain.
  - I dropped all patches related to QoS device latencies, as these need more
    discussion,
  - The power-{on,off}-latency properties have been changed from a single value
    to a list,
  - Device save/restore state latencies have been dropped, as they're Linux
    driver-specific, and thus don't belong in DT,
  - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
    returning an error code again,
  - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
  - Always keep D4 powered, until the new Coresight code handles runtime
    PM,
  - Remove bogus power-domains properties from clock nodes, as these will not
    be instantiated as platform devices,
  - Add power-domains properties to the recently added TMU nodes,
  - Added Acked-by, Reviewed-by.

Changes compared to v2 (more detailed changelogs in the individual patches):
  - Minor changes to attach/detach callbacks,
  - Really add the A4MP and D4 PM domains, as fixes are available (see
    dependencies below),
  - Scan DT topology to identify special PM domains (CPUs and console),
  - Move PM domain power-on/off latencies to a separate patch.

Changes compared to v1 (more detailed changelogs in the individual patches):
  - Several new patches: PM QoS device latencies in DT, attach/detach
    callbacks,
  - Run-Time management of the module clocks, making the hack in
    drivers/sh/pm_runtime.c obsolete for DT platforms using genpd,
  - Addition of PM QoS device latencies, specified from DT,
  - Addition of build glue, so this builds and runs without additional
    changes, incl. s2ram.

Thanks!

Geert Uytterhoeven (8):
  PM / Domains: Add DT bindings for power-on/off latencies
  PM / Domains: Add DT bindings for the R-Mobile System Controller
  ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk
    setup
  ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
  ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
  ARM: shmobile: R-Mobile: Add DT support for PM domains
  ARM: shmobile: r8a7740 dtsi: Add PM domain support
  drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd

Ulf Hansson (1):
  PM / Domains: Change prototype for the ->attach_dev() callback

 .../devicetree/bindings/power/power_domain.txt     |  14 +-
 .../bindings/power/renesas,sysc-rmobile.txt        | 107 ++++++++
 arch/arm/boot/dts/r8a7740.dtsi                     |  99 +++++++
 arch/arm/mach-shmobile/Kconfig                     |   3 +-
 arch/arm/mach-shmobile/pm-r8a7740.c                |  14 +
 arch/arm/mach-shmobile/pm-rmobile.c                | 284 +++++++++++++++++++--
 arch/arm/mach-shmobile/pm-rmobile.h                |   3 +-
 arch/arm/mach-shmobile/pm-sh7372.c                 |  11 +
 drivers/sh/pm_runtime.c                            |   2 +
 include/linux/pm_domain.h                          |   2 +-
 10 files changed, 519 insertions(+), 20 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt

-- 
1.9.1

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

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

* [PATCH v4 1/9] PM / Domains: Change prototype for the ->attach_dev() callback
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

From: Ulf Hansson <ulf.hansson@linaro.org>

Convert the prototype to return and int. This is just an initial step,
needed to support error handling.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Pavel Machek <pavel@ucw.cz>
Acked-by: Kevin Hilman <khilman@linaro.org>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Prerequisite

Ulf wrote:

This patch is intended as fix for 3.18 rc[n]. Why?

There are other SOC specific patches around that adds genpd support and which
implements the ->attach_dev() callback. To prevent having an "atomic" patch
during the next release cycle, let's change the prototype now instead.

Further patches will add the actual error handling in genpd and these can then
be reviewed and tested thoroughly.
---
 include/linux/pm_domain.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index 73e938b7e9374c68..d44f071988a861ff 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -72,7 +72,7 @@ struct generic_pm_domain {
 	bool max_off_time_changed;
 	bool cached_power_down_ok;
 	struct gpd_cpuidle_data *cpuidle_data;
-	void (*attach_dev)(struct device *dev);
+	int (*attach_dev)(struct device *dev);
 	void (*detach_dev)(struct device *dev);
 };
 
-- 
1.9.1


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

* [PATCH v4 1/9] PM / Domains: Change prototype for the ->attach_dev() callback
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

From: Ulf Hansson <ulf.hansson@linaro.org>

Convert the prototype to return and int. This is just an initial step,
needed to support error handling.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Pavel Machek <pavel@ucw.cz>
Acked-by: Kevin Hilman <khilman@linaro.org>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Prerequisite

Ulf wrote:

This patch is intended as fix for 3.18 rc[n]. Why?

There are other SOC specific patches around that adds genpd support and which
implements the ->attach_dev() callback. To prevent having an "atomic" patch
during the next release cycle, let's change the prototype now instead.

Further patches will add the actual error handling in genpd and these can then
be reviewed and tested thoroughly.
---
 include/linux/pm_domain.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index 73e938b7e9374c68..d44f071988a861ff 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -72,7 +72,7 @@ struct generic_pm_domain {
 	bool max_off_time_changed;
 	bool cached_power_down_ok;
 	struct gpd_cpuidle_data *cpuidle_data;
-	void (*attach_dev)(struct device *dev);
+	int (*attach_dev)(struct device *dev);
 	void (*detach_dev)(struct device *dev);
 };
 
-- 
1.9.1


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

* [PATCH v4 1/9] PM / Domains: Change prototype for the ->attach_dev() callback
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

From: Ulf Hansson <ulf.hansson@linaro.org>

Convert the prototype to return and int. This is just an initial step,
needed to support error handling.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Pavel Machek <pavel@ucw.cz>
Acked-by: Kevin Hilman <khilman@linaro.org>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Prerequisite

Ulf wrote:

This patch is intended as fix for 3.18 rc[n]. Why?

There are other SOC specific patches around that adds genpd support and which
implements the ->attach_dev() callback. To prevent having an "atomic" patch
during the next release cycle, let's change the prototype now instead.

Further patches will add the actual error handling in genpd and these can then
be reviewed and tested thoroughly.
---
 include/linux/pm_domain.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index 73e938b7e9374c68..d44f071988a861ff 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -72,7 +72,7 @@ struct generic_pm_domain {
 	bool max_off_time_changed;
 	bool cached_power_down_ok;
 	struct gpd_cpuidle_data *cpuidle_data;
-	void (*attach_dev)(struct device *dev);
+	int (*attach_dev)(struct device *dev);
 	void (*detach_dev)(struct device *dev);
 };
 
-- 
1.9.1

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

* [PATCH v4 2/9] PM / Domains: Add DT bindings for power-on/off latencies
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

PM domain power on/off-latencies are properties of the hardware.
In legacy code, they're specified from platform code.
On DT platforms, their values should come from DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Kevin Hilman <khilman@linaro.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Replace single latency value by list of latencies,
v3:
  - No changes,
v2:
  - Add Acked-by.
---
 Documentation/devicetree/bindings/power/power_domain.txt | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/power/power_domain.txt b/Documentation/devicetree/bindings/power/power_domain.txt
index 98c16672ab5f49e0..c4a4afb2ac3b0500 100644
--- a/Documentation/devicetree/bindings/power/power_domain.txt
+++ b/Documentation/devicetree/bindings/power/power_domain.txt
@@ -19,16 +19,26 @@ Required properties:
    providing multiple PM domains (e.g. power controllers), but can be any value
    as specified by device tree binding documentation of particular provider.
 
+Optional properties:
+ - power-on-latency: List of power-on latencies (in ns), one for each PM
+   domain. If all power-on latencies are identical, the list may be shortened
+   to a single value.
+ - power-off-latency: List of power-off latencies (in ns), one for each PM
+   domain. If all power-off latencies are identical, the list may be shortened
+   to a single value.
+
 Example:
 
 	power: power-controller@12340000 {
 		compatible = "foo,power-controller";
 		reg = <0x12340000 0x1000>;
 		#power-domain-cells = <1>;
+		power-on-latency = <250000 400000 180000>;
+		power-off-latency = <250000 400000 300000>;
 	};
 
-The node above defines a power controller that is a PM domain provider and
-expects one cell as its phandle argument.
+The node above defines a power controller that is a PM domain provider for
+3 PM domains, and expects one cell as its phandle argument.
 
 =PM domain consumers=
 
-- 
1.9.1


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

* [PATCH v4 2/9] PM / Domains: Add DT bindings for power-on/off latencies
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

PM domain power on/off-latencies are properties of the hardware.
In legacy code, they're specified from platform code.
On DT platforms, their values should come from DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Kevin Hilman <khilman@linaro.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Replace single latency value by list of latencies,
v3:
  - No changes,
v2:
  - Add Acked-by.
---
 Documentation/devicetree/bindings/power/power_domain.txt | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/power/power_domain.txt b/Documentation/devicetree/bindings/power/power_domain.txt
index 98c16672ab5f49e0..c4a4afb2ac3b0500 100644
--- a/Documentation/devicetree/bindings/power/power_domain.txt
+++ b/Documentation/devicetree/bindings/power/power_domain.txt
@@ -19,16 +19,26 @@ Required properties:
    providing multiple PM domains (e.g. power controllers), but can be any value
    as specified by device tree binding documentation of particular provider.
 
+Optional properties:
+ - power-on-latency: List of power-on latencies (in ns), one for each PM
+   domain. If all power-on latencies are identical, the list may be shortened
+   to a single value.
+ - power-off-latency: List of power-off latencies (in ns), one for each PM
+   domain. If all power-off latencies are identical, the list may be shortened
+   to a single value.
+
 Example:
 
 	power: power-controller@12340000 {
 		compatible = "foo,power-controller";
 		reg = <0x12340000 0x1000>;
 		#power-domain-cells = <1>;
+		power-on-latency = <250000 400000 180000>;
+		power-off-latency = <250000 400000 300000>;
 	};
 
-The node above defines a power controller that is a PM domain provider and
-expects one cell as its phandle argument.
+The node above defines a power controller that is a PM domain provider for
+3 PM domains, and expects one cell as its phandle argument.
 
 ==PM domain consumers==
 
-- 
1.9.1


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

* [PATCH v4 2/9] PM / Domains: Add DT bindings for power-on/off latencies
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

PM domain power on/off-latencies are properties of the hardware.
In legacy code, they're specified from platform code.
On DT platforms, their values should come from DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Kevin Hilman <khilman@linaro.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Replace single latency value by list of latencies,
v3:
  - No changes,
v2:
  - Add Acked-by.
---
 Documentation/devicetree/bindings/power/power_domain.txt | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/power/power_domain.txt b/Documentation/devicetree/bindings/power/power_domain.txt
index 98c16672ab5f49e0..c4a4afb2ac3b0500 100644
--- a/Documentation/devicetree/bindings/power/power_domain.txt
+++ b/Documentation/devicetree/bindings/power/power_domain.txt
@@ -19,16 +19,26 @@ Required properties:
    providing multiple PM domains (e.g. power controllers), but can be any value
    as specified by device tree binding documentation of particular provider.
 
+Optional properties:
+ - power-on-latency: List of power-on latencies (in ns), one for each PM
+   domain. If all power-on latencies are identical, the list may be shortened
+   to a single value.
+ - power-off-latency: List of power-off latencies (in ns), one for each PM
+   domain. If all power-off latencies are identical, the list may be shortened
+   to a single value.
+
 Example:
 
 	power: power-controller at 12340000 {
 		compatible = "foo,power-controller";
 		reg = <0x12340000 0x1000>;
 		#power-domain-cells = <1>;
+		power-on-latency = <250000 400000 180000>;
+		power-off-latency = <250000 400000 300000>;
 	};
 
-The node above defines a power controller that is a PM domain provider and
-expects one cell as its phandle argument.
+The node above defines a power controller that is a PM domain provider for
+3 PM domains, and expects one cell as its phandle argument.
 
 ==PM domain consumers==
 
-- 
1.9.1

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

* [PATCH v4 3/9] PM / Domains: Add DT bindings for the R-Mobile System Controller
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

The Renesas R-Mobile System Controller provides a.o. power management
support, following the generic PM domain bindings in
Documentation/devicetree/bindings/power/power_domain.txt.

For now this supports the R-Mobile A1 (r8a7740) only, but it should be
sufficiently generic to handle other members of the SH-Mobile/R-Mobile
family in the future.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Drop device save/restore state latencies, as they're Linux driver-specific,
  - Drop PM QoS device latencies, as they're put on hold,
v3:
  - Reword,
v2:
  - Fix copy-and-paste s/#address-cells/#size-cells/,
  - Add optional PM QoS device latencies.
---
 .../bindings/power/renesas,sysc-rmobile.txt        | 107 +++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt

diff --git a/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
new file mode 100644
index 0000000000000000..89ca3f35aec69750
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
@@ -0,0 +1,107 @@
+DT bindings for the Renesas R-Mobile System Controller
+
+= System Controller Node =
+
+The R-Mobile System Controller provides the following functions:
+  - Boot mode management,
+  - Reset generation,
+  - Power management.
+
+Required properties:
+- compatible: Should be "renesas,sysc-<soctype>", "renesas,sysc-rmobile" as
+	      fallback.
+	      Examples with soctypes are:
+		- "renesas,sysc-r8a7740" (R-Mobile A1)
+- reg: Two address start and address range blocks for the device:
+         - The first block refers to the normally accessible registers,
+         - the second block refers to the registers protected by the HPB
+	   semaphore.
+
+Optional nodes:
+- pm-domains: This node contains a hierarchy of PM domain nodes, which should
+  match the Power Area Hierarchy in the Power Domain Specifications section of
+  the device's datasheet.
+
+
+= PM Domain Nodes =
+
+Each of the PM domain nodes represents a PM domain, as documented by the
+generic PM domain bindings in
+Documentation/devicetree/bindings/power/power_domain.txt.
+
+The nodes should be named by the real power area names, and thus their names
+should be unique.
+
+Required properties:
+  - #power-domain-cells: Must be 0.
+
+Optional properties:
+- reg: If the PM domain is not always-on, this property must contain the bit
+       index number for the corresponding power area in the various Power
+       Control and Status Registers. The parent's node must contain the
+       following two properties:
+	 - #address-cells: Must be 1,
+	 - #size-cells: Must be 0.
+       If the PM domain is always-on, this property must be omitted.
+- power-on-latency: Power-on latency of the PM domain, in ns,
+- power-off-latency: Power-off latency of the PM domain, in ns.
+
+
+Example:
+
+This shows a subset of the r8a7740 PM domain hierarchy, containing the
+C5 "always-on" domain, 2 of its subdomains (A4S and A4SU), and the A3SP domain,
+which is a subdomain of A4S.
+
+	sysc: system-controller@e6180000 {
+		compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
+		reg = <0xe6180000 8000>, <0xe6188000 8000>;
+
+		pm-domains {
+			pd_c5: c5 {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				#power-domain-cells = <0>;
+
+				pd_a4s: a4s@10 {
+					reg = <10>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+					power-on-latency = <250000>;
+					power-off-latency = <250000>;
+
+					pd_a3sp: a3sp@11 {
+						reg = <11>;
+						#power-domain-cells = <0>;
+						power-on-latency = <250000>;
+						power-off-latency = <250000>;
+					};
+				};
+
+				pd_a4su: a4su@20 {
+					reg = <20>;
+					#power-domain-cells = <0>;
+					power-on-latency = <250000>;
+					power-off-latency = <250000>;
+				};
+			};
+		};
+	};
+
+
+= PM Domain Consumers =
+
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node,
+and optional PM QoS device latencies:
+
+Example:
+
+	tpu: pwm@e6600000 {
+		compatible = "renesas,tpu-r8a7740", "renesas,tpu";
+		reg = <0xe6600000 0x100>;
+		clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
+		power-domains = <&pd_a3sp>;
+		#pwm-cells = <3>;
+	};
-- 
1.9.1


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

* [PATCH v4 3/9] PM / Domains: Add DT bindings for the R-Mobile System Controller
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

The Renesas R-Mobile System Controller provides a.o. power management
support, following the generic PM domain bindings in
Documentation/devicetree/bindings/power/power_domain.txt.

For now this supports the R-Mobile A1 (r8a7740) only, but it should be
sufficiently generic to handle other members of the SH-Mobile/R-Mobile
family in the future.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Drop device save/restore state latencies, as they're Linux driver-specific,
  - Drop PM QoS device latencies, as they're put on hold,
v3:
  - Reword,
v2:
  - Fix copy-and-paste s/#address-cells/#size-cells/,
  - Add optional PM QoS device latencies.
---
 .../bindings/power/renesas,sysc-rmobile.txt        | 107 +++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt

diff --git a/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
new file mode 100644
index 0000000000000000..89ca3f35aec69750
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
@@ -0,0 +1,107 @@
+DT bindings for the Renesas R-Mobile System Controller
+
+== System Controller Node ==
+
+The R-Mobile System Controller provides the following functions:
+  - Boot mode management,
+  - Reset generation,
+  - Power management.
+
+Required properties:
+- compatible: Should be "renesas,sysc-<soctype>", "renesas,sysc-rmobile" as
+	      fallback.
+	      Examples with soctypes are:
+		- "renesas,sysc-r8a7740" (R-Mobile A1)
+- reg: Two address start and address range blocks for the device:
+         - The first block refers to the normally accessible registers,
+         - the second block refers to the registers protected by the HPB
+	   semaphore.
+
+Optional nodes:
+- pm-domains: This node contains a hierarchy of PM domain nodes, which should
+  match the Power Area Hierarchy in the Power Domain Specifications section of
+  the device's datasheet.
+
+
+== PM Domain Nodes ==
+
+Each of the PM domain nodes represents a PM domain, as documented by the
+generic PM domain bindings in
+Documentation/devicetree/bindings/power/power_domain.txt.
+
+The nodes should be named by the real power area names, and thus their names
+should be unique.
+
+Required properties:
+  - #power-domain-cells: Must be 0.
+
+Optional properties:
+- reg: If the PM domain is not always-on, this property must contain the bit
+       index number for the corresponding power area in the various Power
+       Control and Status Registers. The parent's node must contain the
+       following two properties:
+	 - #address-cells: Must be 1,
+	 - #size-cells: Must be 0.
+       If the PM domain is always-on, this property must be omitted.
+- power-on-latency: Power-on latency of the PM domain, in ns,
+- power-off-latency: Power-off latency of the PM domain, in ns.
+
+
+Example:
+
+This shows a subset of the r8a7740 PM domain hierarchy, containing the
+C5 "always-on" domain, 2 of its subdomains (A4S and A4SU), and the A3SP domain,
+which is a subdomain of A4S.
+
+	sysc: system-controller@e6180000 {
+		compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
+		reg = <0xe6180000 8000>, <0xe6188000 8000>;
+
+		pm-domains {
+			pd_c5: c5 {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				#power-domain-cells = <0>;
+
+				pd_a4s: a4s@10 {
+					reg = <10>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+					power-on-latency = <250000>;
+					power-off-latency = <250000>;
+
+					pd_a3sp: a3sp@11 {
+						reg = <11>;
+						#power-domain-cells = <0>;
+						power-on-latency = <250000>;
+						power-off-latency = <250000>;
+					};
+				};
+
+				pd_a4su: a4su@20 {
+					reg = <20>;
+					#power-domain-cells = <0>;
+					power-on-latency = <250000>;
+					power-off-latency = <250000>;
+				};
+			};
+		};
+	};
+
+
+== PM Domain Consumers ==
+
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node,
+and optional PM QoS device latencies:
+
+Example:
+
+	tpu: pwm@e6600000 {
+		compatible = "renesas,tpu-r8a7740", "renesas,tpu";
+		reg = <0xe6600000 0x100>;
+		clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
+		power-domains = <&pd_a3sp>;
+		#pwm-cells = <3>;
+	};
-- 
1.9.1


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

* [PATCH v4 3/9] PM / Domains: Add DT bindings for the R-Mobile System Controller
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

The Renesas R-Mobile System Controller provides a.o. power management
support, following the generic PM domain bindings in
Documentation/devicetree/bindings/power/power_domain.txt.

For now this supports the R-Mobile A1 (r8a7740) only, but it should be
sufficiently generic to handle other members of the SH-Mobile/R-Mobile
family in the future.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Drop device save/restore state latencies, as they're Linux driver-specific,
  - Drop PM QoS device latencies, as they're put on hold,
v3:
  - Reword,
v2:
  - Fix copy-and-paste s/#address-cells/#size-cells/,
  - Add optional PM QoS device latencies.
---
 .../bindings/power/renesas,sysc-rmobile.txt        | 107 +++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt

diff --git a/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
new file mode 100644
index 0000000000000000..89ca3f35aec69750
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
@@ -0,0 +1,107 @@
+DT bindings for the Renesas R-Mobile System Controller
+
+== System Controller Node ==
+
+The R-Mobile System Controller provides the following functions:
+  - Boot mode management,
+  - Reset generation,
+  - Power management.
+
+Required properties:
+- compatible: Should be "renesas,sysc-<soctype>", "renesas,sysc-rmobile" as
+	      fallback.
+	      Examples with soctypes are:
+		- "renesas,sysc-r8a7740" (R-Mobile A1)
+- reg: Two address start and address range blocks for the device:
+         - The first block refers to the normally accessible registers,
+         - the second block refers to the registers protected by the HPB
+	   semaphore.
+
+Optional nodes:
+- pm-domains: This node contains a hierarchy of PM domain nodes, which should
+  match the Power Area Hierarchy in the Power Domain Specifications section of
+  the device's datasheet.
+
+
+== PM Domain Nodes ==
+
+Each of the PM domain nodes represents a PM domain, as documented by the
+generic PM domain bindings in
+Documentation/devicetree/bindings/power/power_domain.txt.
+
+The nodes should be named by the real power area names, and thus their names
+should be unique.
+
+Required properties:
+  - #power-domain-cells: Must be 0.
+
+Optional properties:
+- reg: If the PM domain is not always-on, this property must contain the bit
+       index number for the corresponding power area in the various Power
+       Control and Status Registers. The parent's node must contain the
+       following two properties:
+	 - #address-cells: Must be 1,
+	 - #size-cells: Must be 0.
+       If the PM domain is always-on, this property must be omitted.
+- power-on-latency: Power-on latency of the PM domain, in ns,
+- power-off-latency: Power-off latency of the PM domain, in ns.
+
+
+Example:
+
+This shows a subset of the r8a7740 PM domain hierarchy, containing the
+C5 "always-on" domain, 2 of its subdomains (A4S and A4SU), and the A3SP domain,
+which is a subdomain of A4S.
+
+	sysc: system-controller at e6180000 {
+		compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
+		reg = <0xe6180000 8000>, <0xe6188000 8000>;
+
+		pm-domains {
+			pd_c5: c5 {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				#power-domain-cells = <0>;
+
+				pd_a4s: a4s at 10 {
+					reg = <10>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+					power-on-latency = <250000>;
+					power-off-latency = <250000>;
+
+					pd_a3sp: a3sp at 11 {
+						reg = <11>;
+						#power-domain-cells = <0>;
+						power-on-latency = <250000>;
+						power-off-latency = <250000>;
+					};
+				};
+
+				pd_a4su: a4su at 20 {
+					reg = <20>;
+					#power-domain-cells = <0>;
+					power-on-latency = <250000>;
+					power-off-latency = <250000>;
+				};
+			};
+		};
+	};
+
+
+== PM Domain Consumers ==
+
+Hardware blocks belonging to a PM domain should contain a "power-domains"
+property that is a phandle pointing to the corresponding PM domain node,
+and optional PM QoS device latencies:
+
+Example:
+
+	tpu: pwm at e6600000 {
+		compatible = "renesas,tpu-r8a7740", "renesas,tpu";
+		reg = <0xe6600000 0x100>;
+		clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
+		power-domains = <&pd_a3sp>;
+		#pwm-cells = <3>;
+	};
-- 
1.9.1

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

* [PATCH v4 4/9] ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk setup
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

Use the just introduced genpd attach/detach callbacks to register the
devices' module clocks, instead of doing it directly, to make it
DT-proof.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Add missing pm_clk_create()/pm_clk_destroy() calls,
  - Update for attach_dev() returning an error code again,
v3:
  - Update for callback signature changes,
v2:
  - New.

---
 arch/arm/mach-shmobile/pm-rmobile.c | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 717e6413d29cb998..068608d5f54a9a64 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -101,6 +101,34 @@ static bool rmobile_pd_active_wakeup(struct device *dev)
 	return true;
 }
 
+static int rmobile_pd_attach_dev(struct device *dev)
+{
+	int error;
+
+	error = pm_clk_create(dev);
+	if (error) {
+		dev_err(dev, "pm_clk_create failed %d\n", error);
+		return error;
+	}
+
+	error = pm_clk_add(dev, NULL);
+	if (error) {
+		dev_err(dev, "pm_clk_add failed %d\n", error);
+		goto fail;
+	}
+
+	return 0;
+
+fail:
+	pm_clk_destroy(dev);
+	return error;
+}
+
+static void rmobile_pd_detach_dev(struct device *dev)
+{
+	pm_clk_destroy(dev);
+}
+
 static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 {
 	struct generic_pm_domain *genpd = &rmobile_pd->genpd;
@@ -112,6 +140,8 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 	genpd->dev_ops.active_wakeup	= rmobile_pd_active_wakeup;
 	genpd->power_off		= rmobile_pd_power_down;
 	genpd->power_on			= rmobile_pd_power_up;
+	genpd->attach_dev		= rmobile_pd_attach_dev;
+	genpd->detach_dev		= rmobile_pd_detach_dev;
 	__rmobile_pd_power_up(rmobile_pd, false);
 }
 
@@ -130,8 +160,6 @@ void rmobile_add_device_to_domain_td(const char *domain_name,
 	struct device *dev = &pdev->dev;
 
 	__pm_genpd_name_add_device(domain_name, dev, td);
-	if (pm_clk_no_clocks(dev))
-		pm_clk_add(dev, NULL);
 }
 
 void rmobile_add_devices_to_domains(struct pm_domain_device data[],
-- 
1.9.1


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

* [PATCH v4 4/9] ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk setup
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

Use the just introduced genpd attach/detach callbacks to register the
devices' module clocks, instead of doing it directly, to make it
DT-proof.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Add missing pm_clk_create()/pm_clk_destroy() calls,
  - Update for attach_dev() returning an error code again,
v3:
  - Update for callback signature changes,
v2:
  - New.

---
 arch/arm/mach-shmobile/pm-rmobile.c | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 717e6413d29cb998..068608d5f54a9a64 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -101,6 +101,34 @@ static bool rmobile_pd_active_wakeup(struct device *dev)
 	return true;
 }
 
+static int rmobile_pd_attach_dev(struct device *dev)
+{
+	int error;
+
+	error = pm_clk_create(dev);
+	if (error) {
+		dev_err(dev, "pm_clk_create failed %d\n", error);
+		return error;
+	}
+
+	error = pm_clk_add(dev, NULL);
+	if (error) {
+		dev_err(dev, "pm_clk_add failed %d\n", error);
+		goto fail;
+	}
+
+	return 0;
+
+fail:
+	pm_clk_destroy(dev);
+	return error;
+}
+
+static void rmobile_pd_detach_dev(struct device *dev)
+{
+	pm_clk_destroy(dev);
+}
+
 static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 {
 	struct generic_pm_domain *genpd = &rmobile_pd->genpd;
@@ -112,6 +140,8 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 	genpd->dev_ops.active_wakeup	= rmobile_pd_active_wakeup;
 	genpd->power_off		= rmobile_pd_power_down;
 	genpd->power_on			= rmobile_pd_power_up;
+	genpd->attach_dev		= rmobile_pd_attach_dev;
+	genpd->detach_dev		= rmobile_pd_detach_dev;
 	__rmobile_pd_power_up(rmobile_pd, false);
 }
 
@@ -130,8 +160,6 @@ void rmobile_add_device_to_domain_td(const char *domain_name,
 	struct device *dev = &pdev->dev;
 
 	__pm_genpd_name_add_device(domain_name, dev, td);
-	if (pm_clk_no_clocks(dev))
-		pm_clk_add(dev, NULL);
 }
 
 void rmobile_add_devices_to_domains(struct pm_domain_device data[],
-- 
1.9.1


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

* [PATCH v4 4/9] ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk setup
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: devicetree, Ulf Hansson, Grygorii Strashko, Geert Uytterhoeven,
	linux-sh, linux-pm, Tomasz Figa, linux-kernel, Kevin Hilman,
	Philipp Zabel, linux-arm-kernel

Use the just introduced genpd attach/detach callbacks to register the
devices' module clocks, instead of doing it directly, to make it
DT-proof.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Add missing pm_clk_create()/pm_clk_destroy() calls,
  - Update for attach_dev() returning an error code again,
v3:
  - Update for callback signature changes,
v2:
  - New.

---
 arch/arm/mach-shmobile/pm-rmobile.c | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 717e6413d29cb998..068608d5f54a9a64 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -101,6 +101,34 @@ static bool rmobile_pd_active_wakeup(struct device *dev)
 	return true;
 }
 
+static int rmobile_pd_attach_dev(struct device *dev)
+{
+	int error;
+
+	error = pm_clk_create(dev);
+	if (error) {
+		dev_err(dev, "pm_clk_create failed %d\n", error);
+		return error;
+	}
+
+	error = pm_clk_add(dev, NULL);
+	if (error) {
+		dev_err(dev, "pm_clk_add failed %d\n", error);
+		goto fail;
+	}
+
+	return 0;
+
+fail:
+	pm_clk_destroy(dev);
+	return error;
+}
+
+static void rmobile_pd_detach_dev(struct device *dev)
+{
+	pm_clk_destroy(dev);
+}
+
 static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 {
 	struct generic_pm_domain *genpd = &rmobile_pd->genpd;
@@ -112,6 +140,8 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 	genpd->dev_ops.active_wakeup	= rmobile_pd_active_wakeup;
 	genpd->power_off		= rmobile_pd_power_down;
 	genpd->power_on			= rmobile_pd_power_up;
+	genpd->attach_dev		= rmobile_pd_attach_dev;
+	genpd->detach_dev		= rmobile_pd_detach_dev;
 	__rmobile_pd_power_up(rmobile_pd, false);
 }
 
@@ -130,8 +160,6 @@ void rmobile_add_device_to_domain_td(const char *domain_name,
 	struct device *dev = &pdev->dev;
 
 	__pm_genpd_name_add_device(domain_name, dev, td);
-	if (pm_clk_no_clocks(dev))
-		pm_clk_add(dev, NULL);
 }
 
 void rmobile_add_devices_to_domains(struct pm_domain_device data[],
-- 
1.9.1

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

* [PATCH v4 4/9] ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk setup
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

Use the just introduced genpd attach/detach callbacks to register the
devices' module clocks, instead of doing it directly, to make it
DT-proof.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Add missing pm_clk_create()/pm_clk_destroy() calls,
  - Update for attach_dev() returning an error code again,
v3:
  - Update for callback signature changes,
v2:
  - New.

---
 arch/arm/mach-shmobile/pm-rmobile.c | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 717e6413d29cb998..068608d5f54a9a64 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -101,6 +101,34 @@ static bool rmobile_pd_active_wakeup(struct device *dev)
 	return true;
 }
 
+static int rmobile_pd_attach_dev(struct device *dev)
+{
+	int error;
+
+	error = pm_clk_create(dev);
+	if (error) {
+		dev_err(dev, "pm_clk_create failed %d\n", error);
+		return error;
+	}
+
+	error = pm_clk_add(dev, NULL);
+	if (error) {
+		dev_err(dev, "pm_clk_add failed %d\n", error);
+		goto fail;
+	}
+
+	return 0;
+
+fail:
+	pm_clk_destroy(dev);
+	return error;
+}
+
+static void rmobile_pd_detach_dev(struct device *dev)
+{
+	pm_clk_destroy(dev);
+}
+
 static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 {
 	struct generic_pm_domain *genpd = &rmobile_pd->genpd;
@@ -112,6 +140,8 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 	genpd->dev_ops.active_wakeup	= rmobile_pd_active_wakeup;
 	genpd->power_off		= rmobile_pd_power_down;
 	genpd->power_on			= rmobile_pd_power_up;
+	genpd->attach_dev		= rmobile_pd_attach_dev;
+	genpd->detach_dev		= rmobile_pd_detach_dev;
 	__rmobile_pd_power_up(rmobile_pd, false);
 }
 
@@ -130,8 +160,6 @@ void rmobile_add_device_to_domain_td(const char *domain_name,
 	struct device *dev = &pdev->dev;
 
 	__pm_genpd_name_add_device(domain_name, dev, td);
-	if (pm_clk_no_clocks(dev))
-		pm_clk_add(dev, NULL);
 }
 
 void rmobile_add_devices_to_domains(struct pm_domain_device data[],
-- 
1.9.1

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

* [PATCH v4 5/9] ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

If CONFIG_PM_RUNTIME is not set, the clocks must be enabled before the
devices can be used.

Currently these clocks are enabled by the !CONFIG_PM_RUNTIME version of
pm_clk_notify, activated by the hack in drivers/sh/pm_runtime.c, but
this will go away soon (at least for DT).

On detach, disabling the clocks is already handled by pm_clk_destroy().
On system suspend/resume, disabling/enabling clocks is already handled
from the genpd->dev_ops.{start,stop}() callbacks.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - New.
---
 arch/arm/mach-shmobile/pm-rmobile.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 068608d5f54a9a64..6fb86cdb9fa2b3a7 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -117,6 +117,14 @@ static int rmobile_pd_attach_dev(struct device *dev)
 		goto fail;
 	}
 
+	if (!IS_ENABLED(CONFIG_PM_RUNTIME)) {
+		error = pm_clk_resume(dev);
+		if (error) {
+			dev_err(dev, "pm_clk_resume failed %d\n", error);
+			goto fail;
+		}
+	}
+
 	return 0;
 
 fail:
-- 
1.9.1


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

* [PATCH v4 5/9] ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

If CONFIG_PM_RUNTIME is not set, the clocks must be enabled before the
devices can be used.

Currently these clocks are enabled by the !CONFIG_PM_RUNTIME version of
pm_clk_notify, activated by the hack in drivers/sh/pm_runtime.c, but
this will go away soon (at least for DT).

On detach, disabling the clocks is already handled by pm_clk_destroy().
On system suspend/resume, disabling/enabling clocks is already handled
from the genpd->dev_ops.{start,stop}() callbacks.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - New.
---
 arch/arm/mach-shmobile/pm-rmobile.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 068608d5f54a9a64..6fb86cdb9fa2b3a7 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -117,6 +117,14 @@ static int rmobile_pd_attach_dev(struct device *dev)
 		goto fail;
 	}
 
+	if (!IS_ENABLED(CONFIG_PM_RUNTIME)) {
+		error = pm_clk_resume(dev);
+		if (error) {
+			dev_err(dev, "pm_clk_resume failed %d\n", error);
+			goto fail;
+		}
+	}
+
 	return 0;
 
 fail:
-- 
1.9.1


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

* [PATCH v4 5/9] ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh-u79uwXL29TY76Z2rM5mHXA,
	linux-pm-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, Geert Uytterhoeven

If CONFIG_PM_RUNTIME is not set, the clocks must be enabled before the
devices can be used.

Currently these clocks are enabled by the !CONFIG_PM_RUNTIME version of
pm_clk_notify, activated by the hack in drivers/sh/pm_runtime.c, but
this will go away soon (at least for DT).

On detach, disabling the clocks is already handled by pm_clk_destroy().
On system suspend/resume, disabling/enabling clocks is already handled
from the genpd->dev_ops.{start,stop}() callbacks.

Signed-off-by: Geert Uytterhoeven <geert+renesas-gXvu3+zWzMSzQB+pC5nmwQ@public.gmane.org>
---
v4:
  - New.
---
 arch/arm/mach-shmobile/pm-rmobile.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 068608d5f54a9a64..6fb86cdb9fa2b3a7 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -117,6 +117,14 @@ static int rmobile_pd_attach_dev(struct device *dev)
 		goto fail;
 	}
 
+	if (!IS_ENABLED(CONFIG_PM_RUNTIME)) {
+		error = pm_clk_resume(dev);
+		if (error) {
+			dev_err(dev, "pm_clk_resume failed %d\n", error);
+			goto fail;
+		}
+	}
+
 	return 0;
 
 fail:
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 5/9] ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

If CONFIG_PM_RUNTIME is not set, the clocks must be enabled before the
devices can be used.

Currently these clocks are enabled by the !CONFIG_PM_RUNTIME version of
pm_clk_notify, activated by the hack in drivers/sh/pm_runtime.c, but
this will go away soon (at least for DT).

On detach, disabling the clocks is already handled by pm_clk_destroy().
On system suspend/resume, disabling/enabling clocks is already handled
from the genpd->dev_ops.{start,stop}() callbacks.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - New.
---
 arch/arm/mach-shmobile/pm-rmobile.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 068608d5f54a9a64..6fb86cdb9fa2b3a7 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -117,6 +117,14 @@ static int rmobile_pd_attach_dev(struct device *dev)
 		goto fail;
 	}
 
+	if (!IS_ENABLED(CONFIG_PM_RUNTIME)) {
+		error = pm_clk_resume(dev);
+		if (error) {
+			dev_err(dev, "pm_clk_resume failed %d\n", error);
+			goto fail;
+		}
+	}
+
 	return 0;
 
 fail:
-- 
1.9.1

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

* [PATCH v4 6/9] ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

Replace the hardcoded addresses for accessing the SYSC PM domain
registers by register offsets, relative to the SYSC base address stored
in struct rmobile_pm_domain.

In the future, the SYSC base address will come from DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Restore SYSC register definition alignment,
v3:
  - No changes,
v2:
  - No changes.
---
 arch/arm/mach-shmobile/pm-r8a7740.c | 14 ++++++++++++++
 arch/arm/mach-shmobile/pm-rmobile.c | 24 +++++++++++++-----------
 arch/arm/mach-shmobile/pm-rmobile.h |  1 +
 arch/arm/mach-shmobile/pm-sh7372.c  | 11 +++++++++++
 4 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/arch/arm/mach-shmobile/pm-r8a7740.c b/arch/arm/mach-shmobile/pm-r8a7740.c
index ac2eecd6f5ea5d9f..34608fcf064808b8 100644
--- a/arch/arm/mach-shmobile/pm-r8a7740.c
+++ b/arch/arm/mach-shmobile/pm-r8a7740.c
@@ -9,10 +9,14 @@
  * for more details.
  */
 #include <linux/console.h>
+#include <linux/io.h>
 #include <linux/suspend.h>
+
 #include "common.h"
 #include "pm-rmobile.h"
 
+#define SYSC_BASE	IOMEM(0xe6180000)
+
 #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
 static int r8a7740_pd_a3sm_suspend(void)
 {
@@ -45,41 +49,51 @@ static int r8a7740_pd_d4_suspend(void)
 static struct rmobile_pm_domain r8a7740_pm_domains[] = {
 	{
 		.genpd.name	= "A4LC",
+		.base		= SYSC_BASE,
 		.bit_shift	= 1,
 	}, {
 		.genpd.name	= "A4MP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 2,
 	}, {
 		.genpd.name	= "D4",
+		.base		= SYSC_BASE,
 		.bit_shift	= 3,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_d4_suspend,
 	}, {
 		.genpd.name	= "A4R",
+		.base		= SYSC_BASE,
 		.bit_shift	= 5,
 	}, {
 		.genpd.name	= "A3RV",
+		.base		= SYSC_BASE,
 		.bit_shift	= 6,
 	}, {
 		.genpd.name	= "A4S",
+		.base		= SYSC_BASE,
 		.bit_shift	= 10,
 		.no_debug	= true,
 	}, {
 		.genpd.name	= "A3SP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 11,
 		.gov		= &pm_domain_always_on_gov,
 		.no_debug	= true,
 		.suspend	= r8a7740_pd_a3sp_suspend,
 	}, {
 		.genpd.name	= "A3SM",
+		.base		= SYSC_BASE,
 		.bit_shift	= 12,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_a3sm_suspend,
 	}, {
 		.genpd.name	= "A3SG",
+		.base		= SYSC_BASE,
 		.bit_shift	= 13,
 	}, {
 		.genpd.name	= "A4SU",
+		.base		= SYSC_BASE,
 		.bit_shift	= 20,
 	},
 };
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 6fb86cdb9fa2b3a7..f07e994141685baa 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -20,9 +20,9 @@
 #include "pm-rmobile.h"
 
 /* SYSC */
-#define SPDCR		IOMEM(0xe6180008)
-#define SWUCR		IOMEM(0xe6180014)
-#define PSTR		IOMEM(0xe6180080)
+#define SPDCR		0x08	/* SYS Power Down Control Register */
+#define SWUCR		0x14	/* SYS Wakeup Control Register */
+#define PSTR		0x80	/* Power Status Register */
 
 #define PSTR_RETRIES	100
 #define PSTR_DELAY_US	10
@@ -39,12 +39,12 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 			return ret;
 	}
 
-	if (__raw_readl(PSTR) & mask) {
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask) {
 		unsigned int retry_count;
-		__raw_writel(mask, SPDCR);
+		__raw_writel(mask, rmobile_pd->base + SPDCR);
 
 		for (retry_count = PSTR_RETRIES; retry_count; retry_count--) {
-			if (!(__raw_readl(SPDCR) & mask))
+			if (!(__raw_readl(rmobile_pd->base + SPDCR) & mask))
 				break;
 			cpu_relax();
 		}
@@ -52,7 +52,8 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power off, 0x%08x -> PSTR = 0x%08x\n",
-			 genpd->name, mask, __raw_readl(PSTR));
+			 genpd->name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 	return 0;
 }
@@ -64,13 +65,13 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 	unsigned int retry_count;
 	int ret = 0;
 
-	if (__raw_readl(PSTR) & mask)
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask)
 		goto out;
 
-	__raw_writel(mask, SWUCR);
+	__raw_writel(mask, rmobile_pd->base + SWUCR);
 
 	for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) {
-		if (!(__raw_readl(SWUCR) & mask))
+		if (!(__raw_readl(rmobile_pd->base + SWUCR) & mask))
 			break;
 		if (retry_count > PSTR_RETRIES)
 			udelay(PSTR_DELAY_US);
@@ -82,7 +83,8 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power on, 0x%08x -> PSTR = 0x%08x\n",
-			 rmobile_pd->genpd.name, mask, __raw_readl(PSTR));
+			 rmobile_pd->genpd.name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 out:
 	if (ret = 0 && rmobile_pd->resume && do_resume)
diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
index 8f66b343162b0411..0602130bb260c31d 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.h
+++ b/arch/arm/mach-shmobile/pm-rmobile.h
@@ -21,6 +21,7 @@ struct rmobile_pm_domain {
 	struct dev_power_governor *gov;
 	int (*suspend)(void);
 	void (*resume)(void);
+	void __iomem *base;
 	unsigned int bit_shift;
 	bool no_debug;
 };
diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c
index 7e5c2676c48902f1..7181a280b3b541af 100644
--- a/arch/arm/mach-shmobile/pm-sh7372.c
+++ b/arch/arm/mach-shmobile/pm-sh7372.c
@@ -45,6 +45,8 @@
 #define PLLC01STPCR IOMEM(0xe61500c8)
 
 /* SYSC */
+#define SYSC_BASE IOMEM(0xe6180000)
+
 #define SBAR IOMEM(0xe6180020)
 #define WUPRMSK IOMEM(0xe6180028)
 #define WUPSMSK IOMEM(0xe618002c)
@@ -118,24 +120,28 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A4LC",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 1,
 	},
 	{
 		.genpd.name = "A4MP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 2,
 	},
 	{
 		.genpd.name = "D4",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 3,
 	},
 	{
 		.genpd.name = "A4R",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 5,
 		.suspend = sh7372_a4r_pd_suspend,
 		.resume = sh7372_intcs_resume,
@@ -144,18 +150,21 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3RV",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 6,
 	},
 	{
 		.genpd.name = "A3RI",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 8,
 	},
 	{
 		.genpd.name = "A4S",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 10,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -166,6 +175,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 11,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -175,6 +185,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SG",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 13,
 	},
 };
-- 
1.9.1


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

* [PATCH v4 6/9] ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

Replace the hardcoded addresses for accessing the SYSC PM domain
registers by register offsets, relative to the SYSC base address stored
in struct rmobile_pm_domain.

In the future, the SYSC base address will come from DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Restore SYSC register definition alignment,
v3:
  - No changes,
v2:
  - No changes.
---
 arch/arm/mach-shmobile/pm-r8a7740.c | 14 ++++++++++++++
 arch/arm/mach-shmobile/pm-rmobile.c | 24 +++++++++++++-----------
 arch/arm/mach-shmobile/pm-rmobile.h |  1 +
 arch/arm/mach-shmobile/pm-sh7372.c  | 11 +++++++++++
 4 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/arch/arm/mach-shmobile/pm-r8a7740.c b/arch/arm/mach-shmobile/pm-r8a7740.c
index ac2eecd6f5ea5d9f..34608fcf064808b8 100644
--- a/arch/arm/mach-shmobile/pm-r8a7740.c
+++ b/arch/arm/mach-shmobile/pm-r8a7740.c
@@ -9,10 +9,14 @@
  * for more details.
  */
 #include <linux/console.h>
+#include <linux/io.h>
 #include <linux/suspend.h>
+
 #include "common.h"
 #include "pm-rmobile.h"
 
+#define SYSC_BASE	IOMEM(0xe6180000)
+
 #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
 static int r8a7740_pd_a3sm_suspend(void)
 {
@@ -45,41 +49,51 @@ static int r8a7740_pd_d4_suspend(void)
 static struct rmobile_pm_domain r8a7740_pm_domains[] = {
 	{
 		.genpd.name	= "A4LC",
+		.base		= SYSC_BASE,
 		.bit_shift	= 1,
 	}, {
 		.genpd.name	= "A4MP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 2,
 	}, {
 		.genpd.name	= "D4",
+		.base		= SYSC_BASE,
 		.bit_shift	= 3,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_d4_suspend,
 	}, {
 		.genpd.name	= "A4R",
+		.base		= SYSC_BASE,
 		.bit_shift	= 5,
 	}, {
 		.genpd.name	= "A3RV",
+		.base		= SYSC_BASE,
 		.bit_shift	= 6,
 	}, {
 		.genpd.name	= "A4S",
+		.base		= SYSC_BASE,
 		.bit_shift	= 10,
 		.no_debug	= true,
 	}, {
 		.genpd.name	= "A3SP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 11,
 		.gov		= &pm_domain_always_on_gov,
 		.no_debug	= true,
 		.suspend	= r8a7740_pd_a3sp_suspend,
 	}, {
 		.genpd.name	= "A3SM",
+		.base		= SYSC_BASE,
 		.bit_shift	= 12,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_a3sm_suspend,
 	}, {
 		.genpd.name	= "A3SG",
+		.base		= SYSC_BASE,
 		.bit_shift	= 13,
 	}, {
 		.genpd.name	= "A4SU",
+		.base		= SYSC_BASE,
 		.bit_shift	= 20,
 	},
 };
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 6fb86cdb9fa2b3a7..f07e994141685baa 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -20,9 +20,9 @@
 #include "pm-rmobile.h"
 
 /* SYSC */
-#define SPDCR		IOMEM(0xe6180008)
-#define SWUCR		IOMEM(0xe6180014)
-#define PSTR		IOMEM(0xe6180080)
+#define SPDCR		0x08	/* SYS Power Down Control Register */
+#define SWUCR		0x14	/* SYS Wakeup Control Register */
+#define PSTR		0x80	/* Power Status Register */
 
 #define PSTR_RETRIES	100
 #define PSTR_DELAY_US	10
@@ -39,12 +39,12 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 			return ret;
 	}
 
-	if (__raw_readl(PSTR) & mask) {
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask) {
 		unsigned int retry_count;
-		__raw_writel(mask, SPDCR);
+		__raw_writel(mask, rmobile_pd->base + SPDCR);
 
 		for (retry_count = PSTR_RETRIES; retry_count; retry_count--) {
-			if (!(__raw_readl(SPDCR) & mask))
+			if (!(__raw_readl(rmobile_pd->base + SPDCR) & mask))
 				break;
 			cpu_relax();
 		}
@@ -52,7 +52,8 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power off, 0x%08x -> PSTR = 0x%08x\n",
-			 genpd->name, mask, __raw_readl(PSTR));
+			 genpd->name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 	return 0;
 }
@@ -64,13 +65,13 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 	unsigned int retry_count;
 	int ret = 0;
 
-	if (__raw_readl(PSTR) & mask)
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask)
 		goto out;
 
-	__raw_writel(mask, SWUCR);
+	__raw_writel(mask, rmobile_pd->base + SWUCR);
 
 	for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) {
-		if (!(__raw_readl(SWUCR) & mask))
+		if (!(__raw_readl(rmobile_pd->base + SWUCR) & mask))
 			break;
 		if (retry_count > PSTR_RETRIES)
 			udelay(PSTR_DELAY_US);
@@ -82,7 +83,8 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power on, 0x%08x -> PSTR = 0x%08x\n",
-			 rmobile_pd->genpd.name, mask, __raw_readl(PSTR));
+			 rmobile_pd->genpd.name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 out:
 	if (ret == 0 && rmobile_pd->resume && do_resume)
diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
index 8f66b343162b0411..0602130bb260c31d 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.h
+++ b/arch/arm/mach-shmobile/pm-rmobile.h
@@ -21,6 +21,7 @@ struct rmobile_pm_domain {
 	struct dev_power_governor *gov;
 	int (*suspend)(void);
 	void (*resume)(void);
+	void __iomem *base;
 	unsigned int bit_shift;
 	bool no_debug;
 };
diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c
index 7e5c2676c48902f1..7181a280b3b541af 100644
--- a/arch/arm/mach-shmobile/pm-sh7372.c
+++ b/arch/arm/mach-shmobile/pm-sh7372.c
@@ -45,6 +45,8 @@
 #define PLLC01STPCR IOMEM(0xe61500c8)
 
 /* SYSC */
+#define SYSC_BASE IOMEM(0xe6180000)
+
 #define SBAR IOMEM(0xe6180020)
 #define WUPRMSK IOMEM(0xe6180028)
 #define WUPSMSK IOMEM(0xe618002c)
@@ -118,24 +120,28 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A4LC",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 1,
 	},
 	{
 		.genpd.name = "A4MP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 2,
 	},
 	{
 		.genpd.name = "D4",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 3,
 	},
 	{
 		.genpd.name = "A4R",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 5,
 		.suspend = sh7372_a4r_pd_suspend,
 		.resume = sh7372_intcs_resume,
@@ -144,18 +150,21 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3RV",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 6,
 	},
 	{
 		.genpd.name = "A3RI",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 8,
 	},
 	{
 		.genpd.name = "A4S",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 10,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -166,6 +175,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 11,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -175,6 +185,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SG",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 13,
 	},
 };
-- 
1.9.1


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

* [PATCH v4 6/9] ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: devicetree, Ulf Hansson, Grygorii Strashko, Geert Uytterhoeven,
	linux-sh, linux-pm, Tomasz Figa, linux-kernel, Kevin Hilman,
	Philipp Zabel, linux-arm-kernel

Replace the hardcoded addresses for accessing the SYSC PM domain
registers by register offsets, relative to the SYSC base address stored
in struct rmobile_pm_domain.

In the future, the SYSC base address will come from DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Restore SYSC register definition alignment,
v3:
  - No changes,
v2:
  - No changes.
---
 arch/arm/mach-shmobile/pm-r8a7740.c | 14 ++++++++++++++
 arch/arm/mach-shmobile/pm-rmobile.c | 24 +++++++++++++-----------
 arch/arm/mach-shmobile/pm-rmobile.h |  1 +
 arch/arm/mach-shmobile/pm-sh7372.c  | 11 +++++++++++
 4 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/arch/arm/mach-shmobile/pm-r8a7740.c b/arch/arm/mach-shmobile/pm-r8a7740.c
index ac2eecd6f5ea5d9f..34608fcf064808b8 100644
--- a/arch/arm/mach-shmobile/pm-r8a7740.c
+++ b/arch/arm/mach-shmobile/pm-r8a7740.c
@@ -9,10 +9,14 @@
  * for more details.
  */
 #include <linux/console.h>
+#include <linux/io.h>
 #include <linux/suspend.h>
+
 #include "common.h"
 #include "pm-rmobile.h"
 
+#define SYSC_BASE	IOMEM(0xe6180000)
+
 #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
 static int r8a7740_pd_a3sm_suspend(void)
 {
@@ -45,41 +49,51 @@ static int r8a7740_pd_d4_suspend(void)
 static struct rmobile_pm_domain r8a7740_pm_domains[] = {
 	{
 		.genpd.name	= "A4LC",
+		.base		= SYSC_BASE,
 		.bit_shift	= 1,
 	}, {
 		.genpd.name	= "A4MP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 2,
 	}, {
 		.genpd.name	= "D4",
+		.base		= SYSC_BASE,
 		.bit_shift	= 3,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_d4_suspend,
 	}, {
 		.genpd.name	= "A4R",
+		.base		= SYSC_BASE,
 		.bit_shift	= 5,
 	}, {
 		.genpd.name	= "A3RV",
+		.base		= SYSC_BASE,
 		.bit_shift	= 6,
 	}, {
 		.genpd.name	= "A4S",
+		.base		= SYSC_BASE,
 		.bit_shift	= 10,
 		.no_debug	= true,
 	}, {
 		.genpd.name	= "A3SP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 11,
 		.gov		= &pm_domain_always_on_gov,
 		.no_debug	= true,
 		.suspend	= r8a7740_pd_a3sp_suspend,
 	}, {
 		.genpd.name	= "A3SM",
+		.base		= SYSC_BASE,
 		.bit_shift	= 12,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_a3sm_suspend,
 	}, {
 		.genpd.name	= "A3SG",
+		.base		= SYSC_BASE,
 		.bit_shift	= 13,
 	}, {
 		.genpd.name	= "A4SU",
+		.base		= SYSC_BASE,
 		.bit_shift	= 20,
 	},
 };
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 6fb86cdb9fa2b3a7..f07e994141685baa 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -20,9 +20,9 @@
 #include "pm-rmobile.h"
 
 /* SYSC */
-#define SPDCR		IOMEM(0xe6180008)
-#define SWUCR		IOMEM(0xe6180014)
-#define PSTR		IOMEM(0xe6180080)
+#define SPDCR		0x08	/* SYS Power Down Control Register */
+#define SWUCR		0x14	/* SYS Wakeup Control Register */
+#define PSTR		0x80	/* Power Status Register */
 
 #define PSTR_RETRIES	100
 #define PSTR_DELAY_US	10
@@ -39,12 +39,12 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 			return ret;
 	}
 
-	if (__raw_readl(PSTR) & mask) {
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask) {
 		unsigned int retry_count;
-		__raw_writel(mask, SPDCR);
+		__raw_writel(mask, rmobile_pd->base + SPDCR);
 
 		for (retry_count = PSTR_RETRIES; retry_count; retry_count--) {
-			if (!(__raw_readl(SPDCR) & mask))
+			if (!(__raw_readl(rmobile_pd->base + SPDCR) & mask))
 				break;
 			cpu_relax();
 		}
@@ -52,7 +52,8 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power off, 0x%08x -> PSTR = 0x%08x\n",
-			 genpd->name, mask, __raw_readl(PSTR));
+			 genpd->name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 	return 0;
 }
@@ -64,13 +65,13 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 	unsigned int retry_count;
 	int ret = 0;
 
-	if (__raw_readl(PSTR) & mask)
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask)
 		goto out;
 
-	__raw_writel(mask, SWUCR);
+	__raw_writel(mask, rmobile_pd->base + SWUCR);
 
 	for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) {
-		if (!(__raw_readl(SWUCR) & mask))
+		if (!(__raw_readl(rmobile_pd->base + SWUCR) & mask))
 			break;
 		if (retry_count > PSTR_RETRIES)
 			udelay(PSTR_DELAY_US);
@@ -82,7 +83,8 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power on, 0x%08x -> PSTR = 0x%08x\n",
-			 rmobile_pd->genpd.name, mask, __raw_readl(PSTR));
+			 rmobile_pd->genpd.name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 out:
 	if (ret == 0 && rmobile_pd->resume && do_resume)
diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
index 8f66b343162b0411..0602130bb260c31d 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.h
+++ b/arch/arm/mach-shmobile/pm-rmobile.h
@@ -21,6 +21,7 @@ struct rmobile_pm_domain {
 	struct dev_power_governor *gov;
 	int (*suspend)(void);
 	void (*resume)(void);
+	void __iomem *base;
 	unsigned int bit_shift;
 	bool no_debug;
 };
diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c
index 7e5c2676c48902f1..7181a280b3b541af 100644
--- a/arch/arm/mach-shmobile/pm-sh7372.c
+++ b/arch/arm/mach-shmobile/pm-sh7372.c
@@ -45,6 +45,8 @@
 #define PLLC01STPCR IOMEM(0xe61500c8)
 
 /* SYSC */
+#define SYSC_BASE IOMEM(0xe6180000)
+
 #define SBAR IOMEM(0xe6180020)
 #define WUPRMSK IOMEM(0xe6180028)
 #define WUPSMSK IOMEM(0xe618002c)
@@ -118,24 +120,28 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A4LC",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 1,
 	},
 	{
 		.genpd.name = "A4MP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 2,
 	},
 	{
 		.genpd.name = "D4",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 3,
 	},
 	{
 		.genpd.name = "A4R",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 5,
 		.suspend = sh7372_a4r_pd_suspend,
 		.resume = sh7372_intcs_resume,
@@ -144,18 +150,21 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3RV",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 6,
 	},
 	{
 		.genpd.name = "A3RI",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 8,
 	},
 	{
 		.genpd.name = "A4S",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 10,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -166,6 +175,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 11,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -175,6 +185,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SG",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 13,
 	},
 };
-- 
1.9.1

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

* [PATCH v4 6/9] ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

Replace the hardcoded addresses for accessing the SYSC PM domain
registers by register offsets, relative to the SYSC base address stored
in struct rmobile_pm_domain.

In the future, the SYSC base address will come from DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
---
v4:
  - Add Reviewed-by,
  - Restore SYSC register definition alignment,
v3:
  - No changes,
v2:
  - No changes.
---
 arch/arm/mach-shmobile/pm-r8a7740.c | 14 ++++++++++++++
 arch/arm/mach-shmobile/pm-rmobile.c | 24 +++++++++++++-----------
 arch/arm/mach-shmobile/pm-rmobile.h |  1 +
 arch/arm/mach-shmobile/pm-sh7372.c  | 11 +++++++++++
 4 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/arch/arm/mach-shmobile/pm-r8a7740.c b/arch/arm/mach-shmobile/pm-r8a7740.c
index ac2eecd6f5ea5d9f..34608fcf064808b8 100644
--- a/arch/arm/mach-shmobile/pm-r8a7740.c
+++ b/arch/arm/mach-shmobile/pm-r8a7740.c
@@ -9,10 +9,14 @@
  * for more details.
  */
 #include <linux/console.h>
+#include <linux/io.h>
 #include <linux/suspend.h>
+
 #include "common.h"
 #include "pm-rmobile.h"
 
+#define SYSC_BASE	IOMEM(0xe6180000)
+
 #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
 static int r8a7740_pd_a3sm_suspend(void)
 {
@@ -45,41 +49,51 @@ static int r8a7740_pd_d4_suspend(void)
 static struct rmobile_pm_domain r8a7740_pm_domains[] = {
 	{
 		.genpd.name	= "A4LC",
+		.base		= SYSC_BASE,
 		.bit_shift	= 1,
 	}, {
 		.genpd.name	= "A4MP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 2,
 	}, {
 		.genpd.name	= "D4",
+		.base		= SYSC_BASE,
 		.bit_shift	= 3,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_d4_suspend,
 	}, {
 		.genpd.name	= "A4R",
+		.base		= SYSC_BASE,
 		.bit_shift	= 5,
 	}, {
 		.genpd.name	= "A3RV",
+		.base		= SYSC_BASE,
 		.bit_shift	= 6,
 	}, {
 		.genpd.name	= "A4S",
+		.base		= SYSC_BASE,
 		.bit_shift	= 10,
 		.no_debug	= true,
 	}, {
 		.genpd.name	= "A3SP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 11,
 		.gov		= &pm_domain_always_on_gov,
 		.no_debug	= true,
 		.suspend	= r8a7740_pd_a3sp_suspend,
 	}, {
 		.genpd.name	= "A3SM",
+		.base		= SYSC_BASE,
 		.bit_shift	= 12,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_a3sm_suspend,
 	}, {
 		.genpd.name	= "A3SG",
+		.base		= SYSC_BASE,
 		.bit_shift	= 13,
 	}, {
 		.genpd.name	= "A4SU",
+		.base		= SYSC_BASE,
 		.bit_shift	= 20,
 	},
 };
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index 6fb86cdb9fa2b3a7..f07e994141685baa 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -20,9 +20,9 @@
 #include "pm-rmobile.h"
 
 /* SYSC */
-#define SPDCR		IOMEM(0xe6180008)
-#define SWUCR		IOMEM(0xe6180014)
-#define PSTR		IOMEM(0xe6180080)
+#define SPDCR		0x08	/* SYS Power Down Control Register */
+#define SWUCR		0x14	/* SYS Wakeup Control Register */
+#define PSTR		0x80	/* Power Status Register */
 
 #define PSTR_RETRIES	100
 #define PSTR_DELAY_US	10
@@ -39,12 +39,12 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 			return ret;
 	}
 
-	if (__raw_readl(PSTR) & mask) {
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask) {
 		unsigned int retry_count;
-		__raw_writel(mask, SPDCR);
+		__raw_writel(mask, rmobile_pd->base + SPDCR);
 
 		for (retry_count = PSTR_RETRIES; retry_count; retry_count--) {
-			if (!(__raw_readl(SPDCR) & mask))
+			if (!(__raw_readl(rmobile_pd->base + SPDCR) & mask))
 				break;
 			cpu_relax();
 		}
@@ -52,7 +52,8 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power off, 0x%08x -> PSTR = 0x%08x\n",
-			 genpd->name, mask, __raw_readl(PSTR));
+			 genpd->name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 	return 0;
 }
@@ -64,13 +65,13 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 	unsigned int retry_count;
 	int ret = 0;
 
-	if (__raw_readl(PSTR) & mask)
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask)
 		goto out;
 
-	__raw_writel(mask, SWUCR);
+	__raw_writel(mask, rmobile_pd->base + SWUCR);
 
 	for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) {
-		if (!(__raw_readl(SWUCR) & mask))
+		if (!(__raw_readl(rmobile_pd->base + SWUCR) & mask))
 			break;
 		if (retry_count > PSTR_RETRIES)
 			udelay(PSTR_DELAY_US);
@@ -82,7 +83,8 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power on, 0x%08x -> PSTR = 0x%08x\n",
-			 rmobile_pd->genpd.name, mask, __raw_readl(PSTR));
+			 rmobile_pd->genpd.name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 out:
 	if (ret == 0 && rmobile_pd->resume && do_resume)
diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
index 8f66b343162b0411..0602130bb260c31d 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.h
+++ b/arch/arm/mach-shmobile/pm-rmobile.h
@@ -21,6 +21,7 @@ struct rmobile_pm_domain {
 	struct dev_power_governor *gov;
 	int (*suspend)(void);
 	void (*resume)(void);
+	void __iomem *base;
 	unsigned int bit_shift;
 	bool no_debug;
 };
diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c
index 7e5c2676c48902f1..7181a280b3b541af 100644
--- a/arch/arm/mach-shmobile/pm-sh7372.c
+++ b/arch/arm/mach-shmobile/pm-sh7372.c
@@ -45,6 +45,8 @@
 #define PLLC01STPCR IOMEM(0xe61500c8)
 
 /* SYSC */
+#define SYSC_BASE IOMEM(0xe6180000)
+
 #define SBAR IOMEM(0xe6180020)
 #define WUPRMSK IOMEM(0xe6180028)
 #define WUPSMSK IOMEM(0xe618002c)
@@ -118,24 +120,28 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A4LC",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 1,
 	},
 	{
 		.genpd.name = "A4MP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 2,
 	},
 	{
 		.genpd.name = "D4",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 3,
 	},
 	{
 		.genpd.name = "A4R",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 5,
 		.suspend = sh7372_a4r_pd_suspend,
 		.resume = sh7372_intcs_resume,
@@ -144,18 +150,21 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3RV",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 6,
 	},
 	{
 		.genpd.name = "A3RI",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 8,
 	},
 	{
 		.genpd.name = "A4S",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 10,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -166,6 +175,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 11,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -175,6 +185,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SG",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 13,
 	},
 };
-- 
1.9.1

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

* [PATCH v4 7/9] ARM: shmobile: R-Mobile: Add DT support for PM domains
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

Populate the PM domains from DT, and provide support to hook up devices
to their respective PM domain.

The always-on power area (e.g. C5 on r8a7740) is created as a PM domain
without software control, to allow Run-Time management of module clocks
for hardware blocks inside this area.

Power-on/off latencies are supported.

Special cases like PM domains containing CPUs, the console device, or
Coresight-ETM, are handled by scanning the DT topology.

As long as the ARM debug/perf code doesn't use resource management with
runtime PM support, the power area containing Coresight-ETM (e.g. D4 on
r8a7740) must be kept powered to avoid a crash during resume from s2ram
(dbg_cpu_pm_notify() calls reset_ctrl_regs() unconditionally, causing an
undefined instruction oops).

Initialization is done from core_initcall(), as the
"renesas,intc-irqpin" driver uses postcore_initcall().

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - Always keep D4 powered, until the new Coresight code handles runtime
    PM,
v3:
  - Remove limitations, as fixes for the interrupt storm (A4MP) and
    crash (D4) are available,
  - Scan DT topology to identify special PM domains,
  - Add dependency on chosen/stdout-path,
v2:
  - Fix typo "CPU is _not_ in use",
  - Include build glue,
  - Remove paragraph about missing functionality compared to the legacy
    case, as it is no longer missing (runtime management of module
    clocks, device latencies).
---
 arch/arm/mach-shmobile/Kconfig      |   3 +-
 arch/arm/mach-shmobile/pm-rmobile.c | 220 +++++++++++++++++++++++++++++++++++-
 arch/arm/mach-shmobile/pm-rmobile.h |   2 +-
 3 files changed, 221 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig
index 7cb0a484da536d58..f96528bb45f6389e 100644
--- a/arch/arm/mach-shmobile/Kconfig
+++ b/arch/arm/mach-shmobile/Kconfig
@@ -7,6 +7,7 @@ config PM_RCAR
 
 config PM_RMOBILE
 	bool
+	select PM_GENERIC_DOMAINS
 
 config ARCH_RCAR_GEN1
 	bool
@@ -22,7 +23,7 @@ config ARCH_RCAR_GEN2
 
 config ARCH_RMOBILE
 	bool
-	select PM_RMOBILE if PM && !ARCH_SHMOBILE_MULTI
+	select PM_RMOBILE if PM
 	select SYS_SUPPORTS_SH_CMT
 	select SYS_SUPPORTS_SH_TMU
 
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index f07e994141685baa..e779fd874e006f7b 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2012  Renesas Solutions Corp.
  * Copyright (C) 2012  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+ * Copyright (C) 2014  Glider bvba
  *
  * based on pm-sh7372.c
  *  Copyright (C) 2011 Magnus Damm
@@ -13,10 +14,16 @@
  */
 #include <linux/console.h>
 #include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/pm_clock.h>
+#include <linux/slab.h>
+
 #include <asm/io.h>
+
 #include "pm-rmobile.h"
 
 /* SYSC */
@@ -30,8 +37,12 @@
 static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 {
 	struct rmobile_pm_domain *rmobile_pd = to_rmobile_pd(genpd);
-	unsigned int mask = 1 << rmobile_pd->bit_shift;
+	unsigned int mask;
+
+	if (rmobile_pd->bit_shift = ~0)
+		return -EBUSY;
 
+	mask = 1 << rmobile_pd->bit_shift;
 	if (rmobile_pd->suspend) {
 		int ret = rmobile_pd->suspend();
 
@@ -61,10 +72,14 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 				 bool do_resume)
 {
-	unsigned int mask = 1 << rmobile_pd->bit_shift;
+	unsigned int mask;
 	unsigned int retry_count;
 	int ret = 0;
 
+	if (rmobile_pd->bit_shift = ~0)
+		return 0;
+
+	mask = 1 << rmobile_pd->bit_shift;
 	if (__raw_readl(rmobile_pd->base + PSTR) & mask)
 		goto out;
 
@@ -155,6 +170,8 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 	__rmobile_pd_power_up(rmobile_pd, false);
 }
 
+#ifdef CONFIG_ARCH_SHMOBILE_LEGACY
+
 void rmobile_init_domains(struct rmobile_pm_domain domains[], int num)
 {
 	int j;
@@ -187,3 +204,202 @@ void rmobile_add_devices_to_domains(struct pm_domain_device data[],
 		rmobile_add_device_to_domain_td(data[j].domain_name,
 						data[j].pdev, &latencies);
 }
+
+#else /* !CONFIG_ARCH_SHMOBILE_LEGACY */
+
+static int rmobile_pd_suspend_cpu(void)
+{
+	/*
+	 * This domain contains the CPU core and therefore it should
+	 * only be turned off if the CPU is not in use.
+	 */
+	return -EBUSY;
+}
+
+static int rmobile_pd_suspend_console(void)
+{
+	/*
+	 * Serial consoles make use of SCIF hardware located in this domain,
+	 * hence keep the power domain on if "no_console_suspend" is set.
+	 */
+	return console_suspend_enabled ? 0 : -EBUSY;
+}
+
+static int rmobile_pd_suspend_debug(void)
+{
+	/*
+	 * This domain contains the Coresight-ETM hardware block and
+	 * therefore it should only be turned off if the debug module is
+	 * not in use.
+	 */
+	return -EBUSY;
+}
+
+#define MAX_NUM_CPU_PDS		8
+
+static unsigned int num_cpu_pds __initdata;
+static struct device_node *cpu_pds[MAX_NUM_CPU_PDS] __initdata;
+static struct device_node *console_pd __initdata;
+static struct device_node *debug_pd __initdata;
+
+static void __init get_special_pds(void)
+{
+	struct device_node *np, *pd;
+	unsigned int i;
+
+	/* PM domains containing CPUs */
+	for_each_node_by_type(np, "cpu") {
+		pd = of_parse_phandle(np, "power-domains", 0);
+		if (!pd)
+			continue;
+
+		for (i = 0; i < num_cpu_pds; i++)
+			if (pd = cpu_pds[i])
+				break;
+
+		if (i < num_cpu_pds) {
+			of_node_put(pd);
+			continue;
+		}
+
+		if (num_cpu_pds = MAX_NUM_CPU_PDS) {
+			pr_warn("Too many CPU PM domains\n");
+			of_node_put(pd);
+			continue;
+		}
+
+		cpu_pds[num_cpu_pds++] = pd;
+	}
+
+	/* PM domain containing console */
+	if (of_stdout)
+		console_pd = of_parse_phandle(of_stdout, "power-domains", 0);
+
+	/* PM domain containing Coresight-ETM */
+	np = of_find_compatible_node(NULL, NULL, "arm,coresight-etm3x");
+	if (np)
+		debug_pd = of_parse_phandle(np, "power-domains", 0);
+}
+
+static void __init put_special_pds(void)
+{
+	unsigned int i;
+
+	for (i = 0; i < num_cpu_pds; i++)
+		of_node_put(cpu_pds[i]);
+	of_node_put(console_pd);
+	of_node_put(debug_pd);
+}
+
+static bool __init pd_contains_cpu(const struct device_node *pd)
+{
+	unsigned int i;
+
+	for (i = 0; i < num_cpu_pds; i++)
+		if (pd = cpu_pds[i])
+			return true;
+
+	return false;
+}
+
+static void __init rmobile_setup_pm_domain(struct device_node *np,
+					   struct rmobile_pm_domain *pd)
+{
+	const char *name = pd->genpd.name;
+
+	if (pd_contains_cpu(np)) {
+		pr_debug("PM domain %s contains CPU\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_cpu;
+	} else if (np = console_pd) {
+		pr_debug("PM domain %s contains serial console\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_console;
+	} else if (np = debug_pd) {
+		pr_debug("PM domain %s contains Coresight-ETM\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_debug;
+	}
+
+	rmobile_init_pm_domain(pd);
+}
+
+static int __init rmobile_add_pm_domains(void __iomem *base,
+					 struct device_node *parent,
+					 struct generic_pm_domain *genpd_parent)
+{
+	struct device_node *np;
+
+	for_each_child_of_node(parent, np) {
+		struct rmobile_pm_domain *pd;
+		u32 idx = ~0;
+		u32 latency;
+
+		if (of_property_read_u32(np, "reg", &idx)) {
+			/* always-on domain */
+		}
+
+		pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+		if (!pd)
+			return -ENOMEM;
+
+		pd->genpd.name = np->name;
+		if (!of_property_read_u32(np, "power-on-latency", &latency))
+			pd->genpd.power_on_latency_ns = latency;
+		if (!of_property_read_u32(np, "power-off-latency", &latency))
+			pd->genpd.power_off_latency_ns = latency;
+		pd->base = base;
+		pd->bit_shift = idx;
+
+		rmobile_setup_pm_domain(np, pd);
+		if (genpd_parent)
+			pm_genpd_add_subdomain(genpd_parent, &pd->genpd);
+		of_genpd_add_provider_simple(np, &pd->genpd);
+
+		rmobile_add_pm_domains(base, np, &pd->genpd);
+	}
+	return 0;
+}
+
+static int __init rmobile_init_pm_domains(void)
+{
+	struct device_node *np, *pmd;
+	bool scanned = false;
+	void __iomem *base;
+	int ret = 0;
+
+	for_each_compatible_node(np, NULL, "renesas,sysc-rmobile") {
+		base = of_iomap(np, 0);
+		if (!base) {
+			pr_warn("%s cannot map reg 0\n", np->full_name);
+			continue;
+		}
+
+		pmd = of_find_node_by_name(np, "pm-domains");
+		if (!pmd) {
+			pr_warn("%s lacks pm-domains node\n", np->full_name);
+			continue;
+		}
+
+		if (!scanned) {
+			/* Find PM domains containing special blocks */
+			get_special_pds();
+			scanned = true;
+		}
+
+		ret = rmobile_add_pm_domains(base, pmd, NULL);
+		of_node_put(pmd);
+		if (ret) {
+			of_node_put(np);
+			break;
+		}
+	}
+
+	put_special_pds();
+
+	return ret;
+}
+
+core_initcall(rmobile_init_pm_domains);
+
+#endif /* !CONFIG_ARCH_SHMOBILE_LEGACY */
diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
index 0602130bb260c31d..53219786f539fa24 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.h
+++ b/arch/arm/mach-shmobile/pm-rmobile.h
@@ -37,7 +37,7 @@ struct pm_domain_device {
 	struct platform_device *pdev;
 };
 
-#ifdef CONFIG_PM_RMOBILE
+#if defined(CONFIG_PM_RMOBILE) && defined(CONFIG_ARCH_SHMOBILE_LEGACY)
 extern void rmobile_init_domains(struct rmobile_pm_domain domains[], int num);
 extern void rmobile_add_device_to_domain_td(const char *domain_name,
 					    struct platform_device *pdev,
-- 
1.9.1


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

* [PATCH v4 7/9] ARM: shmobile: R-Mobile: Add DT support for PM domains
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

Populate the PM domains from DT, and provide support to hook up devices
to their respective PM domain.

The always-on power area (e.g. C5 on r8a7740) is created as a PM domain
without software control, to allow Run-Time management of module clocks
for hardware blocks inside this area.

Power-on/off latencies are supported.

Special cases like PM domains containing CPUs, the console device, or
Coresight-ETM, are handled by scanning the DT topology.

As long as the ARM debug/perf code doesn't use resource management with
runtime PM support, the power area containing Coresight-ETM (e.g. D4 on
r8a7740) must be kept powered to avoid a crash during resume from s2ram
(dbg_cpu_pm_notify() calls reset_ctrl_regs() unconditionally, causing an
undefined instruction oops).

Initialization is done from core_initcall(), as the
"renesas,intc-irqpin" driver uses postcore_initcall().

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - Always keep D4 powered, until the new Coresight code handles runtime
    PM,
v3:
  - Remove limitations, as fixes for the interrupt storm (A4MP) and
    crash (D4) are available,
  - Scan DT topology to identify special PM domains,
  - Add dependency on chosen/stdout-path,
v2:
  - Fix typo "CPU is _not_ in use",
  - Include build glue,
  - Remove paragraph about missing functionality compared to the legacy
    case, as it is no longer missing (runtime management of module
    clocks, device latencies).
---
 arch/arm/mach-shmobile/Kconfig      |   3 +-
 arch/arm/mach-shmobile/pm-rmobile.c | 220 +++++++++++++++++++++++++++++++++++-
 arch/arm/mach-shmobile/pm-rmobile.h |   2 +-
 3 files changed, 221 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig
index 7cb0a484da536d58..f96528bb45f6389e 100644
--- a/arch/arm/mach-shmobile/Kconfig
+++ b/arch/arm/mach-shmobile/Kconfig
@@ -7,6 +7,7 @@ config PM_RCAR
 
 config PM_RMOBILE
 	bool
+	select PM_GENERIC_DOMAINS
 
 config ARCH_RCAR_GEN1
 	bool
@@ -22,7 +23,7 @@ config ARCH_RCAR_GEN2
 
 config ARCH_RMOBILE
 	bool
-	select PM_RMOBILE if PM && !ARCH_SHMOBILE_MULTI
+	select PM_RMOBILE if PM
 	select SYS_SUPPORTS_SH_CMT
 	select SYS_SUPPORTS_SH_TMU
 
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index f07e994141685baa..e779fd874e006f7b 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2012  Renesas Solutions Corp.
  * Copyright (C) 2012  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+ * Copyright (C) 2014  Glider bvba
  *
  * based on pm-sh7372.c
  *  Copyright (C) 2011 Magnus Damm
@@ -13,10 +14,16 @@
  */
 #include <linux/console.h>
 #include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/pm_clock.h>
+#include <linux/slab.h>
+
 #include <asm/io.h>
+
 #include "pm-rmobile.h"
 
 /* SYSC */
@@ -30,8 +37,12 @@
 static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 {
 	struct rmobile_pm_domain *rmobile_pd = to_rmobile_pd(genpd);
-	unsigned int mask = 1 << rmobile_pd->bit_shift;
+	unsigned int mask;
+
+	if (rmobile_pd->bit_shift == ~0)
+		return -EBUSY;
 
+	mask = 1 << rmobile_pd->bit_shift;
 	if (rmobile_pd->suspend) {
 		int ret = rmobile_pd->suspend();
 
@@ -61,10 +72,14 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 				 bool do_resume)
 {
-	unsigned int mask = 1 << rmobile_pd->bit_shift;
+	unsigned int mask;
 	unsigned int retry_count;
 	int ret = 0;
 
+	if (rmobile_pd->bit_shift == ~0)
+		return 0;
+
+	mask = 1 << rmobile_pd->bit_shift;
 	if (__raw_readl(rmobile_pd->base + PSTR) & mask)
 		goto out;
 
@@ -155,6 +170,8 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 	__rmobile_pd_power_up(rmobile_pd, false);
 }
 
+#ifdef CONFIG_ARCH_SHMOBILE_LEGACY
+
 void rmobile_init_domains(struct rmobile_pm_domain domains[], int num)
 {
 	int j;
@@ -187,3 +204,202 @@ void rmobile_add_devices_to_domains(struct pm_domain_device data[],
 		rmobile_add_device_to_domain_td(data[j].domain_name,
 						data[j].pdev, &latencies);
 }
+
+#else /* !CONFIG_ARCH_SHMOBILE_LEGACY */
+
+static int rmobile_pd_suspend_cpu(void)
+{
+	/*
+	 * This domain contains the CPU core and therefore it should
+	 * only be turned off if the CPU is not in use.
+	 */
+	return -EBUSY;
+}
+
+static int rmobile_pd_suspend_console(void)
+{
+	/*
+	 * Serial consoles make use of SCIF hardware located in this domain,
+	 * hence keep the power domain on if "no_console_suspend" is set.
+	 */
+	return console_suspend_enabled ? 0 : -EBUSY;
+}
+
+static int rmobile_pd_suspend_debug(void)
+{
+	/*
+	 * This domain contains the Coresight-ETM hardware block and
+	 * therefore it should only be turned off if the debug module is
+	 * not in use.
+	 */
+	return -EBUSY;
+}
+
+#define MAX_NUM_CPU_PDS		8
+
+static unsigned int num_cpu_pds __initdata;
+static struct device_node *cpu_pds[MAX_NUM_CPU_PDS] __initdata;
+static struct device_node *console_pd __initdata;
+static struct device_node *debug_pd __initdata;
+
+static void __init get_special_pds(void)
+{
+	struct device_node *np, *pd;
+	unsigned int i;
+
+	/* PM domains containing CPUs */
+	for_each_node_by_type(np, "cpu") {
+		pd = of_parse_phandle(np, "power-domains", 0);
+		if (!pd)
+			continue;
+
+		for (i = 0; i < num_cpu_pds; i++)
+			if (pd == cpu_pds[i])
+				break;
+
+		if (i < num_cpu_pds) {
+			of_node_put(pd);
+			continue;
+		}
+
+		if (num_cpu_pds == MAX_NUM_CPU_PDS) {
+			pr_warn("Too many CPU PM domains\n");
+			of_node_put(pd);
+			continue;
+		}
+
+		cpu_pds[num_cpu_pds++] = pd;
+	}
+
+	/* PM domain containing console */
+	if (of_stdout)
+		console_pd = of_parse_phandle(of_stdout, "power-domains", 0);
+
+	/* PM domain containing Coresight-ETM */
+	np = of_find_compatible_node(NULL, NULL, "arm,coresight-etm3x");
+	if (np)
+		debug_pd = of_parse_phandle(np, "power-domains", 0);
+}
+
+static void __init put_special_pds(void)
+{
+	unsigned int i;
+
+	for (i = 0; i < num_cpu_pds; i++)
+		of_node_put(cpu_pds[i]);
+	of_node_put(console_pd);
+	of_node_put(debug_pd);
+}
+
+static bool __init pd_contains_cpu(const struct device_node *pd)
+{
+	unsigned int i;
+
+	for (i = 0; i < num_cpu_pds; i++)
+		if (pd == cpu_pds[i])
+			return true;
+
+	return false;
+}
+
+static void __init rmobile_setup_pm_domain(struct device_node *np,
+					   struct rmobile_pm_domain *pd)
+{
+	const char *name = pd->genpd.name;
+
+	if (pd_contains_cpu(np)) {
+		pr_debug("PM domain %s contains CPU\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_cpu;
+	} else if (np == console_pd) {
+		pr_debug("PM domain %s contains serial console\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_console;
+	} else if (np == debug_pd) {
+		pr_debug("PM domain %s contains Coresight-ETM\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_debug;
+	}
+
+	rmobile_init_pm_domain(pd);
+}
+
+static int __init rmobile_add_pm_domains(void __iomem *base,
+					 struct device_node *parent,
+					 struct generic_pm_domain *genpd_parent)
+{
+	struct device_node *np;
+
+	for_each_child_of_node(parent, np) {
+		struct rmobile_pm_domain *pd;
+		u32 idx = ~0;
+		u32 latency;
+
+		if (of_property_read_u32(np, "reg", &idx)) {
+			/* always-on domain */
+		}
+
+		pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+		if (!pd)
+			return -ENOMEM;
+
+		pd->genpd.name = np->name;
+		if (!of_property_read_u32(np, "power-on-latency", &latency))
+			pd->genpd.power_on_latency_ns = latency;
+		if (!of_property_read_u32(np, "power-off-latency", &latency))
+			pd->genpd.power_off_latency_ns = latency;
+		pd->base = base;
+		pd->bit_shift = idx;
+
+		rmobile_setup_pm_domain(np, pd);
+		if (genpd_parent)
+			pm_genpd_add_subdomain(genpd_parent, &pd->genpd);
+		of_genpd_add_provider_simple(np, &pd->genpd);
+
+		rmobile_add_pm_domains(base, np, &pd->genpd);
+	}
+	return 0;
+}
+
+static int __init rmobile_init_pm_domains(void)
+{
+	struct device_node *np, *pmd;
+	bool scanned = false;
+	void __iomem *base;
+	int ret = 0;
+
+	for_each_compatible_node(np, NULL, "renesas,sysc-rmobile") {
+		base = of_iomap(np, 0);
+		if (!base) {
+			pr_warn("%s cannot map reg 0\n", np->full_name);
+			continue;
+		}
+
+		pmd = of_find_node_by_name(np, "pm-domains");
+		if (!pmd) {
+			pr_warn("%s lacks pm-domains node\n", np->full_name);
+			continue;
+		}
+
+		if (!scanned) {
+			/* Find PM domains containing special blocks */
+			get_special_pds();
+			scanned = true;
+		}
+
+		ret = rmobile_add_pm_domains(base, pmd, NULL);
+		of_node_put(pmd);
+		if (ret) {
+			of_node_put(np);
+			break;
+		}
+	}
+
+	put_special_pds();
+
+	return ret;
+}
+
+core_initcall(rmobile_init_pm_domains);
+
+#endif /* !CONFIG_ARCH_SHMOBILE_LEGACY */
diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
index 0602130bb260c31d..53219786f539fa24 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.h
+++ b/arch/arm/mach-shmobile/pm-rmobile.h
@@ -37,7 +37,7 @@ struct pm_domain_device {
 	struct platform_device *pdev;
 };
 
-#ifdef CONFIG_PM_RMOBILE
+#if defined(CONFIG_PM_RMOBILE) && defined(CONFIG_ARCH_SHMOBILE_LEGACY)
 extern void rmobile_init_domains(struct rmobile_pm_domain domains[], int num);
 extern void rmobile_add_device_to_domain_td(const char *domain_name,
 					    struct platform_device *pdev,
-- 
1.9.1


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

* [PATCH v4 7/9] ARM: shmobile: R-Mobile: Add DT support for PM domains
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

Populate the PM domains from DT, and provide support to hook up devices
to their respective PM domain.

The always-on power area (e.g. C5 on r8a7740) is created as a PM domain
without software control, to allow Run-Time management of module clocks
for hardware blocks inside this area.

Power-on/off latencies are supported.

Special cases like PM domains containing CPUs, the console device, or
Coresight-ETM, are handled by scanning the DT topology.

As long as the ARM debug/perf code doesn't use resource management with
runtime PM support, the power area containing Coresight-ETM (e.g. D4 on
r8a7740) must be kept powered to avoid a crash during resume from s2ram
(dbg_cpu_pm_notify() calls reset_ctrl_regs() unconditionally, causing an
undefined instruction oops).

Initialization is done from core_initcall(), as the
"renesas,intc-irqpin" driver uses postcore_initcall().

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - Always keep D4 powered, until the new Coresight code handles runtime
    PM,
v3:
  - Remove limitations, as fixes for the interrupt storm (A4MP) and
    crash (D4) are available,
  - Scan DT topology to identify special PM domains,
  - Add dependency on chosen/stdout-path,
v2:
  - Fix typo "CPU is _not_ in use",
  - Include build glue,
  - Remove paragraph about missing functionality compared to the legacy
    case, as it is no longer missing (runtime management of module
    clocks, device latencies).
---
 arch/arm/mach-shmobile/Kconfig      |   3 +-
 arch/arm/mach-shmobile/pm-rmobile.c | 220 +++++++++++++++++++++++++++++++++++-
 arch/arm/mach-shmobile/pm-rmobile.h |   2 +-
 3 files changed, 221 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig
index 7cb0a484da536d58..f96528bb45f6389e 100644
--- a/arch/arm/mach-shmobile/Kconfig
+++ b/arch/arm/mach-shmobile/Kconfig
@@ -7,6 +7,7 @@ config PM_RCAR
 
 config PM_RMOBILE
 	bool
+	select PM_GENERIC_DOMAINS
 
 config ARCH_RCAR_GEN1
 	bool
@@ -22,7 +23,7 @@ config ARCH_RCAR_GEN2
 
 config ARCH_RMOBILE
 	bool
-	select PM_RMOBILE if PM && !ARCH_SHMOBILE_MULTI
+	select PM_RMOBILE if PM
 	select SYS_SUPPORTS_SH_CMT
 	select SYS_SUPPORTS_SH_TMU
 
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index f07e994141685baa..e779fd874e006f7b 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2012  Renesas Solutions Corp.
  * Copyright (C) 2012  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+ * Copyright (C) 2014  Glider bvba
  *
  * based on pm-sh7372.c
  *  Copyright (C) 2011 Magnus Damm
@@ -13,10 +14,16 @@
  */
 #include <linux/console.h>
 #include <linux/delay.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/pm_clock.h>
+#include <linux/slab.h>
+
 #include <asm/io.h>
+
 #include "pm-rmobile.h"
 
 /* SYSC */
@@ -30,8 +37,12 @@
 static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 {
 	struct rmobile_pm_domain *rmobile_pd = to_rmobile_pd(genpd);
-	unsigned int mask = 1 << rmobile_pd->bit_shift;
+	unsigned int mask;
+
+	if (rmobile_pd->bit_shift == ~0)
+		return -EBUSY;
 
+	mask = 1 << rmobile_pd->bit_shift;
 	if (rmobile_pd->suspend) {
 		int ret = rmobile_pd->suspend();
 
@@ -61,10 +72,14 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 				 bool do_resume)
 {
-	unsigned int mask = 1 << rmobile_pd->bit_shift;
+	unsigned int mask;
 	unsigned int retry_count;
 	int ret = 0;
 
+	if (rmobile_pd->bit_shift == ~0)
+		return 0;
+
+	mask = 1 << rmobile_pd->bit_shift;
 	if (__raw_readl(rmobile_pd->base + PSTR) & mask)
 		goto out;
 
@@ -155,6 +170,8 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
 	__rmobile_pd_power_up(rmobile_pd, false);
 }
 
+#ifdef CONFIG_ARCH_SHMOBILE_LEGACY
+
 void rmobile_init_domains(struct rmobile_pm_domain domains[], int num)
 {
 	int j;
@@ -187,3 +204,202 @@ void rmobile_add_devices_to_domains(struct pm_domain_device data[],
 		rmobile_add_device_to_domain_td(data[j].domain_name,
 						data[j].pdev, &latencies);
 }
+
+#else /* !CONFIG_ARCH_SHMOBILE_LEGACY */
+
+static int rmobile_pd_suspend_cpu(void)
+{
+	/*
+	 * This domain contains the CPU core and therefore it should
+	 * only be turned off if the CPU is not in use.
+	 */
+	return -EBUSY;
+}
+
+static int rmobile_pd_suspend_console(void)
+{
+	/*
+	 * Serial consoles make use of SCIF hardware located in this domain,
+	 * hence keep the power domain on if "no_console_suspend" is set.
+	 */
+	return console_suspend_enabled ? 0 : -EBUSY;
+}
+
+static int rmobile_pd_suspend_debug(void)
+{
+	/*
+	 * This domain contains the Coresight-ETM hardware block and
+	 * therefore it should only be turned off if the debug module is
+	 * not in use.
+	 */
+	return -EBUSY;
+}
+
+#define MAX_NUM_CPU_PDS		8
+
+static unsigned int num_cpu_pds __initdata;
+static struct device_node *cpu_pds[MAX_NUM_CPU_PDS] __initdata;
+static struct device_node *console_pd __initdata;
+static struct device_node *debug_pd __initdata;
+
+static void __init get_special_pds(void)
+{
+	struct device_node *np, *pd;
+	unsigned int i;
+
+	/* PM domains containing CPUs */
+	for_each_node_by_type(np, "cpu") {
+		pd = of_parse_phandle(np, "power-domains", 0);
+		if (!pd)
+			continue;
+
+		for (i = 0; i < num_cpu_pds; i++)
+			if (pd == cpu_pds[i])
+				break;
+
+		if (i < num_cpu_pds) {
+			of_node_put(pd);
+			continue;
+		}
+
+		if (num_cpu_pds == MAX_NUM_CPU_PDS) {
+			pr_warn("Too many CPU PM domains\n");
+			of_node_put(pd);
+			continue;
+		}
+
+		cpu_pds[num_cpu_pds++] = pd;
+	}
+
+	/* PM domain containing console */
+	if (of_stdout)
+		console_pd = of_parse_phandle(of_stdout, "power-domains", 0);
+
+	/* PM domain containing Coresight-ETM */
+	np = of_find_compatible_node(NULL, NULL, "arm,coresight-etm3x");
+	if (np)
+		debug_pd = of_parse_phandle(np, "power-domains", 0);
+}
+
+static void __init put_special_pds(void)
+{
+	unsigned int i;
+
+	for (i = 0; i < num_cpu_pds; i++)
+		of_node_put(cpu_pds[i]);
+	of_node_put(console_pd);
+	of_node_put(debug_pd);
+}
+
+static bool __init pd_contains_cpu(const struct device_node *pd)
+{
+	unsigned int i;
+
+	for (i = 0; i < num_cpu_pds; i++)
+		if (pd == cpu_pds[i])
+			return true;
+
+	return false;
+}
+
+static void __init rmobile_setup_pm_domain(struct device_node *np,
+					   struct rmobile_pm_domain *pd)
+{
+	const char *name = pd->genpd.name;
+
+	if (pd_contains_cpu(np)) {
+		pr_debug("PM domain %s contains CPU\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_cpu;
+	} else if (np == console_pd) {
+		pr_debug("PM domain %s contains serial console\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_console;
+	} else if (np == debug_pd) {
+		pr_debug("PM domain %s contains Coresight-ETM\n", name);
+		pd->gov = &pm_domain_always_on_gov;
+		pd->suspend = rmobile_pd_suspend_debug;
+	}
+
+	rmobile_init_pm_domain(pd);
+}
+
+static int __init rmobile_add_pm_domains(void __iomem *base,
+					 struct device_node *parent,
+					 struct generic_pm_domain *genpd_parent)
+{
+	struct device_node *np;
+
+	for_each_child_of_node(parent, np) {
+		struct rmobile_pm_domain *pd;
+		u32 idx = ~0;
+		u32 latency;
+
+		if (of_property_read_u32(np, "reg", &idx)) {
+			/* always-on domain */
+		}
+
+		pd = kzalloc(sizeof(*pd), GFP_KERNEL);
+		if (!pd)
+			return -ENOMEM;
+
+		pd->genpd.name = np->name;
+		if (!of_property_read_u32(np, "power-on-latency", &latency))
+			pd->genpd.power_on_latency_ns = latency;
+		if (!of_property_read_u32(np, "power-off-latency", &latency))
+			pd->genpd.power_off_latency_ns = latency;
+		pd->base = base;
+		pd->bit_shift = idx;
+
+		rmobile_setup_pm_domain(np, pd);
+		if (genpd_parent)
+			pm_genpd_add_subdomain(genpd_parent, &pd->genpd);
+		of_genpd_add_provider_simple(np, &pd->genpd);
+
+		rmobile_add_pm_domains(base, np, &pd->genpd);
+	}
+	return 0;
+}
+
+static int __init rmobile_init_pm_domains(void)
+{
+	struct device_node *np, *pmd;
+	bool scanned = false;
+	void __iomem *base;
+	int ret = 0;
+
+	for_each_compatible_node(np, NULL, "renesas,sysc-rmobile") {
+		base = of_iomap(np, 0);
+		if (!base) {
+			pr_warn("%s cannot map reg 0\n", np->full_name);
+			continue;
+		}
+
+		pmd = of_find_node_by_name(np, "pm-domains");
+		if (!pmd) {
+			pr_warn("%s lacks pm-domains node\n", np->full_name);
+			continue;
+		}
+
+		if (!scanned) {
+			/* Find PM domains containing special blocks */
+			get_special_pds();
+			scanned = true;
+		}
+
+		ret = rmobile_add_pm_domains(base, pmd, NULL);
+		of_node_put(pmd);
+		if (ret) {
+			of_node_put(np);
+			break;
+		}
+	}
+
+	put_special_pds();
+
+	return ret;
+}
+
+core_initcall(rmobile_init_pm_domains);
+
+#endif /* !CONFIG_ARCH_SHMOBILE_LEGACY */
diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
index 0602130bb260c31d..53219786f539fa24 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.h
+++ b/arch/arm/mach-shmobile/pm-rmobile.h
@@ -37,7 +37,7 @@ struct pm_domain_device {
 	struct platform_device *pdev;
 };
 
-#ifdef CONFIG_PM_RMOBILE
+#if defined(CONFIG_PM_RMOBILE) && defined(CONFIG_ARCH_SHMOBILE_LEGACY)
 extern void rmobile_init_domains(struct rmobile_pm_domain domains[], int num);
 extern void rmobile_add_device_to_domain_td(const char *domain_name,
 					    struct platform_device *pdev,
-- 
1.9.1

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

* [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

Add a device node for the System Controller, with subnodes that
represent the hardware power area hierarchy.
Hook up all devices to their respective PM domains.

Add a minimal device node for the Coresight-ETM hardware block, and hook
it up to the D4 PM domain, so the R-Mobile System Controller driver can
keep the domain powered, until the new Coresight code handles runtime
PM.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - Remove power-domains properties from clocks, as these will not be
    instantiated as platform devices,
  - Fix indentation of power-domains property in pfc node,
  - Add minimal node for Coresight-ETM,
  - Add power-domains properties to the recently added TMU nodes,
v3:
  - Move power-on/off latencies to a separate patch,
  - Add dependencies,
v2:
  - Insert power-domains property after clock-names property in the cmt1
    node.
---
 arch/arm/boot/dts/r8a7740.dtsi | 99 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
index aec8da89ef9ac766..20d2b56773fbf069 100644
--- a/arch/arm/boot/dts/r8a7740.dtsi
+++ b/arch/arm/boot/dts/r8a7740.dtsi
@@ -25,6 +25,7 @@
 			device_type = "cpu";
 			reg = <0x0>;
 			clock-frequency = <800000000>;
+			power-domains = <&pd_a3sm>;
 		};
 	};
 
@@ -41,12 +42,18 @@
 		interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
 	};
 
+	ptm {
+		compatible = "arm,coresight-etm3x";
+		power-domains = <&pd_d4>;
+	};
+
 	cmt1: timer@e6138000 {
 		compatible = "renesas,cmt-48-r8a7740", "renesas,cmt-48";
 		reg = <0xe6138000 0x170>;
 		interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
 		clock-names = "fck";
+		power-domains = <&pd_c5>;
 
 		renesas,channels-mask = <0x3f>;
 
@@ -72,6 +79,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin1: IRQ8 - IRQ15 */
@@ -93,6 +101,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin2: IRQ16 - IRQ23 */
@@ -114,6 +123,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin3: IRQ24 - IRQ31 */
@@ -135,6 +145,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	ether: ethernet@e9a00000 {
@@ -143,6 +154,7 @@
 		      <0xe9a01800 0x800>;
 		interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_GETHER>;
+		power-domains = <&pd_a4s>;
 		phy-mode = "mii";
 		#address-cells = <1>;
 		#size-cells = <0>;
@@ -159,6 +171,7 @@
 			      0 203 IRQ_TYPE_LEVEL_HIGH
 			      0 204 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_IIC0>;
+		power-domains = <&pd_a4r>;
 		status = "disabled";
 	};
 
@@ -172,6 +185,7 @@
 			      0 72 IRQ_TYPE_LEVEL_HIGH
 			      0 73 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_IIC1>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -181,6 +195,7 @@
 		interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA0>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -190,6 +205,7 @@
 		interrupts = <0 101 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA1>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -199,6 +215,7 @@
 		interrupts = <0 102 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA2>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -208,6 +225,7 @@
 		interrupts = <0 103 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA3>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -217,6 +235,7 @@
 		interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA4>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -226,6 +245,7 @@
 		interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA5>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -235,6 +255,7 @@
 		interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA6>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -244,6 +265,7 @@
 		interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA7>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -253,6 +275,7 @@
 		interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFB>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -271,12 +294,14 @@
 			<&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>,
 			<&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>,
 			<&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>;
+		power-domains = <&pd_c5>;
 	};
 
 	tpu: pwm@e6600000 {
 		compatible = "renesas,tpu-r8a7740", "renesas,tpu";
 		reg = <0xe6600000 0x100>;
 		clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 		#pwm-cells = <3>;
 	};
@@ -287,6 +312,7 @@
 		interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH
 			      0 57 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_MMC>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -297,6 +323,7 @@
 			      0 118 IRQ_TYPE_LEVEL_HIGH
 			      0 119 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_SDHI0>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -309,6 +336,7 @@
 			      0 122 IRQ_TYPE_LEVEL_HIGH
 			      0 123 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_SDHI1>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -321,6 +349,7 @@
 			      0 126 IRQ_TYPE_LEVEL_HIGH
 			      0 127 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp4_clks R8A7740_CLK_SDHI2>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -332,6 +361,7 @@
 		reg = <0xfe1f0000 0x400>;
 		interrupts = <0 9 0x4>;
 		clocks = <&mstp3_clks R8A7740_CLK_FSI>;
+		power-domains = <&pd_a4mp>;
 		status = "disabled";
 	};
 
@@ -343,6 +373,7 @@
 			     <0 200 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_TMU0>;
 		clock-names = "fck";
+		power-domains = <&pd_a4r>;
 
 		#renesas,channels = <3>;
 
@@ -357,6 +388,7 @@
 			     <0 172 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_TMU1>;
 		clock-names = "fck";
+		power-domains = <&pd_a4r>;
 
 		#renesas,channels = <3>;
 
@@ -543,4 +575,71 @@
 				"usbhost", "sdhi2", "usbfunc", "usphy";
 		};
 	};
+
+	sysc: system-controller@e6180000 {
+		compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
+		reg = <0xe6180000 8000>, <0xe6188000 8000>;
+
+		pm-domains {
+			pd_c5: c5 {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				#power-domain-cells = <0>;
+
+				pd_a4lc: a4lc@1 {
+					reg = <1>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_a4mp: a4mp@2 {
+					reg = <2>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_d4: d4@3 {
+					reg = <3>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_a4r: a4r@5 {
+					reg = <5>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+
+					pd_a3rv: a3rv@6 {
+						reg = <6>;
+						#power-domain-cells = <0>;
+					};
+				};
+
+				pd_a4s: a4s@10 {
+					reg = <10>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+
+					pd_a3sp: a3sp@11 {
+						reg = <11>;
+						#power-domain-cells = <0>;
+					};
+
+					pd_a3sm: a3sm@12 {
+						reg = <12>;
+						#power-domain-cells = <0>;
+					};
+
+					pd_a3sg: a3sg@13 {
+						reg = <13>;
+						#power-domain-cells = <0>;
+					};
+				};
+
+				pd_a4su: a4su@20 {
+					reg = <20>;
+					#power-domain-cells = <0>;
+				};
+			};
+		};
+	};
 };
-- 
1.9.1


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

* [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

Add a device node for the System Controller, with subnodes that
represent the hardware power area hierarchy.
Hook up all devices to their respective PM domains.

Add a minimal device node for the Coresight-ETM hardware block, and hook
it up to the D4 PM domain, so the R-Mobile System Controller driver can
keep the domain powered, until the new Coresight code handles runtime
PM.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - Remove power-domains properties from clocks, as these will not be
    instantiated as platform devices,
  - Fix indentation of power-domains property in pfc node,
  - Add minimal node for Coresight-ETM,
  - Add power-domains properties to the recently added TMU nodes,
v3:
  - Move power-on/off latencies to a separate patch,
  - Add dependencies,
v2:
  - Insert power-domains property after clock-names property in the cmt1
    node.
---
 arch/arm/boot/dts/r8a7740.dtsi | 99 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
index aec8da89ef9ac766..20d2b56773fbf069 100644
--- a/arch/arm/boot/dts/r8a7740.dtsi
+++ b/arch/arm/boot/dts/r8a7740.dtsi
@@ -25,6 +25,7 @@
 			device_type = "cpu";
 			reg = <0x0>;
 			clock-frequency = <800000000>;
+			power-domains = <&pd_a3sm>;
 		};
 	};
 
@@ -41,12 +42,18 @@
 		interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
 	};
 
+	ptm {
+		compatible = "arm,coresight-etm3x";
+		power-domains = <&pd_d4>;
+	};
+
 	cmt1: timer@e6138000 {
 		compatible = "renesas,cmt-48-r8a7740", "renesas,cmt-48";
 		reg = <0xe6138000 0x170>;
 		interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
 		clock-names = "fck";
+		power-domains = <&pd_c5>;
 
 		renesas,channels-mask = <0x3f>;
 
@@ -72,6 +79,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin1: IRQ8 - IRQ15 */
@@ -93,6 +101,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin2: IRQ16 - IRQ23 */
@@ -114,6 +123,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin3: IRQ24 - IRQ31 */
@@ -135,6 +145,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	ether: ethernet@e9a00000 {
@@ -143,6 +154,7 @@
 		      <0xe9a01800 0x800>;
 		interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_GETHER>;
+		power-domains = <&pd_a4s>;
 		phy-mode = "mii";
 		#address-cells = <1>;
 		#size-cells = <0>;
@@ -159,6 +171,7 @@
 			      0 203 IRQ_TYPE_LEVEL_HIGH
 			      0 204 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_IIC0>;
+		power-domains = <&pd_a4r>;
 		status = "disabled";
 	};
 
@@ -172,6 +185,7 @@
 			      0 72 IRQ_TYPE_LEVEL_HIGH
 			      0 73 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_IIC1>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -181,6 +195,7 @@
 		interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA0>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -190,6 +205,7 @@
 		interrupts = <0 101 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA1>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -199,6 +215,7 @@
 		interrupts = <0 102 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA2>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -208,6 +225,7 @@
 		interrupts = <0 103 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA3>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -217,6 +235,7 @@
 		interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA4>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -226,6 +245,7 @@
 		interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA5>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -235,6 +255,7 @@
 		interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA6>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -244,6 +265,7 @@
 		interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA7>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -253,6 +275,7 @@
 		interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFB>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -271,12 +294,14 @@
 			<&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>,
 			<&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>,
 			<&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>;
+		power-domains = <&pd_c5>;
 	};
 
 	tpu: pwm@e6600000 {
 		compatible = "renesas,tpu-r8a7740", "renesas,tpu";
 		reg = <0xe6600000 0x100>;
 		clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 		#pwm-cells = <3>;
 	};
@@ -287,6 +312,7 @@
 		interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH
 			      0 57 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_MMC>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -297,6 +323,7 @@
 			      0 118 IRQ_TYPE_LEVEL_HIGH
 			      0 119 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_SDHI0>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -309,6 +336,7 @@
 			      0 122 IRQ_TYPE_LEVEL_HIGH
 			      0 123 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_SDHI1>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -321,6 +349,7 @@
 			      0 126 IRQ_TYPE_LEVEL_HIGH
 			      0 127 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp4_clks R8A7740_CLK_SDHI2>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -332,6 +361,7 @@
 		reg = <0xfe1f0000 0x400>;
 		interrupts = <0 9 0x4>;
 		clocks = <&mstp3_clks R8A7740_CLK_FSI>;
+		power-domains = <&pd_a4mp>;
 		status = "disabled";
 	};
 
@@ -343,6 +373,7 @@
 			     <0 200 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_TMU0>;
 		clock-names = "fck";
+		power-domains = <&pd_a4r>;
 
 		#renesas,channels = <3>;
 
@@ -357,6 +388,7 @@
 			     <0 172 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_TMU1>;
 		clock-names = "fck";
+		power-domains = <&pd_a4r>;
 
 		#renesas,channels = <3>;
 
@@ -543,4 +575,71 @@
 				"usbhost", "sdhi2", "usbfunc", "usphy";
 		};
 	};
+
+	sysc: system-controller@e6180000 {
+		compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
+		reg = <0xe6180000 8000>, <0xe6188000 8000>;
+
+		pm-domains {
+			pd_c5: c5 {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				#power-domain-cells = <0>;
+
+				pd_a4lc: a4lc@1 {
+					reg = <1>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_a4mp: a4mp@2 {
+					reg = <2>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_d4: d4@3 {
+					reg = <3>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_a4r: a4r@5 {
+					reg = <5>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+
+					pd_a3rv: a3rv@6 {
+						reg = <6>;
+						#power-domain-cells = <0>;
+					};
+				};
+
+				pd_a4s: a4s@10 {
+					reg = <10>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+
+					pd_a3sp: a3sp@11 {
+						reg = <11>;
+						#power-domain-cells = <0>;
+					};
+
+					pd_a3sm: a3sm@12 {
+						reg = <12>;
+						#power-domain-cells = <0>;
+					};
+
+					pd_a3sg: a3sg@13 {
+						reg = <13>;
+						#power-domain-cells = <0>;
+					};
+				};
+
+				pd_a4su: a4su@20 {
+					reg = <20>;
+					#power-domain-cells = <0>;
+				};
+			};
+		};
+	};
 };
-- 
1.9.1


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

* [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: devicetree, Ulf Hansson, Grygorii Strashko, Geert Uytterhoeven,
	linux-sh, linux-pm, Tomasz Figa, linux-kernel, Kevin Hilman,
	Philipp Zabel, linux-arm-kernel

Add a device node for the System Controller, with subnodes that
represent the hardware power area hierarchy.
Hook up all devices to their respective PM domains.

Add a minimal device node for the Coresight-ETM hardware block, and hook
it up to the D4 PM domain, so the R-Mobile System Controller driver can
keep the domain powered, until the new Coresight code handles runtime
PM.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - Remove power-domains properties from clocks, as these will not be
    instantiated as platform devices,
  - Fix indentation of power-domains property in pfc node,
  - Add minimal node for Coresight-ETM,
  - Add power-domains properties to the recently added TMU nodes,
v3:
  - Move power-on/off latencies to a separate patch,
  - Add dependencies,
v2:
  - Insert power-domains property after clock-names property in the cmt1
    node.
---
 arch/arm/boot/dts/r8a7740.dtsi | 99 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
index aec8da89ef9ac766..20d2b56773fbf069 100644
--- a/arch/arm/boot/dts/r8a7740.dtsi
+++ b/arch/arm/boot/dts/r8a7740.dtsi
@@ -25,6 +25,7 @@
 			device_type = "cpu";
 			reg = <0x0>;
 			clock-frequency = <800000000>;
+			power-domains = <&pd_a3sm>;
 		};
 	};
 
@@ -41,12 +42,18 @@
 		interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
 	};
 
+	ptm {
+		compatible = "arm,coresight-etm3x";
+		power-domains = <&pd_d4>;
+	};
+
 	cmt1: timer@e6138000 {
 		compatible = "renesas,cmt-48-r8a7740", "renesas,cmt-48";
 		reg = <0xe6138000 0x170>;
 		interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
 		clock-names = "fck";
+		power-domains = <&pd_c5>;
 
 		renesas,channels-mask = <0x3f>;
 
@@ -72,6 +79,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin1: IRQ8 - IRQ15 */
@@ -93,6 +101,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin2: IRQ16 - IRQ23 */
@@ -114,6 +123,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin3: IRQ24 - IRQ31 */
@@ -135,6 +145,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	ether: ethernet@e9a00000 {
@@ -143,6 +154,7 @@
 		      <0xe9a01800 0x800>;
 		interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_GETHER>;
+		power-domains = <&pd_a4s>;
 		phy-mode = "mii";
 		#address-cells = <1>;
 		#size-cells = <0>;
@@ -159,6 +171,7 @@
 			      0 203 IRQ_TYPE_LEVEL_HIGH
 			      0 204 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_IIC0>;
+		power-domains = <&pd_a4r>;
 		status = "disabled";
 	};
 
@@ -172,6 +185,7 @@
 			      0 72 IRQ_TYPE_LEVEL_HIGH
 			      0 73 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_IIC1>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -181,6 +195,7 @@
 		interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA0>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -190,6 +205,7 @@
 		interrupts = <0 101 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA1>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -199,6 +215,7 @@
 		interrupts = <0 102 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA2>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -208,6 +225,7 @@
 		interrupts = <0 103 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA3>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -217,6 +235,7 @@
 		interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA4>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -226,6 +245,7 @@
 		interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA5>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -235,6 +255,7 @@
 		interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA6>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -244,6 +265,7 @@
 		interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA7>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -253,6 +275,7 @@
 		interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFB>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -271,12 +294,14 @@
 			<&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>,
 			<&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>,
 			<&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>;
+		power-domains = <&pd_c5>;
 	};
 
 	tpu: pwm@e6600000 {
 		compatible = "renesas,tpu-r8a7740", "renesas,tpu";
 		reg = <0xe6600000 0x100>;
 		clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 		#pwm-cells = <3>;
 	};
@@ -287,6 +312,7 @@
 		interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH
 			      0 57 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_MMC>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -297,6 +323,7 @@
 			      0 118 IRQ_TYPE_LEVEL_HIGH
 			      0 119 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_SDHI0>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -309,6 +336,7 @@
 			      0 122 IRQ_TYPE_LEVEL_HIGH
 			      0 123 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_SDHI1>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -321,6 +349,7 @@
 			      0 126 IRQ_TYPE_LEVEL_HIGH
 			      0 127 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp4_clks R8A7740_CLK_SDHI2>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -332,6 +361,7 @@
 		reg = <0xfe1f0000 0x400>;
 		interrupts = <0 9 0x4>;
 		clocks = <&mstp3_clks R8A7740_CLK_FSI>;
+		power-domains = <&pd_a4mp>;
 		status = "disabled";
 	};
 
@@ -343,6 +373,7 @@
 			     <0 200 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_TMU0>;
 		clock-names = "fck";
+		power-domains = <&pd_a4r>;
 
 		#renesas,channels = <3>;
 
@@ -357,6 +388,7 @@
 			     <0 172 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_TMU1>;
 		clock-names = "fck";
+		power-domains = <&pd_a4r>;
 
 		#renesas,channels = <3>;
 
@@ -543,4 +575,71 @@
 				"usbhost", "sdhi2", "usbfunc", "usphy";
 		};
 	};
+
+	sysc: system-controller@e6180000 {
+		compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
+		reg = <0xe6180000 8000>, <0xe6188000 8000>;
+
+		pm-domains {
+			pd_c5: c5 {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				#power-domain-cells = <0>;
+
+				pd_a4lc: a4lc@1 {
+					reg = <1>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_a4mp: a4mp@2 {
+					reg = <2>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_d4: d4@3 {
+					reg = <3>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_a4r: a4r@5 {
+					reg = <5>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+
+					pd_a3rv: a3rv@6 {
+						reg = <6>;
+						#power-domain-cells = <0>;
+					};
+				};
+
+				pd_a4s: a4s@10 {
+					reg = <10>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+
+					pd_a3sp: a3sp@11 {
+						reg = <11>;
+						#power-domain-cells = <0>;
+					};
+
+					pd_a3sm: a3sm@12 {
+						reg = <12>;
+						#power-domain-cells = <0>;
+					};
+
+					pd_a3sg: a3sg@13 {
+						reg = <13>;
+						#power-domain-cells = <0>;
+					};
+				};
+
+				pd_a4su: a4su@20 {
+					reg = <20>;
+					#power-domain-cells = <0>;
+				};
+			};
+		};
+	};
 };
-- 
1.9.1

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

* [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

Add a device node for the System Controller, with subnodes that
represent the hardware power area hierarchy.
Hook up all devices to their respective PM domains.

Add a minimal device node for the Coresight-ETM hardware block, and hook
it up to the D4 PM domain, so the R-Mobile System Controller driver can
keep the domain powered, until the new Coresight code handles runtime
PM.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - Remove power-domains properties from clocks, as these will not be
    instantiated as platform devices,
  - Fix indentation of power-domains property in pfc node,
  - Add minimal node for Coresight-ETM,
  - Add power-domains properties to the recently added TMU nodes,
v3:
  - Move power-on/off latencies to a separate patch,
  - Add dependencies,
v2:
  - Insert power-domains property after clock-names property in the cmt1
    node.
---
 arch/arm/boot/dts/r8a7740.dtsi | 99 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
index aec8da89ef9ac766..20d2b56773fbf069 100644
--- a/arch/arm/boot/dts/r8a7740.dtsi
+++ b/arch/arm/boot/dts/r8a7740.dtsi
@@ -25,6 +25,7 @@
 			device_type = "cpu";
 			reg = <0x0>;
 			clock-frequency = <800000000>;
+			power-domains = <&pd_a3sm>;
 		};
 	};
 
@@ -41,12 +42,18 @@
 		interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
 	};
 
+	ptm {
+		compatible = "arm,coresight-etm3x";
+		power-domains = <&pd_d4>;
+	};
+
 	cmt1: timer at e6138000 {
 		compatible = "renesas,cmt-48-r8a7740", "renesas,cmt-48";
 		reg = <0xe6138000 0x170>;
 		interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
 		clock-names = "fck";
+		power-domains = <&pd_c5>;
 
 		renesas,channels-mask = <0x3f>;
 
@@ -72,6 +79,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin1: IRQ8 - IRQ15 */
@@ -93,6 +101,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin2: IRQ16 - IRQ23 */
@@ -114,6 +123,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	/* irqpin3: IRQ24 - IRQ31 */
@@ -135,6 +145,7 @@
 			      0 149 IRQ_TYPE_LEVEL_HIGH
 			      0 149 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
+		power-domains = <&pd_a4s>;
 	};
 
 	ether: ethernet at e9a00000 {
@@ -143,6 +154,7 @@
 		      <0xe9a01800 0x800>;
 		interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_GETHER>;
+		power-domains = <&pd_a4s>;
 		phy-mode = "mii";
 		#address-cells = <1>;
 		#size-cells = <0>;
@@ -159,6 +171,7 @@
 			      0 203 IRQ_TYPE_LEVEL_HIGH
 			      0 204 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_IIC0>;
+		power-domains = <&pd_a4r>;
 		status = "disabled";
 	};
 
@@ -172,6 +185,7 @@
 			      0 72 IRQ_TYPE_LEVEL_HIGH
 			      0 73 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_IIC1>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -181,6 +195,7 @@
 		interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA0>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -190,6 +205,7 @@
 		interrupts = <0 101 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA1>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -199,6 +215,7 @@
 		interrupts = <0 102 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA2>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -208,6 +225,7 @@
 		interrupts = <0 103 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA3>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -217,6 +235,7 @@
 		interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA4>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -226,6 +245,7 @@
 		interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA5>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -235,6 +255,7 @@
 		interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA6>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -244,6 +265,7 @@
 		interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFA7>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -253,6 +275,7 @@
 		interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp2_clks R8A7740_CLK_SCIFB>;
 		clock-names = "sci_ick";
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -271,12 +294,14 @@
 			<&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>,
 			<&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>,
 			<&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>;
+		power-domains = <&pd_c5>;
 	};
 
 	tpu: pwm at e6600000 {
 		compatible = "renesas,tpu-r8a7740", "renesas,tpu";
 		reg = <0xe6600000 0x100>;
 		clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 		#pwm-cells = <3>;
 	};
@@ -287,6 +312,7 @@
 		interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH
 			      0 57 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_MMC>;
+		power-domains = <&pd_a3sp>;
 		status = "disabled";
 	};
 
@@ -297,6 +323,7 @@
 			      0 118 IRQ_TYPE_LEVEL_HIGH
 			      0 119 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_SDHI0>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -309,6 +336,7 @@
 			      0 122 IRQ_TYPE_LEVEL_HIGH
 			      0 123 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp3_clks R8A7740_CLK_SDHI1>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -321,6 +349,7 @@
 			      0 126 IRQ_TYPE_LEVEL_HIGH
 			      0 127 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp4_clks R8A7740_CLK_SDHI2>;
+		power-domains = <&pd_a3sp>;
 		cap-sd-highspeed;
 		cap-sdio-irq;
 		status = "disabled";
@@ -332,6 +361,7 @@
 		reg = <0xfe1f0000 0x400>;
 		interrupts = <0 9 0x4>;
 		clocks = <&mstp3_clks R8A7740_CLK_FSI>;
+		power-domains = <&pd_a4mp>;
 		status = "disabled";
 	};
 
@@ -343,6 +373,7 @@
 			     <0 200 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_TMU0>;
 		clock-names = "fck";
+		power-domains = <&pd_a4r>;
 
 		#renesas,channels = <3>;
 
@@ -357,6 +388,7 @@
 			     <0 172 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&mstp1_clks R8A7740_CLK_TMU1>;
 		clock-names = "fck";
+		power-domains = <&pd_a4r>;
 
 		#renesas,channels = <3>;
 
@@ -543,4 +575,71 @@
 				"usbhost", "sdhi2", "usbfunc", "usphy";
 		};
 	};
+
+	sysc: system-controller at e6180000 {
+		compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
+		reg = <0xe6180000 8000>, <0xe6188000 8000>;
+
+		pm-domains {
+			pd_c5: c5 {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				#power-domain-cells = <0>;
+
+				pd_a4lc: a4lc at 1 {
+					reg = <1>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_a4mp: a4mp at 2 {
+					reg = <2>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_d4: d4 at 3 {
+					reg = <3>;
+					#power-domain-cells = <0>;
+				};
+
+				pd_a4r: a4r at 5 {
+					reg = <5>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+
+					pd_a3rv: a3rv at 6 {
+						reg = <6>;
+						#power-domain-cells = <0>;
+					};
+				};
+
+				pd_a4s: a4s at 10 {
+					reg = <10>;
+					#address-cells = <1>;
+					#size-cells = <0>;
+					#power-domain-cells = <0>;
+
+					pd_a3sp: a3sp at 11 {
+						reg = <11>;
+						#power-domain-cells = <0>;
+					};
+
+					pd_a3sm: a3sm at 12 {
+						reg = <12>;
+						#power-domain-cells = <0>;
+					};
+
+					pd_a3sg: a3sg at 13 {
+						reg = <13>;
+						#power-domain-cells = <0>;
+					};
+				};
+
+				pd_a4su: a4su at 20 {
+					reg = <20>;
+					#power-domain-cells = <0>;
+				};
+			};
+		};
+	};
 };
-- 
1.9.1

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

* [PATCH v4 9/9] drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  -1 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

If the default PM domain using PM_CLK is used for PM runtime, the real PM
domain(s) cannot be registered from DT later.

Hence do not enable it when running a multi-platform kernel with genpd
support on an r8a7740. The R-Mobile PM domain driver will take care of
PM runtime management of the module clocks.

The default PM domain is still needed for:
  - platforms without genpd support,
  - the legacy (non-DT) case, where genpd may take over later, except
    for the C5 "always on" PM domain.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - No changes,
v3:
  - Reword,
v2:
  - New.
---
 drivers/sh/pm_runtime.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/sh/pm_runtime.c b/drivers/sh/pm_runtime.c
index fe2c2d595f599b2f..85cc89fd3e7d7cb7 100644
--- a/drivers/sh/pm_runtime.c
+++ b/drivers/sh/pm_runtime.c
@@ -81,7 +81,9 @@ static int __init sh_pm_runtime_init(void)
 		if (!of_machine_is_compatible("renesas,emev2") &&
 		    !of_machine_is_compatible("renesas,r7s72100") &&
 		    !of_machine_is_compatible("renesas,r8a73a4") &&
+#ifndef CONFIG_PM_GENERIC_DOMAINS_OF
 		    !of_machine_is_compatible("renesas,r8a7740") &&
+#endif
 		    !of_machine_is_compatible("renesas,r8a7778") &&
 		    !of_machine_is_compatible("renesas,r8a7779") &&
 		    !of_machine_is_compatible("renesas,r8a7790") &&
-- 
1.9.1


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

* [PATCH v4 9/9] drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Simon Horman, Magnus Damm
  Cc: Ulf Hansson, Kevin Hilman, Grygorii Strashko, Philipp Zabel,
	Tomasz Figa, linux-sh, linux-pm, linux-arm-kernel, devicetree,
	linux-kernel, Geert Uytterhoeven

If the default PM domain using PM_CLK is used for PM runtime, the real PM
domain(s) cannot be registered from DT later.

Hence do not enable it when running a multi-platform kernel with genpd
support on an r8a7740. The R-Mobile PM domain driver will take care of
PM runtime management of the module clocks.

The default PM domain is still needed for:
  - platforms without genpd support,
  - the legacy (non-DT) case, where genpd may take over later, except
    for the C5 "always on" PM domain.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - No changes,
v3:
  - Reword,
v2:
  - New.
---
 drivers/sh/pm_runtime.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/sh/pm_runtime.c b/drivers/sh/pm_runtime.c
index fe2c2d595f599b2f..85cc89fd3e7d7cb7 100644
--- a/drivers/sh/pm_runtime.c
+++ b/drivers/sh/pm_runtime.c
@@ -81,7 +81,9 @@ static int __init sh_pm_runtime_init(void)
 		if (!of_machine_is_compatible("renesas,emev2") &&
 		    !of_machine_is_compatible("renesas,r7s72100") &&
 		    !of_machine_is_compatible("renesas,r8a73a4") &&
+#ifndef CONFIG_PM_GENERIC_DOMAINS_OF
 		    !of_machine_is_compatible("renesas,r8a7740") &&
+#endif
 		    !of_machine_is_compatible("renesas,r8a7778") &&
 		    !of_machine_is_compatible("renesas,r8a7779") &&
 		    !of_machine_is_compatible("renesas,r8a7790") &&
-- 
1.9.1


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

* [PATCH v4 9/9] drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd
@ 2014-11-03 15:34   ` Geert Uytterhoeven
  0 siblings, 0 replies; 53+ messages in thread
From: Geert Uytterhoeven @ 2014-11-03 15:34 UTC (permalink / raw)
  To: linux-arm-kernel

If the default PM domain using PM_CLK is used for PM runtime, the real PM
domain(s) cannot be registered from DT later.

Hence do not enable it when running a multi-platform kernel with genpd
support on an r8a7740. The R-Mobile PM domain driver will take care of
PM runtime management of the module clocks.

The default PM domain is still needed for:
  - platforms without genpd support,
  - the legacy (non-DT) case, where genpd may take over later, except
    for the C5 "always on" PM domain.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v4:
  - No changes,
v3:
  - Reword,
v2:
  - New.
---
 drivers/sh/pm_runtime.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/sh/pm_runtime.c b/drivers/sh/pm_runtime.c
index fe2c2d595f599b2f..85cc89fd3e7d7cb7 100644
--- a/drivers/sh/pm_runtime.c
+++ b/drivers/sh/pm_runtime.c
@@ -81,7 +81,9 @@ static int __init sh_pm_runtime_init(void)
 		if (!of_machine_is_compatible("renesas,emev2") &&
 		    !of_machine_is_compatible("renesas,r7s72100") &&
 		    !of_machine_is_compatible("renesas,r8a73a4") &&
+#ifndef CONFIG_PM_GENERIC_DOMAINS_OF
 		    !of_machine_is_compatible("renesas,r8a7740") &&
+#endif
 		    !of_machine_is_compatible("renesas,r8a7778") &&
 		    !of_machine_is_compatible("renesas,r8a7779") &&
 		    !of_machine_is_compatible("renesas,r8a7790") &&
-- 
1.9.1

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

* Re: [PATCH v4 1/9] PM / Domains: Change prototype for the ->attach_dev() callback
  2014-11-03 15:34   ` Geert Uytterhoeven
  (?)
@ 2014-11-03 18:15     ` Andreas Schwab
  -1 siblings, 0 replies; 53+ messages in thread
From: Andreas Schwab @ 2014-11-03 18:15 UTC (permalink / raw)
  To: linux-arm-kernel

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

> From: Ulf Hansson <ulf.hansson@linaro.org>
>
> Convert the prototype to return and int. This is just an initial step,

s/and/an/

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

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

* Re: [PATCH v4 1/9] PM / Domains: Change prototype for the ->attach_dev() callback
@ 2014-11-03 18:15     ` Andreas Schwab
  0 siblings, 0 replies; 53+ messages in thread
From: Andreas Schwab @ 2014-11-03 18:15 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Rafael J. Wysocki, Simon Horman, Magnus Damm, Ulf Hansson,
	Kevin Hilman, Grygorii Strashko, Philipp Zabel, Tomasz Figa,
	linux-sh, linux-pm, linux-arm-kernel, devicetree, linux-kernel

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

> From: Ulf Hansson <ulf.hansson@linaro.org>
>
> Convert the prototype to return and int. This is just an initial step,

s/and/an/

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

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

* [PATCH v4 1/9] PM / Domains: Change prototype for the ->attach_dev() callback
@ 2014-11-03 18:15     ` Andreas Schwab
  0 siblings, 0 replies; 53+ messages in thread
From: Andreas Schwab @ 2014-11-03 18:15 UTC (permalink / raw)
  To: linux-arm-kernel

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

> From: Ulf Hansson <ulf.hansson@linaro.org>
>
> Convert the prototype to return and int. This is just an initial step,

s/and/an/

Andreas.

-- 
Andreas Schwab, schwab at linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
  2014-11-03 15:34 ` Geert Uytterhoeven
  (?)
  (?)
@ 2014-11-03 21:02   ` Mathieu Poirier
  -1 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-03 21:02 UTC (permalink / raw)
  To: linux-arm-kernel

On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>         Hi Rafael, Simon, Magnus,
>
> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>
> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
> abstraction of PM domains in DT, it should be sufficiently generic to handle
> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
> R-Mobile APE6 (r8a73a4)).
>
> Functionality-wise, this behaves the same as the legacy (non-DT) version
> (modulo missing DT support in some device drivers).
>
> Dependencies:
>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>     Rafael J. Wysocki's linux-pm.git#linux-next,
>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>     through the linux-pm tree.
>     As this is a one-line change, I included this patch as the first patch of
>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>     we don't have to wait for the v3.18-rcX that will include it?
>
> For your convenience, I've also pushed this to
> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>
> Changes compared to v3 (more detailed changelogs in the individual patches):
>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>     more measurements for PM domains that are currently never powered off.
>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>   - I dropped all patches related to QoS device latencies, as these need more
>     discussion,
>   - The power-{on,off}-latency properties have been changed from a single value
>     to a list,
>   - Device save/restore state latencies have been dropped, as they're Linux
>     driver-specific, and thus don't belong in DT,
>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>     returning an error code again,
>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>   - Always keep D4 powered, until the new Coresight code handles runtime
>     PM,

I took the time to really look at the problems you are experiencing
with pm runtime in hw_breackpoint.c this weekend.  The coresight
patchset, when supplemented with PM runtime awareness, will fix that
problem *only* when traces are activated.  The other obvious condition
is that other component using the same power domain are also converted
to using runtime PM.

That being said, the coresight framework and breakpoint handler code
are two different subsystem.  Their only commonality is that they make
use of the debug registers (and not even the same ones).  As such (and
in my opinion) the code in hw_breakpoint should be getting its own pm
runtime reference without relying on the coresight subsystem.  As
indicated above, that would only work in some cases.

Supplementing hw_breakpoint to interact with the runtime PM may prove
trickier than it seems... I'm especially worried about the
non-blocking requirement inherent to using "smp_call_function()".  I'm
stepping forward to look into that problem but before doing so I need
to finish runtime PM on coresight.


>   - Remove bogus power-domains properties from clock nodes, as these will not
>     be instantiated as platform devices,
>   - Add power-domains properties to the recently added TMU nodes,
>   - Added Acked-by, Reviewed-by.
>
> Changes compared to v2 (more detailed changelogs in the individual patches):
>   - Minor changes to attach/detach callbacks,
>   - Really add the A4MP and D4 PM domains, as fixes are available (see
>     dependencies below),
>   - Scan DT topology to identify special PM domains (CPUs and console),
>   - Move PM domain power-on/off latencies to a separate patch.
>
> Changes compared to v1 (more detailed changelogs in the individual patches):
>   - Several new patches: PM QoS device latencies in DT, attach/detach
>     callbacks,
>   - Run-Time management of the module clocks, making the hack in
>     drivers/sh/pm_runtime.c obsolete for DT platforms using genpd,
>   - Addition of PM QoS device latencies, specified from DT,
>   - Addition of build glue, so this builds and runs without additional
>     changes, incl. s2ram.
>
> Thanks!
>
> Geert Uytterhoeven (8):
>   PM / Domains: Add DT bindings for power-on/off latencies
>   PM / Domains: Add DT bindings for the R-Mobile System Controller
>   ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk
>     setup
>   ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
>   ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
>   ARM: shmobile: R-Mobile: Add DT support for PM domains
>   ARM: shmobile: r8a7740 dtsi: Add PM domain support
>   drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd
>
> Ulf Hansson (1):
>   PM / Domains: Change prototype for the ->attach_dev() callback
>
>  .../devicetree/bindings/power/power_domain.txt     |  14 +-
>  .../bindings/power/renesas,sysc-rmobile.txt        | 107 ++++++++
>  arch/arm/boot/dts/r8a7740.dtsi                     |  99 +++++++
>  arch/arm/mach-shmobile/Kconfig                     |   3 +-
>  arch/arm/mach-shmobile/pm-r8a7740.c                |  14 +
>  arch/arm/mach-shmobile/pm-rmobile.c                | 284 +++++++++++++++++++--
>  arch/arm/mach-shmobile/pm-rmobile.h                |   3 +-
>  arch/arm/mach-shmobile/pm-sh7372.c                 |  11 +
>  drivers/sh/pm_runtime.c                            |   2 +
>  include/linux/pm_domain.h                          |   2 +-
>  10 files changed, 519 insertions(+), 20 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
>
> --
> 1.9.1
>
> 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
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-03 21:02   ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-03 21:02 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Rafael J. Wysocki, Simon Horman, Magnus Damm, Ulf Hansson,
	Kevin Hilman, Grygorii Strashko, Philipp Zabel, Tomasz Figa,
	linux-sh, linux-pm, linux-arm-kernel, devicetree, linux-kernel

On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>         Hi Rafael, Simon, Magnus,
>
> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>
> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
> abstraction of PM domains in DT, it should be sufficiently generic to handle
> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
> R-Mobile APE6 (r8a73a4)).
>
> Functionality-wise, this behaves the same as the legacy (non-DT) version
> (modulo missing DT support in some device drivers).
>
> Dependencies:
>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>     Rafael J. Wysocki's linux-pm.git#linux-next,
>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>     through the linux-pm tree.
>     As this is a one-line change, I included this patch as the first patch of
>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>     we don't have to wait for the v3.18-rcX that will include it?
>
> For your convenience, I've also pushed this to
> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>
> Changes compared to v3 (more detailed changelogs in the individual patches):
>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>     more measurements for PM domains that are currently never powered off.
>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>   - I dropped all patches related to QoS device latencies, as these need more
>     discussion,
>   - The power-{on,off}-latency properties have been changed from a single value
>     to a list,
>   - Device save/restore state latencies have been dropped, as they're Linux
>     driver-specific, and thus don't belong in DT,
>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>     returning an error code again,
>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>   - Always keep D4 powered, until the new Coresight code handles runtime
>     PM,

I took the time to really look at the problems you are experiencing
with pm runtime in hw_breackpoint.c this weekend.  The coresight
patchset, when supplemented with PM runtime awareness, will fix that
problem *only* when traces are activated.  The other obvious condition
is that other component using the same power domain are also converted
to using runtime PM.

That being said, the coresight framework and breakpoint handler code
are two different subsystem.  Their only commonality is that they make
use of the debug registers (and not even the same ones).  As such (and
in my opinion) the code in hw_breakpoint should be getting its own pm
runtime reference without relying on the coresight subsystem.  As
indicated above, that would only work in some cases.

Supplementing hw_breakpoint to interact with the runtime PM may prove
trickier than it seems... I'm especially worried about the
non-blocking requirement inherent to using "smp_call_function()".  I'm
stepping forward to look into that problem but before doing so I need
to finish runtime PM on coresight.


>   - Remove bogus power-domains properties from clock nodes, as these will not
>     be instantiated as platform devices,
>   - Add power-domains properties to the recently added TMU nodes,
>   - Added Acked-by, Reviewed-by.
>
> Changes compared to v2 (more detailed changelogs in the individual patches):
>   - Minor changes to attach/detach callbacks,
>   - Really add the A4MP and D4 PM domains, as fixes are available (see
>     dependencies below),
>   - Scan DT topology to identify special PM domains (CPUs and console),
>   - Move PM domain power-on/off latencies to a separate patch.
>
> Changes compared to v1 (more detailed changelogs in the individual patches):
>   - Several new patches: PM QoS device latencies in DT, attach/detach
>     callbacks,
>   - Run-Time management of the module clocks, making the hack in
>     drivers/sh/pm_runtime.c obsolete for DT platforms using genpd,
>   - Addition of PM QoS device latencies, specified from DT,
>   - Addition of build glue, so this builds and runs without additional
>     changes, incl. s2ram.
>
> Thanks!
>
> Geert Uytterhoeven (8):
>   PM / Domains: Add DT bindings for power-on/off latencies
>   PM / Domains: Add DT bindings for the R-Mobile System Controller
>   ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk
>     setup
>   ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
>   ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
>   ARM: shmobile: R-Mobile: Add DT support for PM domains
>   ARM: shmobile: r8a7740 dtsi: Add PM domain support
>   drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd
>
> Ulf Hansson (1):
>   PM / Domains: Change prototype for the ->attach_dev() callback
>
>  .../devicetree/bindings/power/power_domain.txt     |  14 +-
>  .../bindings/power/renesas,sysc-rmobile.txt        | 107 ++++++++
>  arch/arm/boot/dts/r8a7740.dtsi                     |  99 +++++++
>  arch/arm/mach-shmobile/Kconfig                     |   3 +-
>  arch/arm/mach-shmobile/pm-r8a7740.c                |  14 +
>  arch/arm/mach-shmobile/pm-rmobile.c                | 284 +++++++++++++++++++--
>  arch/arm/mach-shmobile/pm-rmobile.h                |   3 +-
>  arch/arm/mach-shmobile/pm-sh7372.c                 |  11 +
>  drivers/sh/pm_runtime.c                            |   2 +
>  include/linux/pm_domain.h                          |   2 +-
>  10 files changed, 519 insertions(+), 20 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
>
> --
> 1.9.1
>
> 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
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-03 21:02   ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-03 21:02 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Rafael J. Wysocki, Simon Horman, Magnus Damm, Ulf Hansson,
	Kevin Hilman, Grygorii Strashko, Philipp Zabel, Tomasz Figa,
	linux-sh, linux-pm, linux-arm-kernel, devicetree, linux-kernel

On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>         Hi Rafael, Simon, Magnus,
>
> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>
> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
> abstraction of PM domains in DT, it should be sufficiently generic to handle
> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
> R-Mobile APE6 (r8a73a4)).
>
> Functionality-wise, this behaves the same as the legacy (non-DT) version
> (modulo missing DT support in some device drivers).
>
> Dependencies:
>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>     Rafael J. Wysocki's linux-pm.git#linux-next,
>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>     through the linux-pm tree.
>     As this is a one-line change, I included this patch as the first patch of
>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>     we don't have to wait for the v3.18-rcX that will include it?
>
> For your convenience, I've also pushed this to
> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>
> Changes compared to v3 (more detailed changelogs in the individual patches):
>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>     more measurements for PM domains that are currently never powered off.
>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>   - I dropped all patches related to QoS device latencies, as these need more
>     discussion,
>   - The power-{on,off}-latency properties have been changed from a single value
>     to a list,
>   - Device save/restore state latencies have been dropped, as they're Linux
>     driver-specific, and thus don't belong in DT,
>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>     returning an error code again,
>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>   - Always keep D4 powered, until the new Coresight code handles runtime
>     PM,

I took the time to really look at the problems you are experiencing
with pm runtime in hw_breackpoint.c this weekend.  The coresight
patchset, when supplemented with PM runtime awareness, will fix that
problem *only* when traces are activated.  The other obvious condition
is that other component using the same power domain are also converted
to using runtime PM.

That being said, the coresight framework and breakpoint handler code
are two different subsystem.  Their only commonality is that they make
use of the debug registers (and not even the same ones).  As such (and
in my opinion) the code in hw_breakpoint should be getting its own pm
runtime reference without relying on the coresight subsystem.  As
indicated above, that would only work in some cases.

Supplementing hw_breakpoint to interact with the runtime PM may prove
trickier than it seems... I'm especially worried about the
non-blocking requirement inherent to using "smp_call_function()".  I'm
stepping forward to look into that problem but before doing so I need
to finish runtime PM on coresight.


>   - Remove bogus power-domains properties from clock nodes, as these will not
>     be instantiated as platform devices,
>   - Add power-domains properties to the recently added TMU nodes,
>   - Added Acked-by, Reviewed-by.
>
> Changes compared to v2 (more detailed changelogs in the individual patches):
>   - Minor changes to attach/detach callbacks,
>   - Really add the A4MP and D4 PM domains, as fixes are available (see
>     dependencies below),
>   - Scan DT topology to identify special PM domains (CPUs and console),
>   - Move PM domain power-on/off latencies to a separate patch.
>
> Changes compared to v1 (more detailed changelogs in the individual patches):
>   - Several new patches: PM QoS device latencies in DT, attach/detach
>     callbacks,
>   - Run-Time management of the module clocks, making the hack in
>     drivers/sh/pm_runtime.c obsolete for DT platforms using genpd,
>   - Addition of PM QoS device latencies, specified from DT,
>   - Addition of build glue, so this builds and runs without additional
>     changes, incl. s2ram.
>
> Thanks!
>
> Geert Uytterhoeven (8):
>   PM / Domains: Add DT bindings for power-on/off latencies
>   PM / Domains: Add DT bindings for the R-Mobile System Controller
>   ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk
>     setup
>   ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
>   ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
>   ARM: shmobile: R-Mobile: Add DT support for PM domains
>   ARM: shmobile: r8a7740 dtsi: Add PM domain support
>   drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd
>
> Ulf Hansson (1):
>   PM / Domains: Change prototype for the ->attach_dev() callback
>
>  .../devicetree/bindings/power/power_domain.txt     |  14 +-
>  .../bindings/power/renesas,sysc-rmobile.txt        | 107 ++++++++
>  arch/arm/boot/dts/r8a7740.dtsi                     |  99 +++++++
>  arch/arm/mach-shmobile/Kconfig                     |   3 +-
>  arch/arm/mach-shmobile/pm-r8a7740.c                |  14 +
>  arch/arm/mach-shmobile/pm-rmobile.c                | 284 +++++++++++++++++++--
>  arch/arm/mach-shmobile/pm-rmobile.h                |   3 +-
>  arch/arm/mach-shmobile/pm-sh7372.c                 |  11 +
>  drivers/sh/pm_runtime.c                            |   2 +
>  include/linux/pm_domain.h                          |   2 +-
>  10 files changed, 519 insertions(+), 20 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
>
> --
> 1.9.1
>
> 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
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-03 21:02   ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-03 21:02 UTC (permalink / raw)
  To: linux-arm-kernel

On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>         Hi Rafael, Simon, Magnus,
>
> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>
> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
> abstraction of PM domains in DT, it should be sufficiently generic to handle
> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
> R-Mobile APE6 (r8a73a4)).
>
> Functionality-wise, this behaves the same as the legacy (non-DT) version
> (modulo missing DT support in some device drivers).
>
> Dependencies:
>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>     Rafael J. Wysocki's linux-pm.git#linux-next,
>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>     through the linux-pm tree.
>     As this is a one-line change, I included this patch as the first patch of
>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>     we don't have to wait for the v3.18-rcX that will include it?
>
> For your convenience, I've also pushed this to
> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>
> Changes compared to v3 (more detailed changelogs in the individual patches):
>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>     more measurements for PM domains that are currently never powered off.
>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>   - I dropped all patches related to QoS device latencies, as these need more
>     discussion,
>   - The power-{on,off}-latency properties have been changed from a single value
>     to a list,
>   - Device save/restore state latencies have been dropped, as they're Linux
>     driver-specific, and thus don't belong in DT,
>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>     returning an error code again,
>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>   - Always keep D4 powered, until the new Coresight code handles runtime
>     PM,

I took the time to really look at the problems you are experiencing
with pm runtime in hw_breackpoint.c this weekend.  The coresight
patchset, when supplemented with PM runtime awareness, will fix that
problem *only* when traces are activated.  The other obvious condition
is that other component using the same power domain are also converted
to using runtime PM.

That being said, the coresight framework and breakpoint handler code
are two different subsystem.  Their only commonality is that they make
use of the debug registers (and not even the same ones).  As such (and
in my opinion) the code in hw_breakpoint should be getting its own pm
runtime reference without relying on the coresight subsystem.  As
indicated above, that would only work in some cases.

Supplementing hw_breakpoint to interact with the runtime PM may prove
trickier than it seems... I'm especially worried about the
non-blocking requirement inherent to using "smp_call_function()".  I'm
stepping forward to look into that problem but before doing so I need
to finish runtime PM on coresight.


>   - Remove bogus power-domains properties from clock nodes, as these will not
>     be instantiated as platform devices,
>   - Add power-domains properties to the recently added TMU nodes,
>   - Added Acked-by, Reviewed-by.
>
> Changes compared to v2 (more detailed changelogs in the individual patches):
>   - Minor changes to attach/detach callbacks,
>   - Really add the A4MP and D4 PM domains, as fixes are available (see
>     dependencies below),
>   - Scan DT topology to identify special PM domains (CPUs and console),
>   - Move PM domain power-on/off latencies to a separate patch.
>
> Changes compared to v1 (more detailed changelogs in the individual patches):
>   - Several new patches: PM QoS device latencies in DT, attach/detach
>     callbacks,
>   - Run-Time management of the module clocks, making the hack in
>     drivers/sh/pm_runtime.c obsolete for DT platforms using genpd,
>   - Addition of PM QoS device latencies, specified from DT,
>   - Addition of build glue, so this builds and runs without additional
>     changes, incl. s2ram.
>
> Thanks!
>
> Geert Uytterhoeven (8):
>   PM / Domains: Add DT bindings for power-on/off latencies
>   PM / Domains: Add DT bindings for the R-Mobile System Controller
>   ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk
>     setup
>   ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME
>   ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain
>   ARM: shmobile: R-Mobile: Add DT support for PM domains
>   ARM: shmobile: r8a7740 dtsi: Add PM domain support
>   drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd
>
> Ulf Hansson (1):
>   PM / Domains: Change prototype for the ->attach_dev() callback
>
>  .../devicetree/bindings/power/power_domain.txt     |  14 +-
>  .../bindings/power/renesas,sysc-rmobile.txt        | 107 ++++++++
>  arch/arm/boot/dts/r8a7740.dtsi                     |  99 +++++++
>  arch/arm/mach-shmobile/Kconfig                     |   3 +-
>  arch/arm/mach-shmobile/pm-r8a7740.c                |  14 +
>  arch/arm/mach-shmobile/pm-rmobile.c                | 284 +++++++++++++++++++--
>  arch/arm/mach-shmobile/pm-rmobile.h                |   3 +-
>  arch/arm/mach-shmobile/pm-sh7372.c                 |  11 +
>  drivers/sh/pm_runtime.c                            |   2 +
>  include/linux/pm_domain.h                          |   2 +-
>  10 files changed, 519 insertions(+), 20 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
>
> --
> 1.9.1
>
> Gr{oetje,eeting}s,
>
>                                                 Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                                             -- Linus Torvalds
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support
  2014-11-03 15:34   ` Geert Uytterhoeven
  (?)
  (?)
@ 2014-11-03 21:24     ` Mathieu Poirier
  -1 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-03 21:24 UTC (permalink / raw)
  To: linux-arm-kernel

On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
> Add a device node for the System Controller, with subnodes that
> represent the hardware power area hierarchy.
> Hook up all devices to their respective PM domains.
>
> Add a minimal device node for the Coresight-ETM hardware block, and hook
> it up to the D4 PM domain, so the R-Mobile System Controller driver can
> keep the domain powered, until the new Coresight code handles runtime
> PM.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v4:
>   - Remove power-domains properties from clocks, as these will not be
>     instantiated as platform devices,
>   - Fix indentation of power-domains property in pfc node,
>   - Add minimal node for Coresight-ETM,
>   - Add power-domains properties to the recently added TMU nodes,
> v3:
>   - Move power-on/off latencies to a separate patch,
>   - Add dependencies,
> v2:
>   - Insert power-domains property after clock-names property in the cmt1
>     node.
> ---
>  arch/arm/boot/dts/r8a7740.dtsi | 99 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 99 insertions(+)
>
> diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
> index aec8da89ef9ac766..20d2b56773fbf069 100644
> --- a/arch/arm/boot/dts/r8a7740.dtsi
> +++ b/arch/arm/boot/dts/r8a7740.dtsi
> @@ -25,6 +25,7 @@
>                         device_type = "cpu";
>                         reg = <0x0>;
>                         clock-frequency = <800000000>;
> +                       power-domains = <&pd_a3sm>;

Perfect - I'm taking the same approach on TC2 for coresight.  That way
the system doesn't crash when accessing the coresight registers of an
ETM/PTM belonging to a CPU in a powered down cluster.

>                 };
>         };
>
> @@ -41,12 +42,18 @@
>                 interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
>         };
>
> +       ptm {
> +               compatible = "arm,coresight-etm3x";
> +               power-domains = <&pd_d4>;
> +       };
> +
>         cmt1: timer@e6138000 {
>                 compatible = "renesas,cmt-48-r8a7740", "renesas,cmt-48";
>                 reg = <0xe6138000 0x170>;
>                 interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
>                 clock-names = "fck";
> +               power-domains = <&pd_c5>;
>
>                 renesas,channels-mask = <0x3f>;
>
> @@ -72,6 +79,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin1: IRQ8 - IRQ15 */
> @@ -93,6 +101,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin2: IRQ16 - IRQ23 */
> @@ -114,6 +123,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin3: IRQ24 - IRQ31 */
> @@ -135,6 +145,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         ether: ethernet@e9a00000 {
> @@ -143,6 +154,7 @@
>                       <0xe9a01800 0x800>;
>                 interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_GETHER>;
> +               power-domains = <&pd_a4s>;
>                 phy-mode = "mii";
>                 #address-cells = <1>;
>                 #size-cells = <0>;
> @@ -159,6 +171,7 @@
>                               0 203 IRQ_TYPE_LEVEL_HIGH
>                               0 204 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_IIC0>;
> +               power-domains = <&pd_a4r>;
>                 status = "disabled";
>         };
>
> @@ -172,6 +185,7 @@
>                               0 72 IRQ_TYPE_LEVEL_HIGH
>                               0 73 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_IIC1>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -181,6 +195,7 @@
>                 interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA0>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -190,6 +205,7 @@
>                 interrupts = <0 101 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA1>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -199,6 +215,7 @@
>                 interrupts = <0 102 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA2>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -208,6 +225,7 @@
>                 interrupts = <0 103 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA3>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -217,6 +235,7 @@
>                 interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA4>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -226,6 +245,7 @@
>                 interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA5>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -235,6 +255,7 @@
>                 interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA6>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -244,6 +265,7 @@
>                 interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA7>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -253,6 +275,7 @@
>                 interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFB>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -271,12 +294,14 @@
>                         <&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>,
>                         <&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>,
>                         <&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>;
> +               power-domains = <&pd_c5>;
>         };
>
>         tpu: pwm@e6600000 {
>                 compatible = "renesas,tpu-r8a7740", "renesas,tpu";
>                 reg = <0xe6600000 0x100>;
>                 clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>                 #pwm-cells = <3>;
>         };
> @@ -287,6 +312,7 @@
>                 interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH
>                               0 57 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_MMC>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -297,6 +323,7 @@
>                               0 118 IRQ_TYPE_LEVEL_HIGH
>                               0 119 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_SDHI0>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -309,6 +336,7 @@
>                               0 122 IRQ_TYPE_LEVEL_HIGH
>                               0 123 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_SDHI1>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -321,6 +349,7 @@
>                               0 126 IRQ_TYPE_LEVEL_HIGH
>                               0 127 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp4_clks R8A7740_CLK_SDHI2>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -332,6 +361,7 @@
>                 reg = <0xfe1f0000 0x400>;
>                 interrupts = <0 9 0x4>;
>                 clocks = <&mstp3_clks R8A7740_CLK_FSI>;
> +               power-domains = <&pd_a4mp>;
>                 status = "disabled";
>         };
>
> @@ -343,6 +373,7 @@
>                              <0 200 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_TMU0>;
>                 clock-names = "fck";
> +               power-domains = <&pd_a4r>;
>
>                 #renesas,channels = <3>;
>
> @@ -357,6 +388,7 @@
>                              <0 172 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_TMU1>;
>                 clock-names = "fck";
> +               power-domains = <&pd_a4r>;
>
>                 #renesas,channels = <3>;
>
> @@ -543,4 +575,71 @@
>                                 "usbhost", "sdhi2", "usbfunc", "usphy";
>                 };
>         };
> +
> +       sysc: system-controller@e6180000 {
> +               compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
> +               reg = <0xe6180000 8000>, <0xe6188000 8000>;
> +
> +               pm-domains {
> +                       pd_c5: c5 {
> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               #power-domain-cells = <0>;
> +
> +                               pd_a4lc: a4lc@1 {
> +                                       reg = <1>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_a4mp: a4mp@2 {
> +                                       reg = <2>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_d4: d4@3 {
> +                                       reg = <3>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_a4r: a4r@5 {
> +                                       reg = <5>;
> +                                       #address-cells = <1>;
> +                                       #size-cells = <0>;
> +                                       #power-domain-cells = <0>;
> +
> +                                       pd_a3rv: a3rv@6 {
> +                                               reg = <6>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +                               };
> +
> +                               pd_a4s: a4s@10 {
> +                                       reg = <10>;
> +                                       #address-cells = <1>;
> +                                       #size-cells = <0>;
> +                                       #power-domain-cells = <0>;
> +
> +                                       pd_a3sp: a3sp@11 {
> +                                               reg = <11>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +
> +                                       pd_a3sm: a3sm@12 {
> +                                               reg = <12>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +
> +                                       pd_a3sg: a3sg@13 {
> +                                               reg = <13>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +                               };
> +
> +                               pd_a4su: a4su@20 {
> +                                       reg = <20>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +                       };
> +               };
> +       };
>  };
> --
> 1.9.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support
@ 2014-11-03 21:24     ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-03 21:24 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Rafael J. Wysocki, Simon Horman, Magnus Damm, devicetree,
	Ulf Hansson, Grygorii Strashko, linux-sh, linux-pm, Tomasz Figa,
	linux-kernel, Kevin Hilman, Philipp Zabel, linux-arm-kernel

On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
> Add a device node for the System Controller, with subnodes that
> represent the hardware power area hierarchy.
> Hook up all devices to their respective PM domains.
>
> Add a minimal device node for the Coresight-ETM hardware block, and hook
> it up to the D4 PM domain, so the R-Mobile System Controller driver can
> keep the domain powered, until the new Coresight code handles runtime
> PM.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v4:
>   - Remove power-domains properties from clocks, as these will not be
>     instantiated as platform devices,
>   - Fix indentation of power-domains property in pfc node,
>   - Add minimal node for Coresight-ETM,
>   - Add power-domains properties to the recently added TMU nodes,
> v3:
>   - Move power-on/off latencies to a separate patch,
>   - Add dependencies,
> v2:
>   - Insert power-domains property after clock-names property in the cmt1
>     node.
> ---
>  arch/arm/boot/dts/r8a7740.dtsi | 99 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 99 insertions(+)
>
> diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
> index aec8da89ef9ac766..20d2b56773fbf069 100644
> --- a/arch/arm/boot/dts/r8a7740.dtsi
> +++ b/arch/arm/boot/dts/r8a7740.dtsi
> @@ -25,6 +25,7 @@
>                         device_type = "cpu";
>                         reg = <0x0>;
>                         clock-frequency = <800000000>;
> +                       power-domains = <&pd_a3sm>;

Perfect - I'm taking the same approach on TC2 for coresight.  That way
the system doesn't crash when accessing the coresight registers of an
ETM/PTM belonging to a CPU in a powered down cluster.

>                 };
>         };
>
> @@ -41,12 +42,18 @@
>                 interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
>         };
>
> +       ptm {
> +               compatible = "arm,coresight-etm3x";
> +               power-domains = <&pd_d4>;
> +       };
> +
>         cmt1: timer@e6138000 {
>                 compatible = "renesas,cmt-48-r8a7740", "renesas,cmt-48";
>                 reg = <0xe6138000 0x170>;
>                 interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
>                 clock-names = "fck";
> +               power-domains = <&pd_c5>;
>
>                 renesas,channels-mask = <0x3f>;
>
> @@ -72,6 +79,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin1: IRQ8 - IRQ15 */
> @@ -93,6 +101,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin2: IRQ16 - IRQ23 */
> @@ -114,6 +123,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin3: IRQ24 - IRQ31 */
> @@ -135,6 +145,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         ether: ethernet@e9a00000 {
> @@ -143,6 +154,7 @@
>                       <0xe9a01800 0x800>;
>                 interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_GETHER>;
> +               power-domains = <&pd_a4s>;
>                 phy-mode = "mii";
>                 #address-cells = <1>;
>                 #size-cells = <0>;
> @@ -159,6 +171,7 @@
>                               0 203 IRQ_TYPE_LEVEL_HIGH
>                               0 204 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_IIC0>;
> +               power-domains = <&pd_a4r>;
>                 status = "disabled";
>         };
>
> @@ -172,6 +185,7 @@
>                               0 72 IRQ_TYPE_LEVEL_HIGH
>                               0 73 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_IIC1>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -181,6 +195,7 @@
>                 interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA0>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -190,6 +205,7 @@
>                 interrupts = <0 101 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA1>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -199,6 +215,7 @@
>                 interrupts = <0 102 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA2>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -208,6 +225,7 @@
>                 interrupts = <0 103 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA3>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -217,6 +235,7 @@
>                 interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA4>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -226,6 +245,7 @@
>                 interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA5>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -235,6 +255,7 @@
>                 interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA6>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -244,6 +265,7 @@
>                 interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA7>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -253,6 +275,7 @@
>                 interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFB>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -271,12 +294,14 @@
>                         <&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>,
>                         <&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>,
>                         <&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>;
> +               power-domains = <&pd_c5>;
>         };
>
>         tpu: pwm@e6600000 {
>                 compatible = "renesas,tpu-r8a7740", "renesas,tpu";
>                 reg = <0xe6600000 0x100>;
>                 clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>                 #pwm-cells = <3>;
>         };
> @@ -287,6 +312,7 @@
>                 interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH
>                               0 57 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_MMC>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -297,6 +323,7 @@
>                               0 118 IRQ_TYPE_LEVEL_HIGH
>                               0 119 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_SDHI0>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -309,6 +336,7 @@
>                               0 122 IRQ_TYPE_LEVEL_HIGH
>                               0 123 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_SDHI1>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -321,6 +349,7 @@
>                               0 126 IRQ_TYPE_LEVEL_HIGH
>                               0 127 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp4_clks R8A7740_CLK_SDHI2>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -332,6 +361,7 @@
>                 reg = <0xfe1f0000 0x400>;
>                 interrupts = <0 9 0x4>;
>                 clocks = <&mstp3_clks R8A7740_CLK_FSI>;
> +               power-domains = <&pd_a4mp>;
>                 status = "disabled";
>         };
>
> @@ -343,6 +373,7 @@
>                              <0 200 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_TMU0>;
>                 clock-names = "fck";
> +               power-domains = <&pd_a4r>;
>
>                 #renesas,channels = <3>;
>
> @@ -357,6 +388,7 @@
>                              <0 172 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_TMU1>;
>                 clock-names = "fck";
> +               power-domains = <&pd_a4r>;
>
>                 #renesas,channels = <3>;
>
> @@ -543,4 +575,71 @@
>                                 "usbhost", "sdhi2", "usbfunc", "usphy";
>                 };
>         };
> +
> +       sysc: system-controller@e6180000 {
> +               compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
> +               reg = <0xe6180000 8000>, <0xe6188000 8000>;
> +
> +               pm-domains {
> +                       pd_c5: c5 {
> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               #power-domain-cells = <0>;
> +
> +                               pd_a4lc: a4lc@1 {
> +                                       reg = <1>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_a4mp: a4mp@2 {
> +                                       reg = <2>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_d4: d4@3 {
> +                                       reg = <3>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_a4r: a4r@5 {
> +                                       reg = <5>;
> +                                       #address-cells = <1>;
> +                                       #size-cells = <0>;
> +                                       #power-domain-cells = <0>;
> +
> +                                       pd_a3rv: a3rv@6 {
> +                                               reg = <6>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +                               };
> +
> +                               pd_a4s: a4s@10 {
> +                                       reg = <10>;
> +                                       #address-cells = <1>;
> +                                       #size-cells = <0>;
> +                                       #power-domain-cells = <0>;
> +
> +                                       pd_a3sp: a3sp@11 {
> +                                               reg = <11>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +
> +                                       pd_a3sm: a3sm@12 {
> +                                               reg = <12>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +
> +                                       pd_a3sg: a3sg@13 {
> +                                               reg = <13>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +                               };
> +
> +                               pd_a4su: a4su@20 {
> +                                       reg = <20>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +                       };
> +               };
> +       };
>  };
> --
> 1.9.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support
@ 2014-11-03 21:24     ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-03 21:24 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Rafael J. Wysocki, Simon Horman, Magnus Damm, devicetree,
	Ulf Hansson, Grygorii Strashko, linux-sh, linux-pm, Tomasz Figa,
	linux-kernel, Kevin Hilman, Philipp Zabel, linux-arm-kernel

On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
> Add a device node for the System Controller, with subnodes that
> represent the hardware power area hierarchy.
> Hook up all devices to their respective PM domains.
>
> Add a minimal device node for the Coresight-ETM hardware block, and hook
> it up to the D4 PM domain, so the R-Mobile System Controller driver can
> keep the domain powered, until the new Coresight code handles runtime
> PM.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v4:
>   - Remove power-domains properties from clocks, as these will not be
>     instantiated as platform devices,
>   - Fix indentation of power-domains property in pfc node,
>   - Add minimal node for Coresight-ETM,
>   - Add power-domains properties to the recently added TMU nodes,
> v3:
>   - Move power-on/off latencies to a separate patch,
>   - Add dependencies,
> v2:
>   - Insert power-domains property after clock-names property in the cmt1
>     node.
> ---
>  arch/arm/boot/dts/r8a7740.dtsi | 99 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 99 insertions(+)
>
> diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
> index aec8da89ef9ac766..20d2b56773fbf069 100644
> --- a/arch/arm/boot/dts/r8a7740.dtsi
> +++ b/arch/arm/boot/dts/r8a7740.dtsi
> @@ -25,6 +25,7 @@
>                         device_type = "cpu";
>                         reg = <0x0>;
>                         clock-frequency = <800000000>;
> +                       power-domains = <&pd_a3sm>;

Perfect - I'm taking the same approach on TC2 for coresight.  That way
the system doesn't crash when accessing the coresight registers of an
ETM/PTM belonging to a CPU in a powered down cluster.

>                 };
>         };
>
> @@ -41,12 +42,18 @@
>                 interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
>         };
>
> +       ptm {
> +               compatible = "arm,coresight-etm3x";
> +               power-domains = <&pd_d4>;
> +       };
> +
>         cmt1: timer@e6138000 {
>                 compatible = "renesas,cmt-48-r8a7740", "renesas,cmt-48";
>                 reg = <0xe6138000 0x170>;
>                 interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
>                 clock-names = "fck";
> +               power-domains = <&pd_c5>;
>
>                 renesas,channels-mask = <0x3f>;
>
> @@ -72,6 +79,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin1: IRQ8 - IRQ15 */
> @@ -93,6 +101,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin2: IRQ16 - IRQ23 */
> @@ -114,6 +123,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin3: IRQ24 - IRQ31 */
> @@ -135,6 +145,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         ether: ethernet@e9a00000 {
> @@ -143,6 +154,7 @@
>                       <0xe9a01800 0x800>;
>                 interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_GETHER>;
> +               power-domains = <&pd_a4s>;
>                 phy-mode = "mii";
>                 #address-cells = <1>;
>                 #size-cells = <0>;
> @@ -159,6 +171,7 @@
>                               0 203 IRQ_TYPE_LEVEL_HIGH
>                               0 204 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_IIC0>;
> +               power-domains = <&pd_a4r>;
>                 status = "disabled";
>         };
>
> @@ -172,6 +185,7 @@
>                               0 72 IRQ_TYPE_LEVEL_HIGH
>                               0 73 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_IIC1>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -181,6 +195,7 @@
>                 interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA0>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -190,6 +205,7 @@
>                 interrupts = <0 101 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA1>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -199,6 +215,7 @@
>                 interrupts = <0 102 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA2>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -208,6 +225,7 @@
>                 interrupts = <0 103 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA3>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -217,6 +235,7 @@
>                 interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA4>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -226,6 +245,7 @@
>                 interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA5>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -235,6 +255,7 @@
>                 interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA6>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -244,6 +265,7 @@
>                 interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA7>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -253,6 +275,7 @@
>                 interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFB>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -271,12 +294,14 @@
>                         <&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>,
>                         <&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>,
>                         <&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>;
> +               power-domains = <&pd_c5>;
>         };
>
>         tpu: pwm@e6600000 {
>                 compatible = "renesas,tpu-r8a7740", "renesas,tpu";
>                 reg = <0xe6600000 0x100>;
>                 clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>                 #pwm-cells = <3>;
>         };
> @@ -287,6 +312,7 @@
>                 interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH
>                               0 57 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_MMC>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -297,6 +323,7 @@
>                               0 118 IRQ_TYPE_LEVEL_HIGH
>                               0 119 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_SDHI0>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -309,6 +336,7 @@
>                               0 122 IRQ_TYPE_LEVEL_HIGH
>                               0 123 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_SDHI1>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -321,6 +349,7 @@
>                               0 126 IRQ_TYPE_LEVEL_HIGH
>                               0 127 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp4_clks R8A7740_CLK_SDHI2>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -332,6 +361,7 @@
>                 reg = <0xfe1f0000 0x400>;
>                 interrupts = <0 9 0x4>;
>                 clocks = <&mstp3_clks R8A7740_CLK_FSI>;
> +               power-domains = <&pd_a4mp>;
>                 status = "disabled";
>         };
>
> @@ -343,6 +373,7 @@
>                              <0 200 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_TMU0>;
>                 clock-names = "fck";
> +               power-domains = <&pd_a4r>;
>
>                 #renesas,channels = <3>;
>
> @@ -357,6 +388,7 @@
>                              <0 172 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_TMU1>;
>                 clock-names = "fck";
> +               power-domains = <&pd_a4r>;
>
>                 #renesas,channels = <3>;
>
> @@ -543,4 +575,71 @@
>                                 "usbhost", "sdhi2", "usbfunc", "usphy";
>                 };
>         };
> +
> +       sysc: system-controller@e6180000 {
> +               compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
> +               reg = <0xe6180000 8000>, <0xe6188000 8000>;
> +
> +               pm-domains {
> +                       pd_c5: c5 {
> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               #power-domain-cells = <0>;
> +
> +                               pd_a4lc: a4lc@1 {
> +                                       reg = <1>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_a4mp: a4mp@2 {
> +                                       reg = <2>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_d4: d4@3 {
> +                                       reg = <3>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_a4r: a4r@5 {
> +                                       reg = <5>;
> +                                       #address-cells = <1>;
> +                                       #size-cells = <0>;
> +                                       #power-domain-cells = <0>;
> +
> +                                       pd_a3rv: a3rv@6 {
> +                                               reg = <6>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +                               };
> +
> +                               pd_a4s: a4s@10 {
> +                                       reg = <10>;
> +                                       #address-cells = <1>;
> +                                       #size-cells = <0>;
> +                                       #power-domain-cells = <0>;
> +
> +                                       pd_a3sp: a3sp@11 {
> +                                               reg = <11>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +
> +                                       pd_a3sm: a3sm@12 {
> +                                               reg = <12>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +
> +                                       pd_a3sg: a3sg@13 {
> +                                               reg = <13>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +                               };
> +
> +                               pd_a4su: a4su@20 {
> +                                       reg = <20>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +                       };
> +               };
> +       };
>  };
> --
> 1.9.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support
@ 2014-11-03 21:24     ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-03 21:24 UTC (permalink / raw)
  To: linux-arm-kernel

On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
> Add a device node for the System Controller, with subnodes that
> represent the hardware power area hierarchy.
> Hook up all devices to their respective PM domains.
>
> Add a minimal device node for the Coresight-ETM hardware block, and hook
> it up to the D4 PM domain, so the R-Mobile System Controller driver can
> keep the domain powered, until the new Coresight code handles runtime
> PM.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v4:
>   - Remove power-domains properties from clocks, as these will not be
>     instantiated as platform devices,
>   - Fix indentation of power-domains property in pfc node,
>   - Add minimal node for Coresight-ETM,
>   - Add power-domains properties to the recently added TMU nodes,
> v3:
>   - Move power-on/off latencies to a separate patch,
>   - Add dependencies,
> v2:
>   - Insert power-domains property after clock-names property in the cmt1
>     node.
> ---
>  arch/arm/boot/dts/r8a7740.dtsi | 99 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 99 insertions(+)
>
> diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi
> index aec8da89ef9ac766..20d2b56773fbf069 100644
> --- a/arch/arm/boot/dts/r8a7740.dtsi
> +++ b/arch/arm/boot/dts/r8a7740.dtsi
> @@ -25,6 +25,7 @@
>                         device_type = "cpu";
>                         reg = <0x0>;
>                         clock-frequency = <800000000>;
> +                       power-domains = <&pd_a3sm>;

Perfect - I'm taking the same approach on TC2 for coresight.  That way
the system doesn't crash when accessing the coresight registers of an
ETM/PTM belonging to a CPU in a powered down cluster.

>                 };
>         };
>
> @@ -41,12 +42,18 @@
>                 interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
>         };
>
> +       ptm {
> +               compatible = "arm,coresight-etm3x";
> +               power-domains = <&pd_d4>;
> +       };
> +
>         cmt1: timer at e6138000 {
>                 compatible = "renesas,cmt-48-r8a7740", "renesas,cmt-48";
>                 reg = <0xe6138000 0x170>;
>                 interrupts = <0 58 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_CMT1>;
>                 clock-names = "fck";
> +               power-domains = <&pd_c5>;
>
>                 renesas,channels-mask = <0x3f>;
>
> @@ -72,6 +79,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin1: IRQ8 - IRQ15 */
> @@ -93,6 +101,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin2: IRQ16 - IRQ23 */
> @@ -114,6 +123,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         /* irqpin3: IRQ24 - IRQ31 */
> @@ -135,6 +145,7 @@
>                               0 149 IRQ_TYPE_LEVEL_HIGH
>                               0 149 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_INTCA>;
> +               power-domains = <&pd_a4s>;
>         };
>
>         ether: ethernet at e9a00000 {
> @@ -143,6 +154,7 @@
>                       <0xe9a01800 0x800>;
>                 interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_GETHER>;
> +               power-domains = <&pd_a4s>;
>                 phy-mode = "mii";
>                 #address-cells = <1>;
>                 #size-cells = <0>;
> @@ -159,6 +171,7 @@
>                               0 203 IRQ_TYPE_LEVEL_HIGH
>                               0 204 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_IIC0>;
> +               power-domains = <&pd_a4r>;
>                 status = "disabled";
>         };
>
> @@ -172,6 +185,7 @@
>                               0 72 IRQ_TYPE_LEVEL_HIGH
>                               0 73 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_IIC1>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -181,6 +195,7 @@
>                 interrupts = <0 100 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA0>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -190,6 +205,7 @@
>                 interrupts = <0 101 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA1>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -199,6 +215,7 @@
>                 interrupts = <0 102 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA2>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -208,6 +225,7 @@
>                 interrupts = <0 103 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA3>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -217,6 +235,7 @@
>                 interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA4>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -226,6 +245,7 @@
>                 interrupts = <0 105 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA5>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -235,6 +255,7 @@
>                 interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA6>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -244,6 +265,7 @@
>                 interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFA7>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -253,6 +275,7 @@
>                 interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp2_clks R8A7740_CLK_SCIFB>;
>                 clock-names = "sci_ick";
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -271,12 +294,14 @@
>                         <&irqpin2 4 0>, <&irqpin2 5 0>, <&irqpin2 6 0>, <&irqpin2 7 0>,
>                         <&irqpin3 0 0>, <&irqpin3 1 0>, <&irqpin3 2 0>, <&irqpin3 3 0>,
>                         <&irqpin3 4 0>, <&irqpin3 5 0>, <&irqpin3 6 0>, <&irqpin3 7 0>;
> +               power-domains = <&pd_c5>;
>         };
>
>         tpu: pwm at e6600000 {
>                 compatible = "renesas,tpu-r8a7740", "renesas,tpu";
>                 reg = <0xe6600000 0x100>;
>                 clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>                 #pwm-cells = <3>;
>         };
> @@ -287,6 +312,7 @@
>                 interrupts = <0 56 IRQ_TYPE_LEVEL_HIGH
>                               0 57 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_MMC>;
> +               power-domains = <&pd_a3sp>;
>                 status = "disabled";
>         };
>
> @@ -297,6 +323,7 @@
>                               0 118 IRQ_TYPE_LEVEL_HIGH
>                               0 119 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_SDHI0>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -309,6 +336,7 @@
>                               0 122 IRQ_TYPE_LEVEL_HIGH
>                               0 123 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp3_clks R8A7740_CLK_SDHI1>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -321,6 +349,7 @@
>                               0 126 IRQ_TYPE_LEVEL_HIGH
>                               0 127 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp4_clks R8A7740_CLK_SDHI2>;
> +               power-domains = <&pd_a3sp>;
>                 cap-sd-highspeed;
>                 cap-sdio-irq;
>                 status = "disabled";
> @@ -332,6 +361,7 @@
>                 reg = <0xfe1f0000 0x400>;
>                 interrupts = <0 9 0x4>;
>                 clocks = <&mstp3_clks R8A7740_CLK_FSI>;
> +               power-domains = <&pd_a4mp>;
>                 status = "disabled";
>         };
>
> @@ -343,6 +373,7 @@
>                              <0 200 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_TMU0>;
>                 clock-names = "fck";
> +               power-domains = <&pd_a4r>;
>
>                 #renesas,channels = <3>;
>
> @@ -357,6 +388,7 @@
>                              <0 172 IRQ_TYPE_LEVEL_HIGH>;
>                 clocks = <&mstp1_clks R8A7740_CLK_TMU1>;
>                 clock-names = "fck";
> +               power-domains = <&pd_a4r>;
>
>                 #renesas,channels = <3>;
>
> @@ -543,4 +575,71 @@
>                                 "usbhost", "sdhi2", "usbfunc", "usphy";
>                 };
>         };
> +
> +       sysc: system-controller at e6180000 {
> +               compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
> +               reg = <0xe6180000 8000>, <0xe6188000 8000>;
> +
> +               pm-domains {
> +                       pd_c5: c5 {
> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               #power-domain-cells = <0>;
> +
> +                               pd_a4lc: a4lc at 1 {
> +                                       reg = <1>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_a4mp: a4mp at 2 {
> +                                       reg = <2>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_d4: d4 at 3 {
> +                                       reg = <3>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +
> +                               pd_a4r: a4r at 5 {
> +                                       reg = <5>;
> +                                       #address-cells = <1>;
> +                                       #size-cells = <0>;
> +                                       #power-domain-cells = <0>;
> +
> +                                       pd_a3rv: a3rv at 6 {
> +                                               reg = <6>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +                               };
> +
> +                               pd_a4s: a4s at 10 {
> +                                       reg = <10>;
> +                                       #address-cells = <1>;
> +                                       #size-cells = <0>;
> +                                       #power-domain-cells = <0>;
> +
> +                                       pd_a3sp: a3sp at 11 {
> +                                               reg = <11>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +
> +                                       pd_a3sm: a3sm at 12 {
> +                                               reg = <12>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +
> +                                       pd_a3sg: a3sg at 13 {
> +                                               reg = <13>;
> +                                               #power-domain-cells = <0>;
> +                                       };
> +                               };
> +
> +                               pd_a4su: a4su at 20 {
> +                                       reg = <20>;
> +                                       #power-domain-cells = <0>;
> +                               };
> +                       };
> +               };
> +       };
>  };
> --
> 1.9.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
  2014-11-03 21:02   ` Mathieu Poirier
  (?)
  (?)
@ 2014-11-04  1:28     ` Kevin Hilman
  -1 siblings, 0 replies; 53+ messages in thread
From: Kevin Hilman @ 2014-11-04  1:28 UTC (permalink / raw)
  To: linux-arm-kernel

Mathieu Poirier <mathieu.poirier@linaro.org> writes:

> On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>>         Hi Rafael, Simon, Magnus,
>>
>> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>>
>> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
>> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
>> abstraction of PM domains in DT, it should be sufficiently generic to handle
>> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
>> R-Mobile APE6 (r8a73a4)).
>>
>> Functionality-wise, this behaves the same as the legacy (non-DT) version
>> (modulo missing DT support in some device drivers).
>>
>> Dependencies:
>>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>>     Rafael J. Wysocki's linux-pm.git#linux-next,
>>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>>     through the linux-pm tree.
>>     As this is a one-line change, I included this patch as the first patch of
>>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>>     we don't have to wait for the v3.18-rcX that will include it?
>>
>> For your convenience, I've also pushed this to
>> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>>
>> Changes compared to v3 (more detailed changelogs in the individual patches):
>>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>>     more measurements for PM domains that are currently never powered off.
>>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>>   - I dropped all patches related to QoS device latencies, as these need more
>>     discussion,
>>   - The power-{on,off}-latency properties have been changed from a single value
>>     to a list,
>>   - Device save/restore state latencies have been dropped, as they're Linux
>>     driver-specific, and thus don't belong in DT,
>>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>>     returning an error code again,
>>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>>   - Always keep D4 powered, until the new Coresight code handles runtime
>>     PM,
>
> I took the time to really look at the problems you are experiencing
> with pm runtime in hw_breackpoint.c this weekend.  The coresight
> patchset, when supplemented with PM runtime awareness, will fix that
> problem *only* when traces are activated.  The other obvious condition
> is that other component using the same power domain are also converted
> to using runtime PM.
>
> That being said, the coresight framework and breakpoint handler code
> are two different subsystem.  Their only commonality is that they make
> use of the debug registers (and not even the same ones).  As such (and
> in my opinion) the code in hw_breakpoint should be getting its own pm
> runtime reference without relying on the coresight subsystem.  As
> indicated above, that would only work in some cases.
>
> Supplementing hw_breakpoint to interact with the runtime PM may prove
> trickier than it seems... I'm especially worried about the
> non-blocking requirement inherent to using "smp_call_function()".  I'm
> stepping forward to look into that problem but before doing so I need
> to finish runtime PM on coresight.

Matthieu, without looking more deeply myself, I'm not sure this is what
you need, but have a look at the "IRQ safe" mode of runtime PM.  If you
know your devices runtime PM callbacks are IRQ safe, you can call
pm_runtime_irq_safe(), and your callbacks will be called with IRQs
disabled.

Kevin

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-04  1:28     ` Kevin Hilman
  0 siblings, 0 replies; 53+ messages in thread
From: Kevin Hilman @ 2014-11-04  1:28 UTC (permalink / raw)
  To: Mathieu Poirier
  Cc: Geert Uytterhoeven, Rafael J. Wysocki, Simon Horman, Magnus Damm,
	Ulf Hansson, Grygorii Strashko, Philipp Zabel, Tomasz Figa,
	linux-sh, linux-pm, linux-arm-kernel, devicetree, linux-kernel

Mathieu Poirier <mathieu.poirier@linaro.org> writes:

> On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>>         Hi Rafael, Simon, Magnus,
>>
>> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>>
>> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
>> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
>> abstraction of PM domains in DT, it should be sufficiently generic to handle
>> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
>> R-Mobile APE6 (r8a73a4)).
>>
>> Functionality-wise, this behaves the same as the legacy (non-DT) version
>> (modulo missing DT support in some device drivers).
>>
>> Dependencies:
>>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>>     Rafael J. Wysocki's linux-pm.git#linux-next,
>>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>>     through the linux-pm tree.
>>     As this is a one-line change, I included this patch as the first patch of
>>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>>     we don't have to wait for the v3.18-rcX that will include it?
>>
>> For your convenience, I've also pushed this to
>> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>>
>> Changes compared to v3 (more detailed changelogs in the individual patches):
>>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>>     more measurements for PM domains that are currently never powered off.
>>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>>   - I dropped all patches related to QoS device latencies, as these need more
>>     discussion,
>>   - The power-{on,off}-latency properties have been changed from a single value
>>     to a list,
>>   - Device save/restore state latencies have been dropped, as they're Linux
>>     driver-specific, and thus don't belong in DT,
>>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>>     returning an error code again,
>>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>>   - Always keep D4 powered, until the new Coresight code handles runtime
>>     PM,
>
> I took the time to really look at the problems you are experiencing
> with pm runtime in hw_breackpoint.c this weekend.  The coresight
> patchset, when supplemented with PM runtime awareness, will fix that
> problem *only* when traces are activated.  The other obvious condition
> is that other component using the same power domain are also converted
> to using runtime PM.
>
> That being said, the coresight framework and breakpoint handler code
> are two different subsystem.  Their only commonality is that they make
> use of the debug registers (and not even the same ones).  As such (and
> in my opinion) the code in hw_breakpoint should be getting its own pm
> runtime reference without relying on the coresight subsystem.  As
> indicated above, that would only work in some cases.
>
> Supplementing hw_breakpoint to interact with the runtime PM may prove
> trickier than it seems... I'm especially worried about the
> non-blocking requirement inherent to using "smp_call_function()".  I'm
> stepping forward to look into that problem but before doing so I need
> to finish runtime PM on coresight.

Matthieu, without looking more deeply myself, I'm not sure this is what
you need, but have a look at the "IRQ safe" mode of runtime PM.  If you
know your devices runtime PM callbacks are IRQ safe, you can call
pm_runtime_irq_safe(), and your callbacks will be called with IRQs
disabled.

Kevin

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-04  1:28     ` Kevin Hilman
  0 siblings, 0 replies; 53+ messages in thread
From: Kevin Hilman @ 2014-11-04  1:28 UTC (permalink / raw)
  To: Mathieu Poirier
  Cc: Geert Uytterhoeven, Rafael J. Wysocki, Simon Horman, Magnus Damm,
	Ulf Hansson, Grygorii Strashko, Philipp Zabel, Tomasz Figa,
	linux-sh, linux-pm, linux-arm-kernel, devicetree, linux-kernel

Mathieu Poirier <mathieu.poirier@linaro.org> writes:

> On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>>         Hi Rafael, Simon, Magnus,
>>
>> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>>
>> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
>> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
>> abstraction of PM domains in DT, it should be sufficiently generic to handle
>> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
>> R-Mobile APE6 (r8a73a4)).
>>
>> Functionality-wise, this behaves the same as the legacy (non-DT) version
>> (modulo missing DT support in some device drivers).
>>
>> Dependencies:
>>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>>     Rafael J. Wysocki's linux-pm.git#linux-next,
>>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>>     through the linux-pm tree.
>>     As this is a one-line change, I included this patch as the first patch of
>>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>>     we don't have to wait for the v3.18-rcX that will include it?
>>
>> For your convenience, I've also pushed this to
>> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>>
>> Changes compared to v3 (more detailed changelogs in the individual patches):
>>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>>     more measurements for PM domains that are currently never powered off.
>>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>>   - I dropped all patches related to QoS device latencies, as these need more
>>     discussion,
>>   - The power-{on,off}-latency properties have been changed from a single value
>>     to a list,
>>   - Device save/restore state latencies have been dropped, as they're Linux
>>     driver-specific, and thus don't belong in DT,
>>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>>     returning an error code again,
>>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>>   - Always keep D4 powered, until the new Coresight code handles runtime
>>     PM,
>
> I took the time to really look at the problems you are experiencing
> with pm runtime in hw_breackpoint.c this weekend.  The coresight
> patchset, when supplemented with PM runtime awareness, will fix that
> problem *only* when traces are activated.  The other obvious condition
> is that other component using the same power domain are also converted
> to using runtime PM.
>
> That being said, the coresight framework and breakpoint handler code
> are two different subsystem.  Their only commonality is that they make
> use of the debug registers (and not even the same ones).  As such (and
> in my opinion) the code in hw_breakpoint should be getting its own pm
> runtime reference without relying on the coresight subsystem.  As
> indicated above, that would only work in some cases.
>
> Supplementing hw_breakpoint to interact with the runtime PM may prove
> trickier than it seems... I'm especially worried about the
> non-blocking requirement inherent to using "smp_call_function()".  I'm
> stepping forward to look into that problem but before doing so I need
> to finish runtime PM on coresight.

Matthieu, without looking more deeply myself, I'm not sure this is what
you need, but have a look at the "IRQ safe" mode of runtime PM.  If you
know your devices runtime PM callbacks are IRQ safe, you can call
pm_runtime_irq_safe(), and your callbacks will be called with IRQs
disabled.

Kevin

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

* [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-04  1:28     ` Kevin Hilman
  0 siblings, 0 replies; 53+ messages in thread
From: Kevin Hilman @ 2014-11-04  1:28 UTC (permalink / raw)
  To: linux-arm-kernel

Mathieu Poirier <mathieu.poirier@linaro.org> writes:

> On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>>         Hi Rafael, Simon, Magnus,
>>
>> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>>
>> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
>> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
>> abstraction of PM domains in DT, it should be sufficiently generic to handle
>> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
>> R-Mobile APE6 (r8a73a4)).
>>
>> Functionality-wise, this behaves the same as the legacy (non-DT) version
>> (modulo missing DT support in some device drivers).
>>
>> Dependencies:
>>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>>     Rafael J. Wysocki's linux-pm.git#linux-next,
>>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>>     through the linux-pm tree.
>>     As this is a one-line change, I included this patch as the first patch of
>>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>>     we don't have to wait for the v3.18-rcX that will include it?
>>
>> For your convenience, I've also pushed this to
>> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>>
>> Changes compared to v3 (more detailed changelogs in the individual patches):
>>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>>     more measurements for PM domains that are currently never powered off.
>>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>>   - I dropped all patches related to QoS device latencies, as these need more
>>     discussion,
>>   - The power-{on,off}-latency properties have been changed from a single value
>>     to a list,
>>   - Device save/restore state latencies have been dropped, as they're Linux
>>     driver-specific, and thus don't belong in DT,
>>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>>     returning an error code again,
>>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>>   - Always keep D4 powered, until the new Coresight code handles runtime
>>     PM,
>
> I took the time to really look at the problems you are experiencing
> with pm runtime in hw_breackpoint.c this weekend.  The coresight
> patchset, when supplemented with PM runtime awareness, will fix that
> problem *only* when traces are activated.  The other obvious condition
> is that other component using the same power domain are also converted
> to using runtime PM.
>
> That being said, the coresight framework and breakpoint handler code
> are two different subsystem.  Their only commonality is that they make
> use of the debug registers (and not even the same ones).  As such (and
> in my opinion) the code in hw_breakpoint should be getting its own pm
> runtime reference without relying on the coresight subsystem.  As
> indicated above, that would only work in some cases.
>
> Supplementing hw_breakpoint to interact with the runtime PM may prove
> trickier than it seems... I'm especially worried about the
> non-blocking requirement inherent to using "smp_call_function()".  I'm
> stepping forward to look into that problem but before doing so I need
> to finish runtime PM on coresight.

Matthieu, without looking more deeply myself, I'm not sure this is what
you need, but have a look at the "IRQ safe" mode of runtime PM.  If you
know your devices runtime PM callbacks are IRQ safe, you can call
pm_runtime_irq_safe(), and your callbacks will be called with IRQs
disabled.

Kevin

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
  2014-11-04  1:28     ` Kevin Hilman
  (?)
  (?)
@ 2014-11-04 14:57       ` Mathieu Poirier
  -1 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-04 14:57 UTC (permalink / raw)
  To: linux-arm-kernel

On 3 November 2014 18:28, Kevin Hilman <khilman@kernel.org> wrote:
> Mathieu Poirier <mathieu.poirier@linaro.org> writes:
>
>> On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>>>         Hi Rafael, Simon, Magnus,
>>>
>>> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>>>
>>> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
>>> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
>>> abstraction of PM domains in DT, it should be sufficiently generic to handle
>>> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
>>> R-Mobile APE6 (r8a73a4)).
>>>
>>> Functionality-wise, this behaves the same as the legacy (non-DT) version
>>> (modulo missing DT support in some device drivers).
>>>
>>> Dependencies:
>>>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>>>     Rafael J. Wysocki's linux-pm.git#linux-next,
>>>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>>>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>>>     through the linux-pm tree.
>>>     As this is a one-line change, I included this patch as the first patch of
>>>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>>>     we don't have to wait for the v3.18-rcX that will include it?
>>>
>>> For your convenience, I've also pushed this to
>>> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>>>
>>> Changes compared to v3 (more detailed changelogs in the individual patches):
>>>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>>>     more measurements for PM domains that are currently never powered off.
>>>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>>>   - I dropped all patches related to QoS device latencies, as these need more
>>>     discussion,
>>>   - The power-{on,off}-latency properties have been changed from a single value
>>>     to a list,
>>>   - Device save/restore state latencies have been dropped, as they're Linux
>>>     driver-specific, and thus don't belong in DT,
>>>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>>>     returning an error code again,
>>>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>>>   - Always keep D4 powered, until the new Coresight code handles runtime
>>>     PM,
>>
>> I took the time to really look at the problems you are experiencing
>> with pm runtime in hw_breackpoint.c this weekend.  The coresight
>> patchset, when supplemented with PM runtime awareness, will fix that
>> problem *only* when traces are activated.  The other obvious condition
>> is that other component using the same power domain are also converted
>> to using runtime PM.
>>
>> That being said, the coresight framework and breakpoint handler code
>> are two different subsystem.  Their only commonality is that they make
>> use of the debug registers (and not even the same ones).  As such (and
>> in my opinion) the code in hw_breakpoint should be getting its own pm
>> runtime reference without relying on the coresight subsystem.  As
>> indicated above, that would only work in some cases.
>>
>> Supplementing hw_breakpoint to interact with the runtime PM may prove
>> trickier than it seems... I'm especially worried about the
>> non-blocking requirement inherent to using "smp_call_function()".  I'm
>> stepping forward to look into that problem but before doing so I need
>> to finish runtime PM on coresight.
>
> Matthieu, without looking more deeply myself, I'm not sure this is what
> you need, but have a look at the "IRQ safe" mode of runtime PM.  If you
> know your devices runtime PM callbacks are IRQ safe, you can call
> pm_runtime_irq_safe(), and your callbacks will be called with IRQs
> disabled.

Thanks for the follow up - I will have to dig further into the
irq_safe() API along with understanding the exact requirements
stemming from hw_breakpoint.c.  I did a few test yesterday and it
turns out the "reset_ctrl_regs()" problem in hw_breakpoint.c is
exactly the same as a corner case popping up on coresight.  As such
fixing one readily provides a solution for the other.

>
> Kevin

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-04 14:57       ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-04 14:57 UTC (permalink / raw)
  To: Kevin Hilman
  Cc: Geert Uytterhoeven, Rafael J. Wysocki, Simon Horman, Magnus Damm,
	Ulf Hansson, Grygorii Strashko, Philipp Zabel, Tomasz Figa,
	linux-sh, linux-pm, linux-arm-kernel, devicetree, linux-kernel

On 3 November 2014 18:28, Kevin Hilman <khilman@kernel.org> wrote:
> Mathieu Poirier <mathieu.poirier@linaro.org> writes:
>
>> On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>>>         Hi Rafael, Simon, Magnus,
>>>
>>> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>>>
>>> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
>>> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
>>> abstraction of PM domains in DT, it should be sufficiently generic to handle
>>> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
>>> R-Mobile APE6 (r8a73a4)).
>>>
>>> Functionality-wise, this behaves the same as the legacy (non-DT) version
>>> (modulo missing DT support in some device drivers).
>>>
>>> Dependencies:
>>>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>>>     Rafael J. Wysocki's linux-pm.git#linux-next,
>>>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>>>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>>>     through the linux-pm tree.
>>>     As this is a one-line change, I included this patch as the first patch of
>>>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>>>     we don't have to wait for the v3.18-rcX that will include it?
>>>
>>> For your convenience, I've also pushed this to
>>> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>>>
>>> Changes compared to v3 (more detailed changelogs in the individual patches):
>>>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>>>     more measurements for PM domains that are currently never powered off.
>>>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>>>   - I dropped all patches related to QoS device latencies, as these need more
>>>     discussion,
>>>   - The power-{on,off}-latency properties have been changed from a single value
>>>     to a list,
>>>   - Device save/restore state latencies have been dropped, as they're Linux
>>>     driver-specific, and thus don't belong in DT,
>>>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>>>     returning an error code again,
>>>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>>>   - Always keep D4 powered, until the new Coresight code handles runtime
>>>     PM,
>>
>> I took the time to really look at the problems you are experiencing
>> with pm runtime in hw_breackpoint.c this weekend.  The coresight
>> patchset, when supplemented with PM runtime awareness, will fix that
>> problem *only* when traces are activated.  The other obvious condition
>> is that other component using the same power domain are also converted
>> to using runtime PM.
>>
>> That being said, the coresight framework and breakpoint handler code
>> are two different subsystem.  Their only commonality is that they make
>> use of the debug registers (and not even the same ones).  As such (and
>> in my opinion) the code in hw_breakpoint should be getting its own pm
>> runtime reference without relying on the coresight subsystem.  As
>> indicated above, that would only work in some cases.
>>
>> Supplementing hw_breakpoint to interact with the runtime PM may prove
>> trickier than it seems... I'm especially worried about the
>> non-blocking requirement inherent to using "smp_call_function()".  I'm
>> stepping forward to look into that problem but before doing so I need
>> to finish runtime PM on coresight.
>
> Matthieu, without looking more deeply myself, I'm not sure this is what
> you need, but have a look at the "IRQ safe" mode of runtime PM.  If you
> know your devices runtime PM callbacks are IRQ safe, you can call
> pm_runtime_irq_safe(), and your callbacks will be called with IRQs
> disabled.

Thanks for the follow up - I will have to dig further into the
irq_safe() API along with understanding the exact requirements
stemming from hw_breakpoint.c.  I did a few test yesterday and it
turns out the "reset_ctrl_regs()" problem in hw_breakpoint.c is
exactly the same as a corner case popping up on coresight.  As such
fixing one readily provides a solution for the other.

>
> Kevin

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

* Re: [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-04 14:57       ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-04 14:57 UTC (permalink / raw)
  To: Kevin Hilman
  Cc: Geert Uytterhoeven, Rafael J. Wysocki, Simon Horman, Magnus Damm,
	Ulf Hansson, Grygorii Strashko, Philipp Zabel, Tomasz Figa,
	linux-sh, linux-pm, linux-arm-kernel, devicetree, linux-kernel

On 3 November 2014 18:28, Kevin Hilman <khilman@kernel.org> wrote:
> Mathieu Poirier <mathieu.poirier@linaro.org> writes:
>
>> On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>>>         Hi Rafael, Simon, Magnus,
>>>
>>> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>>>
>>> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
>>> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
>>> abstraction of PM domains in DT, it should be sufficiently generic to handle
>>> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
>>> R-Mobile APE6 (r8a73a4)).
>>>
>>> Functionality-wise, this behaves the same as the legacy (non-DT) version
>>> (modulo missing DT support in some device drivers).
>>>
>>> Dependencies:
>>>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>>>     Rafael J. Wysocki's linux-pm.git#linux-next,
>>>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>>>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>>>     through the linux-pm tree.
>>>     As this is a one-line change, I included this patch as the first patch of
>>>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>>>     we don't have to wait for the v3.18-rcX that will include it?
>>>
>>> For your convenience, I've also pushed this to
>>> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>>>
>>> Changes compared to v3 (more detailed changelogs in the individual patches):
>>>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>>>     more measurements for PM domains that are currently never powered off.
>>>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>>>   - I dropped all patches related to QoS device latencies, as these need more
>>>     discussion,
>>>   - The power-{on,off}-latency properties have been changed from a single value
>>>     to a list,
>>>   - Device save/restore state latencies have been dropped, as they're Linux
>>>     driver-specific, and thus don't belong in DT,
>>>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>>>     returning an error code again,
>>>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>>>   - Always keep D4 powered, until the new Coresight code handles runtime
>>>     PM,
>>
>> I took the time to really look at the problems you are experiencing
>> with pm runtime in hw_breackpoint.c this weekend.  The coresight
>> patchset, when supplemented with PM runtime awareness, will fix that
>> problem *only* when traces are activated.  The other obvious condition
>> is that other component using the same power domain are also converted
>> to using runtime PM.
>>
>> That being said, the coresight framework and breakpoint handler code
>> are two different subsystem.  Their only commonality is that they make
>> use of the debug registers (and not even the same ones).  As such (and
>> in my opinion) the code in hw_breakpoint should be getting its own pm
>> runtime reference without relying on the coresight subsystem.  As
>> indicated above, that would only work in some cases.
>>
>> Supplementing hw_breakpoint to interact with the runtime PM may prove
>> trickier than it seems... I'm especially worried about the
>> non-blocking requirement inherent to using "smp_call_function()".  I'm
>> stepping forward to look into that problem but before doing so I need
>> to finish runtime PM on coresight.
>
> Matthieu, without looking more deeply myself, I'm not sure this is what
> you need, but have a look at the "IRQ safe" mode of runtime PM.  If you
> know your devices runtime PM callbacks are IRQ safe, you can call
> pm_runtime_irq_safe(), and your callbacks will be called with IRQs
> disabled.

Thanks for the follow up - I will have to dig further into the
irq_safe() API along with understanding the exact requirements
stemming from hw_breakpoint.c.  I did a few test yesterday and it
turns out the "reset_ctrl_regs()" problem in hw_breakpoint.c is
exactly the same as a corner case popping up on coresight.  As such
fixing one readily provides a solution for the other.

>
> Kevin

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

* [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support
@ 2014-11-04 14:57       ` Mathieu Poirier
  0 siblings, 0 replies; 53+ messages in thread
From: Mathieu Poirier @ 2014-11-04 14:57 UTC (permalink / raw)
  To: linux-arm-kernel

On 3 November 2014 18:28, Kevin Hilman <khilman@kernel.org> wrote:
> Mathieu Poirier <mathieu.poirier@linaro.org> writes:
>
>> On 3 November 2014 08:34, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
>>>         Hi Rafael, Simon, Magnus,
>>>
>>> This patch series enables DT support for PM domains on Renesas R-Mobile SoCs.
>>>
>>> Currently it's limited to R-Mobile A1 (r8a7740), but given the similarity of
>>> the SYSC System-Controller on the various SH-Mobile/R-Mobile SoCs, and the
>>> abstraction of PM domains in DT, it should be sufficiently generic to handle
>>> other SoCs in the future (e.g. SH-Mobile AP4 (sh7372), SH-Mobile AG5 (sh73a0),
>>> R-Mobile APE6 (r8a73a4)).
>>>
>>> Functionality-wise, this behaves the same as the legacy (non-DT) version
>>> (modulo missing DT support in some device drivers).
>>>
>>> Dependencies:
>>>   - This is based on Simon Horman's renesas-devel-20141030-v3.18-rc2, and
>>>     Rafael J. Wysocki's linux-pm.git#linux-next,
>>>   - This depends on "PM / Domains: Change prototype for the ->attach_dev()
>>>     callback" from Ulf hanson, which is intended to still enter v3.18-rcX
>>>     through the linux-pm tree.
>>>     As this is a one-line change, I included this patch as the first patch of
>>>     this series.  Perhaps it's even acceptable for Simon to (also) apply it, so
>>>     we don't have to wait for the v3.18-rcX that will include it?
>>>
>>> For your convenience, I've also pushed this to
>>> git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git#rmobile-genpd
>>>
>>> Changes compared to v3 (more detailed changelogs in the individual patches):
>>>   - I dropped the patch to add preliminary PM domain latencies, as I want to do
>>>     more measurements for PM domains that are currently never powered off.
>>>     Values seem to range between 8.5 and 26 us, depending on the PM domain.
>>>   - I dropped all patches related to QoS device latencies, as these need more
>>>     discussion,
>>>   - The power-{on,off}-latency properties have been changed from a single value
>>>     to a list,
>>>   - Device save/restore state latencies have been dropped, as they're Linux
>>>     driver-specific, and thus don't belong in DT,
>>>   - Use proper pm_clk_create()/pm_clk_destroy(), and update for attach_dev()
>>>     returning an error code again,
>>>   - New patch to enable module clocks if !CONFIG_PM_RUNTIME,
>>>   - Always keep D4 powered, until the new Coresight code handles runtime
>>>     PM,
>>
>> I took the time to really look at the problems you are experiencing
>> with pm runtime in hw_breackpoint.c this weekend.  The coresight
>> patchset, when supplemented with PM runtime awareness, will fix that
>> problem *only* when traces are activated.  The other obvious condition
>> is that other component using the same power domain are also converted
>> to using runtime PM.
>>
>> That being said, the coresight framework and breakpoint handler code
>> are two different subsystem.  Their only commonality is that they make
>> use of the debug registers (and not even the same ones).  As such (and
>> in my opinion) the code in hw_breakpoint should be getting its own pm
>> runtime reference without relying on the coresight subsystem.  As
>> indicated above, that would only work in some cases.
>>
>> Supplementing hw_breakpoint to interact with the runtime PM may prove
>> trickier than it seems... I'm especially worried about the
>> non-blocking requirement inherent to using "smp_call_function()".  I'm
>> stepping forward to look into that problem but before doing so I need
>> to finish runtime PM on coresight.
>
> Matthieu, without looking more deeply myself, I'm not sure this is what
> you need, but have a look at the "IRQ safe" mode of runtime PM.  If you
> know your devices runtime PM callbacks are IRQ safe, you can call
> pm_runtime_irq_safe(), and your callbacks will be called with IRQs
> disabled.

Thanks for the follow up - I will have to dig further into the
irq_safe() API along with understanding the exact requirements
stemming from hw_breakpoint.c.  I did a few test yesterday and it
turns out the "reset_ctrl_regs()" problem in hw_breakpoint.c is
exactly the same as a corner case popping up on coresight.  As such
fixing one readily provides a solution for the other.

>
> Kevin

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

end of thread, other threads:[~2014-11-04 14:57 UTC | newest]

Thread overview: 53+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-03 15:34 [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support Geert Uytterhoeven
2014-11-03 15:34 ` Geert Uytterhoeven
2014-11-03 15:34 ` Geert Uytterhoeven
2014-11-03 15:34 ` [PATCH v4 1/9] PM / Domains: Change prototype for the ->attach_dev() callback Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 18:15   ` Andreas Schwab
2014-11-03 18:15     ` Andreas Schwab
2014-11-03 18:15     ` Andreas Schwab
2014-11-03 15:34 ` [PATCH v4 2/9] PM / Domains: Add DT bindings for power-on/off latencies Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34 ` [PATCH v4 3/9] PM / Domains: Add DT bindings for the R-Mobile System Controller Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34 ` [PATCH v4 4/9] ARM: shmobile: R-Mobile: Use generic_pm_domain.attach_dev() for pm_clk setup Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34 ` [PATCH v4 5/9] ARM: shmobile: R-Mobile: Enable module clocks if !CONFIG_PM_RUNTIME Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34 ` [PATCH v4 6/9] ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34 ` [PATCH v4 7/9] ARM: shmobile: R-Mobile: Add DT support for PM domains Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34 ` [PATCH v4 8/9] ARM: shmobile: r8a7740 dtsi: Add PM domain support Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 21:24   ` Mathieu Poirier
2014-11-03 21:24     ` Mathieu Poirier
2014-11-03 21:24     ` Mathieu Poirier
2014-11-03 21:24     ` Mathieu Poirier
2014-11-03 15:34 ` [PATCH v4 9/9] drivers: sh: Disable PM runtime for multi-platform r8a7740 with genpd Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 15:34   ` Geert Uytterhoeven
2014-11-03 21:02 ` [PATCH v4 0/9] ARM: shmobile: R-Mobile: DT PM domain support Mathieu Poirier
2014-11-03 21:02   ` Mathieu Poirier
2014-11-03 21:02   ` Mathieu Poirier
2014-11-03 21:02   ` Mathieu Poirier
2014-11-04  1:28   ` Kevin Hilman
2014-11-04  1:28     ` Kevin Hilman
2014-11-04  1:28     ` Kevin Hilman
2014-11-04  1:28     ` Kevin Hilman
2014-11-04 14:57     ` Mathieu Poirier
2014-11-04 14:57       ` Mathieu Poirier
2014-11-04 14:57       ` Mathieu Poirier
2014-11-04 14:57       ` Mathieu Poirier

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.