Re: [PATCH] clk: add new Kconfig to control default behavior of disabling unused clocks
From: Hans de Goede
Date: Tue Mar 17 2026 - 07:57:31 EST
Hi Maxime,
On 17-Mar-26 08:30, Maxime Ripard wrote:
> Hi,
>
> On Mon, Mar 16, 2026 at 06:33:45PM -0400, Brian Masney wrote:
>> At the 2023 Linux Plumbers Conference in Richmond VA, there was a
>> discussion about how large number of systems need to boot with
>> clk_ignore_unused. Per the discussions at the conference, the existing
>> behavior in the clk core is broken, and there is a desire to completely
>> remove this functionality.
>
> Broken how?
>
> clk_ignore_unused is to a point where it's seriously cargo-culted and
> documented as a silver bullet, when in reality it's just a debug tool
> for broken drivers, and the driver must be fixed.
>
> But nobody is actually fixing it.
>
> See
> https://fedoraproject.org/wiki/Changes/Automatic_DTB_selection_for_aarch64_EFI_systems#How_To_Test
> for example. The affected clock could be marked as CLK_IS_CRITICAL, and
> fedora wouldn't have to package anything, change anything, etc. But no,
> the problem is clk_ignore_unused.
Both things can be true at the same time. Yes there are ways to work
around issues causes by clk_ignore_unused and those ways should be
used more often. And in example of the X1E laptops I do indeed want
to try and figure out which clocks must not be turned off and
try to see if it will be accepted to mark these as CLK_IS_CRITICAL.
But at the same time the fundamental concept of turning off all unused
clocks as soon as all *builtin* drivers are done probing is a broken
concept when working with generic distro kernels where many drivers
are modules. To me it looks like this was very much made with
embedded systems with device specific kernels where all drivers for
the used SoC are builtin.
The problem basically is, that if we want something like disabling
unused clocks at all (1), it should happen when all drivers including
those build as module have had a chance to run. ATM the clocks
simply get turned off too soon.
Also see Stephen Boyd's LPC talk about this:
"Make sync_state()/handoff work for the common clk framework"
https://lpc.events/event/17/contributions/1432/
When the clk framework maintainer themselves are arguing for
replacing the way unused clks are disabled atm with something
better then to me that is a clear sign that there is something
wrong with the current mechanism.
Arguably it would be better to tie this into the deferred_probe_timeout
mechanism with some way for subsystems to register callbacks for
when the deferred_probe_timeout triggers. This way there will at
least be some attempt by the kernel to delay it until all probing
is done.
Even though we do really have a problem here I'm not convinced
that this patch, which allows disabling the entire mechanism
by default, is a good idea though. There will likely be issues
with systems consuming more power then they should, especially
when suspended when unused clocks are not disabled. So allowing
to change the default behavior will just swap one set of problems
for another.
Regards,
Hans
1) One can also argue that the need to do this at all is broken in
itself. If all clks have a consumer driver they will get turned off
anyways; and if they lack a consumer driver then maybe they should
have never turned on by the bootloader in the first place. I would
expect any hw critical enough for the bootloader to also have an
actual Linux driver.
>
> Maxime