[PATCH v6 00/11] soc: renesas: Add R-Car SYSC PM Domain Support

Geert Uytterhoeven
2016-04-20T12:02:35Z

Hi Simon, Magnus,

This patch series introduces a DT-based driver for the R-Car System
Controller, as found on Renesas R-Car H1, R-Car Gen2, and R-Car Gen3
SoCs.

This is a dependency for the enablement of DU and VSP on R-Car H3, as
the VSPs are located in a PM Domain.

Changes compared to v5:
- Add Reviewed-by,
- Drop unneeded genpd->dev_ops.active_wakeup callback,
- Move call to pm_genpd_init() after all local initialization,

Changes compared to v4:
- Add Reviewed-by,
- Mask SYSC interrupts sources before enabling them (doesn't matter
much as they're disabled at the GIC level anyway),
- Reference r8a7791_sysc_info directly for R-Car M2-N in rcar-sysc.c,
- Re-add explicit "always-on" power area instead of aliasing the SoC's
Clock Domain,
- Add "always-on" power area on R-Car H1 and Gen2 SoCs,
- Merge the two initialization phases again,
- Use either the cpg_mssr_*() or cpg_mstp_*() callbacks for Clock
Domain control,
- Drop dependency on r8a7795 of the Clock Domain handling, as this is
used for the "always-on" PM Domain on R-Car H1 and Gen2, too,

Changes compared to v3:
- Add Reviewed-by,
- Make sure not to clear reserved SYSCIMR bits that were set before,
- Make the always-on power area implicit and always present, and an
alias of the existing SoC's Clock Domain. This makes the number of
power areas a compile-time constant, and allows to drop PD_ALWAYS_ON
and some checks.
- Split initialization in two phases,
- Remove the explicit dependency on the CPG/MSSR driver by forwarding
the attach/detach callbacks to the parent PM Domain.
If deemed reusable, rcar_sysc_{at,de}tach_dev() can be moved to
common genpd code later.
- Document that ARM cores are controlled by PSCI on R-Car Gen3
(although the underlying CPG/APMU hardware is the same as on Gen2),
- Drop R8A7779_PD_SH, as it's not documented in the datasheet,
- Rename R8A779*_PD_SH to R8A779*_PD_SH_4A, and "sh" to "sh-4a" on
R-Car Gen2,
- Remove always-on power area from the R-Car Gen3 table, as it's now
implicitly handled by the rcar-sysc driver,
- Reformat tables,
- Minor improvements (double evaluation, unused parameter, debug
message consolidation),
- Update MAINTAINERS.

Changes compared to v2:
- Add Reviewed-by,
- Rename driver from pm-rcar to rcar-sysc,
- Create PM Domains from hierarchy in C data instead of DT,
- Add support for an "always-on" domain, which is currently used on
R-Car H3 only (support can be added for other R-Car SoCs, preferably
after their migration to CPG/MSSR),
- Drop power area A3SH on R-Car H3, as it's no longer
documented in the datasheet, and touching it seems to crash SYSC,
- Hook up the CPG/MSSR Clock Domain attach/detach callbacks instead of
using our own copies,
- Initialize SYSCIER early, as SYSC needs the interrupt sources to be
enabled to control power,
- Mask all SYSC interrupt sources for the CPU,
- Drop check for CONFIG_PM_GENERIC_DOMAINS, which is now always
enabled on R-Car SoCs,
- Use early_initcall() instead of core_initcall(),
- Do not power up CPU power areas during initialization, as this is
handled later (directly or indirectly) by the SMP code,
- Extract bindings into its own series, "[PATCH v3 0/7] PM / Domains:
Add DT bindings for the R-Car System Controller".

Changes compared to v1 (more details in the individual patches):
- Moved pm-rcar from arch/arm/mach-shmobile/ to drivers/soc/renesas/,
- Added R-Car H3 (r8a7795) support, incl. support for devices part of
a SYSC PM domain and the CPG/MSSR clock domain,
- Use "renesas,<type>-sysc" instead of "renesas,sysc-<type>",
- Added fallback compatibility strings for R-Car Gen2 and Gen3.
- Changed one-line summary prefix to match current arm-soc practices,
- The L2 cache-controller patches have been extracted into a separate
series ("[PATCH v3 0/7] ARM/arm64: dts: renesas: Add/complete L2
cache-controller nodes"),
- Minor fixes.

Dependencies:
- clk-renesas-for-v4.7 (which now includes "[PATCH v2 0/4] clk:
renesas: R-Car SYSC PM Domain Preparation"; pull request sent),
- renesas-devel-20160420-v4.6-rc4 (which already contains series
"[PATCH v5 0/7] PM / Domains: Add DT bindings for the R-Car System
Controller").

I won't be resending follow-up series "[PATCH v5 00/12] ARM/arm64: dts:
rcar: Add SYSC PM domains" for now, as it's unchanged, except for an
ugly rebase due to dropping the commits to reference both DMA
controllers on R-Car Gen2.

For your convenience, I've pushed this, incl. all dependencies, to the
topic/rcar-sysc-pd-v6 branch of
git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git.
Integration with renesas-drivers-2016-04-12-v4.6-rc3 is available in the
topic/gen3-latest branch.

This has been tested on r8a7779/marzen, r8a7790/lager, r8a7791/koelsch,
r8a7794/alt, and r8a7795/salvator-x.

Thanks!

Geert Uytterhoeven (11):
soc: renesas: Move pm-rcar to drivers/soc/renesas/rcar-sysc
soc: renesas: rcar-sysc: Improve rcar_sysc_power() debug info
soc: renesas: rcar-sysc: Add DT support for SYSC PM domains
soc: renesas: rcar-sysc: Make rcar_sysc_power_is_off() static
soc: renesas: rcar-sysc: Enable Clock Domain for I/O devices
soc: renesas: rcar-sysc: Add support for R-Car H1 power areas
soc: renesas: rcar-sysc: Add support for R-Car H2 power areas
soc: renesas: rcar-sysc: Add support for R-Car M2-W power areas
soc: renesas: rcar-sysc: Add support for R-Car M2-N power areas
soc: renesas: rcar-sysc: Add support for R-Car E2 power areas
soc: renesas: rcar-sysc: Add support for R-Car H3 power areas

MAINTAINERS | 4 +
arch/arm/mach-shmobile/Kconfig | 11 +-
arch/arm/mach-shmobile/Makefile | 1 -
arch/arm/mach-shmobile/pm-r8a7779.c | 3 +-
arch/arm/mach-shmobile/pm-rcar-gen2.c | 2 +-
arch/arm/mach-shmobile/pm-rcar.c | 164 ---------
arch/arm/mach-shmobile/smp-r8a7779.c | 2 +-
arch/arm/mach-shmobile/smp-r8a7790.c | 2 +-
drivers/soc/Makefile | 3 +-
drivers/soc/renesas/Makefile | 7 +
drivers/soc/renesas/r8a7779-sysc.c | 34 ++
drivers/soc/renesas/r8a7790-sysc.c | 48 +++
drivers/soc/renesas/r8a7791-sysc.c | 33 ++
drivers/soc/renesas/r8a7794-sysc.c | 33 ++
drivers/soc/renesas/r8a7795-sysc.c | 56 +++
drivers/soc/renesas/rcar-sysc.c | 401 +++++++++++++++++++++
drivers/soc/renesas/rcar-sysc.h | 58 +++
.../linux/soc/renesas/rcar-sysc.h | 9 +-
18 files changed, 690 insertions(+), 181 deletions(-)
delete mode 100644 arch/arm/mach-shmobile/pm-rcar.c
create mode 100644 drivers/soc/renesas/Makefile
create mode 100644 drivers/soc/renesas/r8a7779-sysc.c
create mode 100644 drivers/soc/renesas/r8a7790-sysc.c
create mode 100644 drivers/soc/renesas/r8a7791-sysc.c
create mode 100644 drivers/soc/renesas/r8a7794-sysc.c
create mode 100644 drivers/soc/renesas/r8a7795-sysc.c
create mode 100644 drivers/soc/renesas/rcar-sysc.c
create mode 100644 drivers/soc/renesas/rcar-sysc.h
rename arch/arm/mach-shmobile/pm-rcar.h => include/linux/soc/renesas/rcar-sysc.h (60%)

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