clk: renesas: cpg-mssr: Mark clocks as critical only if on at boot
authorUlrich Hecht <uli+renesas@fpond.eu>
Tue, 16 Jun 2020 16:26:24 +0000 (18:26 +0200)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Mon, 22 Jun 2020 14:53:40 +0000 (16:53 +0200)
This allows us to add the RWDT clock to the list of critical clocks without
keeping it enabled needlessly if not used.

Changing the semantics of crit_mod_clks in this way is safe for the current
user (INTC-AP) because it is never off at boot time.

Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
Link: https://lore.kernel.org/r/20200616162626.27944-2-uli+renesas@fpond.eu
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
drivers/clk/renesas/renesas-cpg-mssr.c

index dcb6e27..4648a82 100644 (file)
@@ -416,14 +416,6 @@ static void __init cpg_mssr_register_mod_clk(const struct mssr_mod_clk *mod,
        init.name = mod->name;
        init.ops = &cpg_mstp_clock_ops;
        init.flags = CLK_SET_RATE_PARENT;
-       for (i = 0; i < info->num_crit_mod_clks; i++)
-               if (id == info->crit_mod_clks[i]) {
-                       dev_dbg(dev, "MSTP %s setting CLK_IS_CRITICAL\n",
-                               mod->name);
-                       init.flags |= CLK_IS_CRITICAL;
-                       break;
-               }
-
        parent_name = __clk_get_name(parent);
        init.parent_names = &parent_name;
        init.num_parents = 1;
@@ -432,6 +424,15 @@ static void __init cpg_mssr_register_mod_clk(const struct mssr_mod_clk *mod,
        clock->priv = priv;
        clock->hw.init = &init;
 
+       for (i = 0; i < info->num_crit_mod_clks; i++)
+               if (id == info->crit_mod_clks[i] &&
+                   cpg_mstp_clock_is_enabled(&clock->hw)) {
+                       dev_dbg(dev, "MSTP %s setting CLK_IS_CRITICAL\n",
+                               mod->name);
+                       init.flags |= CLK_IS_CRITICAL;
+                       break;
+               }
+
        clk = clk_register(NULL, &clock->hw);
        if (IS_ERR(clk))
                goto fail;