On Tue, Jan 26, 2021 at 01:21:36PM +0200, Abel Vesa wrote: > Some clocks are already enabled in HW even before the kernel > starts to boot. So, in order to make sure that these clocks do not > get disabled when clk_disable_unused call is done or when > reparenting clocks, we enable them in core on clock registration. > Such a clock will have to be registered with CLK_IGNORE_UNUSED flag > and also needs to have the is_enabled ops implemented. > > Signed-off-by: Abel Vesa <abel.v...@nxp.com> > --- > drivers/clk/clk.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c > index 3d751ae5bc70..26d55851cfa5 100644 > --- a/drivers/clk/clk.c > +++ b/drivers/clk/clk.c > @@ -3416,6 +3416,7 @@ static int __clk_core_init(struct clk_core *core) > int ret; > struct clk_core *parent; > unsigned long rate; > + bool is_hw_enabled = false; > int phase; > > if (!core) > @@ -3558,12 +3559,20 @@ static int __clk_core_init(struct clk_core *core) > rate = 0; > core->rate = core->req_rate = rate; > > + /* > + * If the clock has the CLK_IGNORE_UNUSED flag set and it is already > + * enabled in HW, enable it in core too so it won't get accidentally > + * disabled when walking the orphan tree and reparenting clocks > + */ > + if (core->flags & CLK_IGNORE_UNUSED && core->ops->is_enabled) > + is_hw_enabled = clk_core_is_enabled(core); > + > /* > * Enable CLK_IS_CRITICAL clocks so newly added critical clocks > * don't get accidentally disabled when walking the orphan tree and > * reparenting clocks > */ > - if (core->flags & CLK_IS_CRITICAL) { > + if (core->flags & CLK_IS_CRITICAL || is_hw_enabled) { > unsigned long flags; > > ret = clk_core_prepare(core);
This means that a bootloader enabled clock with CLK_IGNORE_UNUSED flag can effectively never be disabled because the prepare/enable count is 1 without any user. This is the behaviour we want to have with critical clocks, but I don't think this is desired for clocks with the CLK_IGNORE_UNUSED flag. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |