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 <[email protected]>
Cc: Michael Turquette <[email protected]>
Cc: Stephen Boyd <[email protected]>
---
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

Reply via email to