linux/drivers/clk
Stephen Boyd 448b50b5cf
Revert "clk: Respect CLK_OPS_PARENT_ENABLE during recalc"
This reverts commit 669917676e.
It's been shown to cause problems on i.MX and STM32 platforms
where the board doesn't boot. In one case, a clk with
CLK_IS_CRITICAL and CLK_OPS_PARENT_ENABLE is being registered
causing the parent to be enabled, the rate recalculated, and then
the parent is disabled causing the critical clk being registered
to stop clocking.

A fix for that would be to calculate the rate of the clk after
enabling the critical clk itself, but that wouldn't fix another
problem where a clk with CLK_OPS_PARENT_ENABLE is registered
before the parent is registered. In this case the hardware access
in the clk_ops::recalc_rate() function would fail if the parent
is disabled.

There are even more problems exposed by this patch because it
introduces logic that disables clks earlier in system boot than
has existed previously. Historically we've not disabled clks
until late init (clk_disable_unused) under the assumption that
clks have been registered enough to have a consistent view of the
clk tree. The clk_disable_unused logic doesn't work very well
though, leading to quite a few devices booting with
clk_ignore_unused on the kernel command line.

Long story short, disabling clks during clk registration is full
of pitfalls. Revert this commit until a proper solution can be
found.

Reported-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Closes: https://lore.kernel.org/r/6239343.lOV4Wx5bFT@steina-w
Reported-by: Mark Brown <broonie@kernel.org>
Closes: https://lore.kernel.org/r/036da7ce-6487-4a6e-9b15-97c6d3bcdcec@sirena.org.uk
Cc: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Cc: Brian Masney <bmasney@redhat.com>
Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Cc: Chen-Yu Tsai <wenst@chromium.org>
Tested-by: Peng Fan <peng.fan@nxp.com>
Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Brian Masney <bmasney@redhat.com>
Tested-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
2026-02-03 21:28:18 -08:00
..
actions clk: actions: Fix discarding const qualifier by 'container_of' macro 2025-11-20 19:23:43 -08:00
analogbits clk: analogbits: Fix incorrect calculation of vco rate delta 2025-01-16 13:43:49 -08:00
at91 bitmap updates for v6.19 2025-12-06 09:01:27 -08:00
axis
axs10x clk: axs10x: pll_clock: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
baikal-t1 clk: baikal-t1: ccu-pll: convert from round_rate() to determine_rate() 2025-09-08 09:41:26 -04:00
bcm Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
berlin clk: Fix typos 2025-07-26 23:49:18 -07:00
davinci clk: davinci: psc: drop unused reset lookup 2025-11-18 17:52:54 +01:00
hisilicon clk: hisilicon: hi6220-stub: convert from round_rate() to determine_rate() 2025-09-08 09:41:27 -04:00
imgtec clk: imgtec: use %pe for better readability of errors while printing 2025-03-04 12:15:25 -08:00
imx This pull request is entirely SoC clk drivers, not for lack of trying to modify 2025-12-08 09:38:52 +09:00
ingenic syscore: Pass context data to callbacks 2025-11-14 10:01:52 +01:00
keystone clk: keystone: syscon-clk: fix regmap leak on probe failure 2025-11-30 12:05:45 -08:00
mediatek clk: mediatek: Fix error handling in runtime PM setup 2026-01-22 17:46:53 -08:00
meson clk: amlogic: fix recent code refactoring 2025-09-19 21:58:50 -07:00
microchip reset: mpfs: add non-auxiliary bus probing 2025-11-11 16:47:24 +00:00
mmp Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
mstar clk: mstar: msc313-cpupll: convert from round_rate() to determine_rate() 2025-09-08 09:41:30 -04:00
mvebu soc: driver updates for 6.19 2025-12-05 17:29:04 -08:00
mxs clk: mxs: ref: convert from round_rate() to determine_rate() 2025-09-08 09:41:27 -04:00
nuvoton clk: nuvoton: ma35d1-pll: convert from round_rate() to determine_rate() 2025-09-08 09:41:27 -04:00
nxp Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
pistachio clk: pistachio: pll: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
pxa
qcom clk: qcom: Mark camcc_sm7150_hws static 2025-11-30 12:04:10 -08:00
ralink clk: ralink: mtmips: remove duplicated 'xtal' clock for Ralink SoC RT3883 2025-01-13 13:35:38 -08:00
renesas This pull request is entirely SoC clk drivers, not for lack of trying to modify 2025-12-08 09:38:52 +09:00
rockchip This pull request is entirely SoC clk drivers, not for lack of trying to modify 2025-12-08 09:38:52 +09:00
samsung This pull request is entirely SoC clk drivers, not for lack of trying to modify 2025-12-08 09:38:52 +09:00
sifive clk: sifive: sifive-prci: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
socfpga clk: socfpga: agilex5: add clock driver for Agilex5 2025-10-22 22:52:58 -05:00
sophgo clk: sophgo: cv18xx-ip: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
spacemit clk: spacemit: Set clk_hw_onecell_data::num before using flex array 2025-11-20 19:02:16 -08:00
spear clk: spear: vco-pll: convert from round_rate() to determine_rate() 2025-09-08 09:41:31 -04:00
sprd clk: sprd: sc9860: Simplify with of_device_get_match_data() 2025-11-10 17:02:12 -08:00
st Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
starfive clk: Fix typos 2025-07-26 23:49:18 -07:00
stm32 Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
sunxi clk: sunxi: Do not enable by default during compile testing 2025-04-27 13:49:18 +08:00
sunxi-ng clk: sunxi-ng: sun55i-a523-ccu: Lower audio0 pll minimum rate 2025-10-23 02:06:47 +08:00
tegra syscore: Pass context data to callbacks 2025-11-14 10:01:52 +01:00
thead Merge branches 'clk-bindings', 'clk-cleanup', 'clk-renesas', 'clk-thead' and 'clk-spacemit' into clk-next 2025-10-06 12:56:23 -05:00
ti Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
uniphier
ux500 clk: ux500: prcmu: convert from round_rate() to determine_rate() 2025-09-08 09:41:31 -04:00
versatile clk: versatile: vexpress-osc: convert from round_rate() to determine_rate() 2025-09-08 09:41:31 -04:00
visconti clk: visconti: Add VIIF clocks 2025-11-20 18:53:32 -08:00
x86 clk: x86: cgu: convert from round_rate() to determine_rate() 2025-09-08 09:41:25 -04:00
xilinx Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
zynq clk: zynq: pll: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
zynqmp clk: zynqmp: pll: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
.kunitconfig clk: Allow kunit tests to run without OF_OVERLAY enabled 2024-10-22 14:09:20 -07:00
clk-apple-nco.c clk: apple-nco: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
clk-asm9260.c clk: Fix typos 2025-07-26 23:49:18 -07:00
clk-aspeed.c
clk-aspeed.h
clk-ast2600.c clk: Fix typos 2025-07-26 23:49:18 -07:00
clk-axi-clkgen.c clk: clk-axi-clkgen: remove unneeded semicolon 2025-08-14 13:27:00 -07:00
clk-axm5516.c clk: remove unneeded 'fast_io' parameter in regmap_config 2025-08-14 12:50:35 -07:00
clk-bd718x7.c
clk-bm1880.c clk: bm1880: convert from round_rate() to determine_rate() 2025-09-08 09:41:30 -04:00
clk-bulk.c
clk-cdce706.c clk: cdce706: convert from round_rate() to determine_rate() 2025-09-08 09:41:30 -04:00
clk-cdce925.c clk: cdce925: convert from round_rate() to determine_rate() 2025-09-08 09:41:26 -04:00
clk-clps711x.c clk: Fix typos 2025-07-26 23:49:18 -07:00
clk-composite.c
clk-conf.c clk: clk-conf: support assigned-clock-rates-u64 2024-08-16 15:21:19 -07:00
clk-cs2000-cp.c clk: cs2000-cp: convert from round_rate() to determine_rate() 2025-09-08 09:41:26 -04:00
clk-devres.c clk: Provide devm_clk_bulk_get_all_enabled() helper 2024-10-22 13:55:22 -07:00
clk-divider.c clk: divider: remove round_rate() in favor of determine_rate() 2025-09-08 09:41:31 -04:00
clk-en7523.c clk: en7523: Add reset-controller support for EN7523 SoC 2025-11-13 20:05:13 -08:00
clk-ep93xx.c Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
clk-eyeq.c clk: Fix typos 2025-07-26 23:49:18 -07:00
clk-fixed-factor.c clk: fixed-factor: drop round_rate() clk ops 2025-09-08 09:41:31 -04:00
clk-fixed-mmio.c clk: Switch back to struct platform_driver::remove() 2024-09-21 14:12:05 -07:00
clk-fixed-rate.c clk: Switch back to struct platform_driver::remove() 2024-09-21 14:12:05 -07:00
clk-fixed-rate_test.c clk: Add KUnit tests for clk fixed rate basic type 2024-07-29 15:33:13 -07:00
clk-fixed-rate_test.h clk: Add KUnit tests for clk fixed rate basic type 2024-07-29 15:33:13 -07:00
clk-fractional-divider.c clk: fractional-divider: convert from round_rate() to determine_rate() 2025-09-08 09:41:26 -04:00
clk-fractional-divider.h
clk-fractional-divider_test.c clk: test: add missing MODULE_DESCRIPTION() macros 2024-06-03 15:46:46 -07:00
clk-fsl-flexspi.c
clk-fsl-sai.c
clk-gate.c clk: Fix typos 2025-07-26 23:49:18 -07:00
clk-gate_test.c clk: test: add missing MODULE_DESCRIPTION() macros 2024-06-03 15:46:46 -07:00
clk-gemini.c clk: gemini: convert from round_rate() to determine_rate() 2025-09-08 09:41:26 -04:00
clk-gpio.c clk: clk-gpio: add driver for gated-fixed-clocks 2024-10-16 11:20:42 -07:00
clk-hi655x.c
clk-highbank.c clk: highbank: convert from round_rate() to determine_rate() 2025-09-08 09:41:26 -04:00
clk-hsdk-pll.c clk: hsdk-pll: convert from round_rate() to determine_rate() 2025-09-08 09:41:30 -04:00
clk-k210.c
clk-lan966x.c clk: lan966x: remove unused dt-bindings include 2025-11-08 12:01:01 +02:00
clk-lmk04832.c clk: lmk04832: convert from round_rate() to determine_rate() 2025-09-08 09:41:27 -04:00
clk-lochnagar.c
clk-loongson1.c clk: loongson1: convert from round_rate() to determine_rate() 2025-09-08 09:41:27 -04:00
clk-loongson2.c clk: loongson2: Add clock definitions for Loongson-2K0300 SoC 2025-09-21 12:48:51 -07:00
clk-max9485.c clk: max9485: convert from round_rate() to determine_rate() 2025-09-08 09:41:27 -04:00
clk-max77686.c
clk-milbeaut.c clk: milbeaut: convert from round_rate() to determine_rate() 2025-09-08 09:41:27 -04:00
clk-moxart.c
clk-multiplier.c clk: multiplier: convert from round_rate() to determine_rate() 2025-09-08 09:41:27 -04:00
clk-mux.c
clk-nomadik.c clk: Use str_enable_disable-like helpers 2025-01-15 12:27:04 -08:00
clk-npcm7xx.c
clk-npcm8xx.c clk: npcm8xx: add clock controller 2024-10-17 15:17:51 -07:00
clk-nspire.c
clk-palmas.c clk: Switch back to struct platform_driver::remove() 2024-09-21 14:12:05 -07:00
clk-plldig.c
clk-pwm.c clk: pwm: Make use of non-sleeping PWMs 2025-06-19 18:09:58 -07:00
clk-qoriq.c clk: clk-qoriq: Replace of_node_put() with __free() 2024-10-09 16:01:00 -07:00
clk-renesas-pcie.c clk: rs9: fix wrong default value for clock amplitude 2024-04-19 19:09:41 -07:00
clk-rk808.c
clk-rp1.c clk: rp1: convert from round_rate() to determine_rate() 2025-09-03 14:58:19 -07:00
clk-rpmi.c clk: Add clock driver for the RISC-V RPMI clock service group 2025-09-25 13:16:48 -06:00
clk-s2mps11.c clk: s2mps11: add support for S2MPG10 PMIC clock 2025-09-21 10:43:18 -07:00
clk-scmi.c Merge branch 'clk-determine-rate' into clk-next 2025-10-06 13:02:50 -05:00
clk-scpi.c clk: scpi: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
clk-si514.c clk: si514: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
clk-si521xx.c clk: si521xx: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
clk-si544.c clk: si544: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
clk-si570.c clk: si570: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
clk-si5341.c clk: si5341: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
clk-si5351.c clk: Fix typos 2025-07-26 23:49:18 -07:00
clk-si5351.h
clk-sp7021.c There's a bunch of patches here across drivers/clk/ to migrate drivers to use 2025-10-07 09:28:37 -07:00
clk-sparx5.c clk: sparx5: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
clk-stm32f4.c clk: stm32f4: convert from round_rate() to determine_rate() 2025-09-08 09:41:28 -04:00
clk-stm32h7.c
clk-tps68470.c clk: tps68470: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
clk-twl.c clk: twl: add TWL6030 support 2024-10-17 12:02:42 -07:00
clk-twl6040.c
clk-versaclock3.c clk: versaclock3: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
clk-versaclock5.c clk: versaclock5: convert from round_rate() to determine_rate() 2025-09-08 09:41:31 -04:00
clk-versaclock7.c clk: versaclock7: convert from round_rate() to determine_rate() 2025-09-08 09:41:31 -04:00
clk-vt8500.c clk: vt8500: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
clk-wm831x.c clk: wm831x: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
clk-xgene.c clk: xgene: convert from round_rate() to determine_rate() 2025-09-08 09:41:29 -04:00
clk.c Revert "clk: Respect CLK_OPS_PARENT_ENABLE during recalc" 2026-02-03 21:28:18 -08:00
clk.h
clk_kunit_helpers.c clk: test: Add test managed of_clk_add_hw_provider() 2024-10-09 16:25:32 -07:00
clk_parent_data_test.h clk: Add KUnit tests for clks registered with struct clk_parent_data 2024-07-29 15:33:13 -07:00
clk_test.c Merge branches 'clk-bindings', 'clk-cleanup', 'clk-pwm', 'clk-hw-device', 'clk-xilinx' and 'clk-adi' into clk-next 2025-07-29 15:18:13 -07:00
clkdev.c ARM: 9445/1: clkdev: Mark some functions with __printf() attribute 2025-03-26 13:31:49 +00:00
Kconfig There's a bunch of patches here across drivers/clk/ to migrate drivers to use 2025-10-07 09:28:37 -07:00
kunit_clk_assigned_rates.h clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_multiple.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_multiple_consumer.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_null.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_null_consumer.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_one.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_one_consumer.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_u64_multiple.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_u64_multiple_consumer.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_u64_one.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_u64_one_consumer.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_without.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_without_consumer.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_zero.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_assigned_rates_zero_consumer.dtso clk: test: Add KUnit tests for clock-assigned-rates{-u64} DT properties 2024-10-09 16:25:32 -07:00
kunit_clk_fixed_rate_test.dtso clk: Add KUnit tests for clk fixed rate basic type 2024-07-29 15:33:13 -07:00
kunit_clk_hw_get_dev_of_node.dtso clk: tests: add clk_hw_get_dev() and clk_hw_get_of_node() tests 2025-06-20 00:15:39 -07:00
kunit_clk_parent_data_test.dtso clk: Add KUnit tests for clks registered with struct clk_parent_data 2024-07-29 15:33:13 -07:00
Makefile clk: keystone: fix compile testing 2025-11-30 12:06:21 -08:00