[PATCH v3 00/16] ARM: shmobile: Add CPG/MSTP Clock Domain
Ulf Hansson
ulf.hansson at linaro.org
Wed Jul 22 06:00:37 PDT 2015
On 1 July 2015 at 17:57, Geert Uytterhoeven <geert+renesas at glider.be> wrote:
> Hi all,
>
> This patch series adds Clock Domain support to the Clock Pulse Generator
> (CPG) Module Stop (MSTP) Clocks driver using the generic PM Domain, to
> be used on shmobile SoCs without device power domains (R-Car Gen1 and
> Gen2, RZ). This allows to power-manage the module clocks of SoC devices
> that are part of the CPG/MSTP Clock Domain using Runtime PM, or for
> system suspend/resume, similar to SoCs with device power domains
> (SH-Mobile and R-Mobile).
>
> SoC devices that are part of the CPG/MSTP Clock Domain and can be
> power-managed through an MSTP clock are tagged in DT with a proper
> "power-domains" property, also serving as a visual clue. This applies to
> most on-SoC devices, which have a one-to-one mapping from SoC device to
> DT device node. Notable exceptions are "display" and "sound" device
> nodes, which represent multiple SoC devices, each having their own MSTP
> clocks. Hence drivers for such devices still have to manage their
> (multiple module) clocks themselves.
>
> The (MSTP) clock to use for power-management is found by scanning for
> clocks that are compatible with "renesas,cpg-mstp-clocks".
> In V1, the "first" clock tied to each device (con_id NULL) was used,
> being a bit ad-hoc. It was suggested to use the "fck" clock instead,
> but this may conflict with DT bindings for devices we don't control
> (e.g. GIC-400 plans to mandate "clk" for the clk-name of its single
> clock). Looking for real MSTP clocks avoids this problem.
>
> Logically, the CPG/MSTP Clock Domain operates on the SoC CPG/MSTP block.
> As there's no single device node in DT representing this block (there
> are separate device nodes for the CPG and for the individual MSTP
> clocks), I bound the logic to the CPG device node. Perhaps this is
> something we should change for future SoCs?
>
> Finally, the legacy default PM domain hack in drivers/sh/pm_runtime.c
> is no longer needed when running an ARM multi-platform kernel on an
> shmobile SoC with genpd support. Please note that this hack is still
> needed for legacy (SH/ARM) platforms, and for the CONFIG_PM=n case.
> Perhaps we should unconditionally enable PM when building shmobile
> multi-platform kernels?
>
> Compared to the legacy default PM domain hack, the CPG/MSTP Clock Domain
> has several advantages:
> - It only affects on-SoC devices, not all platform devices,
> - It only affects the on-SoC devices we want, as specified in DT,
> - Allmost all module clocks of all on-SoC devices (barring devices
> needed for wake-up) are now gated during s2ram, saving more power.
>
> By adding a small quirk to the CPG/MSTP Clock Domain code, its functions
> to attach/detach devices to a PM Domain can be reused by the pm-rmobile
> driver, reducing code duplication.
>
> Here's a list of all devices in the CPG/MSTP Clock Domain on r8a7791:
>
> root at koelsch:~# cat /sys/kernel/debug/pm_genpd/pm_genpd_summary
> domain status slaves
> /device runtime status
> ----------------------------------------------------------------------
> cpg_clocks on
> /devices/platform/e61c0000.interrupt-controller active
> /devices/platform/e60b0000.i2c suspended
> /devices/platform/ffca0000.timer suspended
> /devices/platform/e6590100.usb-phy unsupported
> /devices/platform/e6050000.gpio active
> /devices/platform/e6051000.gpio active
> /devices/platform/e6052000.gpio active
> /devices/platform/e6053000.gpio active
> /devices/platform/e6054000.gpio active
> /devices/platform/e6055000.gpio active
> /devices/platform/e6055400.gpio active
> /devices/platform/e6055800.gpio active
> /devices/platform/ee090000.pci active
> /devices/platform/ee0d0000.pci active
> /devices/platform/fe000000.pcie unsupported
> /devices/platform/e6700000.dma-controller active
> /devices/platform/e6720000.dma-controller active
> /devices/platform/ec700000.dma-controller active
> /devices/platform/ec720000.dma-controller suspended
> /devices/platform/e65a0000.dma-controller suspended
> /devices/platform/e65b0000.dma-controller suspended
> /devices/platform/e6e60000.serial active
> /devices/platform/e6e68000.serial active
> /devices/platform/ee300000.sata unsupported
> /devices/platform/e6b10000.spi suspended
> /devices/platform/e6e20000.spi suspended
> /devices/platform/ee700000.ethernet active
> /devices/platform/e6530000.i2c suspended
> /devices/platform/e6ef1000.video suspended
> /devices/platform/e61f0000.thermal active
> /devices/platform/ee100000.sd active
> /devices/platform/ee140000.sd active
> /devices/platform/ee160000.sd active
> root at koelsch:~#
>
> Patch overview:
> - Patch 1 adds the core CPG/MSTP Clock Domain code to the CPG MSTP
> driver,
> - Patches 2-5 adds CPG/MSTP Clock Domain driver support for all
> Renesas SoCs that have MSTP clocks, but no device power domains, and
> updates the DT binding documentation accordingly,
> - Patches 6-12 add CPG/MSTP Clock Domains to the dtsi files,
> - Patches 13 and 14 disable the legacy default PM domain hack on all
> ARM multi-platform builds with genpd support, now it's no longer
> needed nor wanted,
> - Patch 15 adds a quirk for r8a73a4 and sh73a0, where the Bus State
> Controller is not power-managed by an MSTP clock, but by a plain
> CPG clock,
> - Patch 16 makes the R-Mobile PM Domain driver use the CPG/MSTP Clock
> Domain attach/detach helpers, as they're more future-proof, and to
> reduce code duplication.
>
> Changes compared to v2 ("[PATCH v2 00/14] ARM: shmobile: Add CPG Clock
> Domains", https://lkml.org/lkml/2015/5/28/590):
> - Add Acked-by,
> - Use "CPG/MSTP Clock Domain" instead of "CPG Clock Domain",
> - Drop bogus addition of #includes to clk-rcar-gen2.c,
> - Call pm_clk_destroy() from cpg_mstp_detach_dev() only if
> cpg_mstp_attach_dev() actually added a clock,
> - Add "power-domains" property to recently introduced Ethernet AVB
> device node,
> - Add CPG/MSTP Clock Domain to recently introduced r8a7793 SoC,
> - The legacy default PM Domain runtime check must stay for the ARM
> multiplatform CONFIG_PM=n case, to prevent the code from running on
> non-shmobile machines,
> - Provide backwards-compatibility with old DTs (mainly for R-Car
> Gen2),
> - Extract EMMA Mobile EV2 removal into a separate patch,
> - Replace explicit platform checks in the legacy default PM Domain
> code by a check for the presence of MSTP clocks,
> - Drop references to legacy r8a7740/sh73a0, which are gone.
>
> Changes compared to v1 ("[PATCH/RFC 0/5] ARM: shmobile: rcar-gen2: Add
> CPG Clock Domain",
> https://www.marc.info/?l=linux-pm&m=142670805530085&w=3):
> - Add Acked-by and Reviewed-by.
> - Move core CPG Clock Domain code from the R-Car Gen2 driver to the
> CPG MSTP Clocks driver, as it's generic, and can be used on other
> Renesas SoCs that have a CPG/MSTP block,
> - Scan for an MSTP clock instead of using the first clock tied to the
> device (con_id NULL),
> - Add support for R-Car Gen1 and RZ, in addition to R-Car Gen2,
> allowing to drop the legacy default PM domain hack completely in
> multi-platform builds,
> - Reuse the CPG Clock Domain attach/detach helpers for pm-rmobile.
> More detailed change logs are available in the individual patches.
>
> Dependencies:
> - This series is against renesas-drivers-2015-06-29-v4.1, i.e. it
> depends on the removal of legacy r8a7740/sh73a0 support,
> - As usual when involving clocks and/or PM Domains, there are stringent
> dependencies between the (subsets of) patches:
> - Patches 2-5 depend on patch 1,
> - Patches 6-12 depend on patches 2-5,
> - Patch 14 depends on patches 6-13,
> - Patch 15 depends on patch 1 only,
> - Patch 16 depends on patch 15.
>
> All of this was tested on:
> - r8a73a4/ape6evm,
> - r8a7740/armadillo,
> - r8a7791/koelsch (with and without CONFIG_PM),
> - sh73a0/kzm9g.
>
> Testing on other shmobile platforms (esp. R-Car Gen1 and RZ) would be
> appreciated.
>
> I think this series goes best in through Simon's shmobile tree.
>
> Thanks for applying!
>
> Geert Uytterhoeven (16):
> [1] clk: shmobile: Add CPG/MSTP Clock Domain support
> [2] clk: shmobile: r8a7778: Add CPG/MSTP Clock Domain support
> [3] clk: shmobile: r8a7779: Add CPG/MSTP Clock Domain support
> [4] clk: shmobile: rcar-gen2: Add CPG/MSTP Clock Domain support
> [5] clk: shmobile: rz: Add CPG/MSTP Clock Domain support
> [6] ARM: shmobile: r7s72100 dtsi: Add CPG/MSTP Clock Domain
> [7] ARM: shmobile: r8a7778 dtsi: Add CPG/MSTP Clock Domain
> [8] ARM: shmobile: r8a7779 dtsi: Add CPG/MSTP Clock Domain
> [9] ARM: shmobile: r8a7790 dtsi: Add CPG/MSTP Clock Domain
> [10] ARM: shmobile: r8a7791 dtsi: Add CPG/MSTP Clock Domain
> [11] ARM: shmobile: r8a7793 dtsi: Add CPG/MSTP Clock Domain
> [12] ARM: shmobile: r8a7794 dtsi: Add CPG/MSTP Clock Domain
> [13] drivers: sh: Disable legacy default PM Domain on emev2
> [14] drivers: sh: Disable PM runtime for multi-platform ARM with genpd
> [15] clk: shmobile: mstp: Consider "zb_clk" suitable for power management
> [16] ARM: shmobile: R-Mobile: Use CPG/MSTP Clock Domain attach/detach
> helpers
>
> .../bindings/clock/renesas,r8a7778-cpg-clocks.txt | 29 ++++++-
> .../bindings/clock/renesas,r8a7779-cpg-clocks.txt | 30 +++++++-
> .../clock/renesas,rcar-gen2-cpg-clocks.txt | 26 ++++++-
> .../bindings/clock/renesas,rz-cpg-clocks.txt | 29 ++++++-
> arch/arm/boot/dts/r7s72100.dtsi | 19 +++++
> arch/arm/boot/dts/r8a7778.dtsi | 22 ++++++
> arch/arm/boot/dts/r8a7779.dtsi | 23 ++++++
> arch/arm/boot/dts/r8a7790.dtsi | 79 +++++++++++++++++--
> arch/arm/boot/dts/r8a7791.dtsi | 81 +++++++++++++++++--
> arch/arm/boot/dts/r8a7793.dtsi | 7 ++
> arch/arm/boot/dts/r8a7794.dtsi | 28 +++++++
> arch/arm/mach-shmobile/Kconfig | 2 +
> arch/arm/mach-shmobile/pm-rmobile.c | 35 +--------
> drivers/clk/shmobile/clk-mstp.c | 90 ++++++++++++++++++++++
> drivers/clk/shmobile/clk-r8a7778.c | 2 +
> drivers/clk/shmobile/clk-r8a7779.c | 2 +
> drivers/clk/shmobile/clk-rcar-gen2.c | 2 +
> drivers/clk/shmobile/clk-rz.c | 3 +
> drivers/sh/pm_runtime.c | 19 ++---
> include/linux/clk/shmobile.h | 12 +++
> 20 files changed, 472 insertions(+), 68 deletions(-)
>
> --
Unless it's too late; for the series - feel free to add:
Reviewed-by: Ulf Hansson <ulf.hansson at linaro.org>
Kind regards
Uffe
More information about the linux-arm-kernel
mailing list