]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
clk: rockchip: rk3399: make CPU clocks critical
authorBrian Norris <briannorris@chromium.org>
Wed, 8 Sep 2021 18:13:38 +0000 (11:13 -0700)
committerHeiko Stuebner <heiko@sntech.de>
Mon, 20 Sep 2021 13:12:23 +0000 (15:12 +0200)
The CPU clocks don't currently have any owner (e.g., cpufreq-dt doesn't
enable() them -- and even if it did, it's not early enough compared to
other consumers -- nor does arch/arm64/kernel/smp.c), and instead are
simply assumed to be "on" all the time.

They are also parents of a few other clocks which haven't been
previously exposed for other devices to consume. If we want to expose
those clocks, then the common clock framework may eventually choose to
disable their parents (including the CPU PLLs) -- which is no fun for
anyone.

Thus, mark the CPU clocks as critical, to prevent them from being
disabled implicitly.

Signed-off-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Link: https://lore.kernel.org/r/20210908111337.v2.1.I006bb36063555079b1a88f01d20e38d7e4705ae0@changeid
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
drivers/clk/rockchip/clk-rk3399.c

index 62a4f254396073e0d98e928e9a51c8fc3885aff6..0ac9c72c4ee87bb9063205af98defadeb2cd63e3 100644 (file)
@@ -1514,7 +1514,10 @@ static const char *const rk3399_cru_critical_clocks[] __initconst = {
        "aclk_vio_noc",
 
        /* ddrc */
-       "sclk_ddrc"
+       "sclk_ddrc",
+
+       "armclkl",
+       "armclkb",
 };
 
 static const char *const rk3399_pmucru_critical_clocks[] __initconst = {
@@ -1549,9 +1552,6 @@ static void __init rk3399_clk_init(struct device_node *np)
        rockchip_clk_register_branches(ctx, rk3399_clk_branches,
                                  ARRAY_SIZE(rk3399_clk_branches));
 
-       rockchip_clk_protect_critical(rk3399_cru_critical_clocks,
-                                     ARRAY_SIZE(rk3399_cru_critical_clocks));
-
        rockchip_clk_register_armclk(ctx, ARMCLKL, "armclkl",
                        mux_armclkl_p, ARRAY_SIZE(mux_armclkl_p),
                        &rk3399_cpuclkl_data, rk3399_cpuclkl_rates,
@@ -1562,6 +1562,9 @@ static void __init rk3399_clk_init(struct device_node *np)
                        &rk3399_cpuclkb_data, rk3399_cpuclkb_rates,
                        ARRAY_SIZE(rk3399_cpuclkb_rates));
 
+       rockchip_clk_protect_critical(rk3399_cru_critical_clocks,
+                                     ARRAY_SIZE(rk3399_cru_critical_clocks));
+
        rockchip_register_softrst(np, 21, reg_base + RK3399_SOFTRST_CON(0),
                                  ROCKCHIP_SOFTRST_HIWORD_MASK);