On R-Car H3, some power areas (e.g. A3VP) contain I/O devices, which are also part of the CPG/MSSR Clock Domain. Hook up the CPG/MSSR Clock Domain attach/detach callbacks to enable power management using module clocks. This also allows to support the Clock Domain for devices in the "always-on" power area. Signed-off-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx> Cc: Michael Turquette <mturquette@xxxxxxxxxxxx> Cc: Stephen Boyd <sboyd@xxxxxxxxxxxxxx> --- v3: - Hook up the CPG/MSSR Clock Domain attach/detach callbacks instead of using our own copies, v2: - New. --- drivers/soc/renesas/rcar-sysc.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/soc/renesas/rcar-sysc.c b/drivers/soc/renesas/rcar-sysc.c index 28af0b704fc008d2..2d6fbeb481883be7 100644 --- a/drivers/soc/renesas/rcar-sysc.c +++ b/drivers/soc/renesas/rcar-sysc.c @@ -9,6 +9,7 @@ * for more details. */ +#include <linux/clk/renesas.h> #include <linux/delay.h> #include <linux/err.h> #include <linux/mm.h> @@ -251,6 +252,15 @@ static void __init rcar_sysc_pd_setup(struct device_node *np, gov = &pm_domain_always_on_gov; } +#ifdef CONFIG_ARCH_R8A7795 + if (!(pd->flags & (PD_CPU | PD_SCU))) { + /* Enable Clock Domain for I/O devices */ + genpd->flags = GENPD_FLAG_PM_CLK; + genpd->attach_dev = cpg_mssr_attach_dev; + genpd->detach_dev = cpg_mssr_detach_dev; + } +#endif + pm_genpd_init(genpd, gov, false); genpd->dev_ops.active_wakeup = rcar_sysc_active_wakeup; genpd->power_off = rcar_sysc_pd_power_off; -- 1.9.1