Maxime Ripard
d85841e4b2
clk: Initialize orphan req_rate
...
[ Upstream commit 5f7e2af00807f2117650e711a58b7f0e986ce1df ]
When registering a clock that doesn't have a recalc_rate implementation,
and doesn't have its parent registered yet, we initialize the clk_core
rate and 'req_rate' fields to 0.
The rate field is later updated when the parent is registered in
clk_core_reparent_orphans_nolock() using __clk_recalc_rates(), but the
'req_rate' field is never updated.
This leads to an issue in clk_set_rate_range() and clk_put(), since
those functions will call clk_set_rate() with the content of 'req_rate'
to provide drivers with the opportunity to change the rate based on the
new boundaries. In this case, we would call clk_set_rate() with a rate
of 0, effectively enforcing the minimum allowed for this clock whenever
we would call one of those two functions, even though the actual rate
might be within range.
Let's fix this by setting 'req_rate' in
clk_core_reparent_orphans_nolock() with the rate field content just
updated by the call to __clk_recalc_rates().
Fixes: 1c8e600440 ("clk: Add rate constraints to clocks")
Reported-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> # T30 Nexus7
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20220325161144.1901695-2-maxime@cerno.tech
[sboyd@kernel.org: Reword comment]
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-04-15 14:18:21 +02:00
..
actions
clk: actions: Terminate clk_div_table with sentinel element
2022-04-15 14:18:19 +02:00
analogbits
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
at91
clk: at91: check pmc node status before registering syscore ops
2021-11-17 09:48:42 +01:00
axis
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
axs10x
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
bcm
clk: bcm-2835: Remove rounding up the dividers
2022-01-27 09:19:29 +01:00
berlin
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
davinci
clk: davinci: Use the correct size when allocating memory
2020-09-23 12:40:38 +02:00
h8300
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
hisilicon
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
imgtec
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
imx
clk: imx7d: Remove audio_mclk_root_clk
2022-04-15 14:18:18 +02:00
ingenic
clk: jz4725b: fix mmc0 clock gating
2022-03-02 11:41:00 +01:00
keystone
clk: keystone: sci-clk: fix parsing assigned-clock data during probe
2020-10-29 09:57:54 +01:00
loongson1
clk: loongson1: Terminate clk_div_table with sentinel element
2022-04-15 14:18:19 +02:00
mediatek
clk: mediatek: add UART0 clock support
2020-10-29 09:57:54 +01:00
meson
clk: meson: gxbb: Fix the SDM_EN bit for MPLL0 on GXBB
2022-01-27 09:19:47 +01:00
microchip
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 445
2019-06-05 17:37:18 +02:00
mmp
clk: mmp2: Fix the order of timer mux parents
2020-02-05 21:22:43 +00:00
mvebu
clk: mvebu: ap-cpu-clk: Fix a memory leak in error handling paths
2021-11-17 09:48:41 +01:00
mxs
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 159
2019-05-30 11:26:37 -07:00
nxp
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 159
2019-05-30 11:26:37 -07:00
pistachio
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422
2019-06-05 17:37:15 +02:00
pxa
clk: pxa: fix one of the pxa RTC clocks
2020-01-04 19:18:11 +01:00
qcom
clk: qcom: gcc-msm8994: Fix gpll4 width
2022-04-15 14:18:21 +02:00
renesas
clk: renesas: r8a77995: Add ZA2 clock
2021-07-19 08:53:09 +02:00
rockchip
clk: rockchip: Initialize hw to error to avoid undefined behavior
2020-10-29 09:57:54 +01:00
samsung
clk: exynos7: Mark aclk_fsys1_200 as critical
2021-05-19 10:08:33 +02:00
sifive
clk: sifive: allocate sufficient memory for struct __prci_data
2020-06-30 15:37:01 -04:00
sirf
clk: clk-atlas6: fix return value check in atlas6_clk_init()
2020-08-21 13:05:34 +02:00
socfpga
clk: socfpga: arria10: Fix memory leak of socfpga_clk on error return
2021-05-11 14:04:10 +02:00
spear
clk: spear: Make structure i2s_sclk_masks constant
2019-09-06 10:27:40 -07:00
sprd
clk: sprd: return correct type of value for _sprd_pll_recalc_rate
2020-06-24 17:50:35 +02:00
st
clk: clk-flexgen: fix clock-critical handling
2020-06-24 17:50:17 +02:00
sunxi
clk: sunxi: Fix incorrect usage of round_down()
2020-06-24 17:50:08 +02:00
sunxi-ng
clk: sunxi-ng: h6: Fix clock divider range on some clocks
2021-03-04 10:26:29 +01:00
tegra
clk: tegra: tegra124-emc: Fix missing put_device() call in emc_ensure_emc_driver
2022-04-15 14:18:19 +02:00
ti
clocksource/drivers/timer-ti-dm: Handle dra7 timer wrap errata i940
2021-06-23 14:41:31 +02:00
uniphier
clk: uniphier: Fix fixed-rate initialization
2022-04-15 14:17:58 +02:00
ux500
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194
2019-05-30 11:29:22 -07:00
versatile
clk: versatile: Add of_node_put() in cm_osc_setup()
2019-08-07 15:25:25 -07:00
x86
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
zte
clk: zx296718: Don't reference clk_init_data after registration
2019-08-16 10:20:15 -07:00
zynq
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 401
2019-06-05 17:37:13 +02:00
zynqmp
clk: zynqmp: move zynqmp_pll_set_mode out of round_rate callback
2021-05-14 09:44:24 +02:00
clk-asm9260.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201
2019-05-30 11:29:52 -07:00
clk-aspeed.c
clk: aspeed: Move structures to header
2019-09-06 15:17:02 -07:00
clk-aspeed.h
clk: aspeed: Move structures to header
2019-09-06 15:17:02 -07:00
clk-ast2600.c
clk/ast2600: Fix soc revision for AHB
2021-11-26 10:47:17 +01:00
clk-axi-clkgen.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 177
2019-05-30 11:29:19 -07:00
clk-axm5516.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
clk-bd718x7.c
clk: bd718x7: Support ROHM BD70528 clk block
2019-06-27 10:57:24 +01:00
clk-bulk.c
clk: Make clk_bulk_get_all() return a valid "id"
2019-09-17 13:26:31 -07:00
clk-cdce706.c
This round of clk driver and framework updates is heavy on the driver update
2019-07-17 10:07:48 -07:00
clk-cdce925.c
clk: clk-cdce925: Add regulator support
2019-09-06 10:31:16 -07:00
clk-clps711x.c
clk: clps711x: Terminate clk_div_table with sentinel element
2022-04-15 14:18:19 +02:00
clk-composite.c
clk: composite: Drop unused clk.h include
2019-08-16 10:37:01 -07:00
clk-conf.c
clk-cs2000-cp.c
clk-devres.c
clk: fix leak on devm_clk_bulk_get_all() unwind
2021-08-12 13:21:00 +02:00
clk-divider.c
Merge branch 'clk-ti' into clk-next
2019-05-07 11:46:02 -07:00
clk-efm32gg.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
clk-fixed-factor.c
Merge branch 'clk-parent-rewrite-1' into clk-next
2019-05-07 11:46:13 -07:00
clk-fixed-mmio.c
clk: Remove io.h from clk-provider.h
2019-05-15 13:21:37 -07:00
clk-fixed-rate.c
clk: Remove CLK_IS_BASIC clk flag
2019-04-26 10:40:49 -07:00
clk-fractional-divider.c
clk: Remove io.h from clk-provider.h
2019-05-15 13:21:37 -07:00
clk-gate.c
Merge branch 'clk-ti' into clk-next
2019-05-07 11:46:02 -07:00
clk-gemini.c
clk-gpio.c
clk: clk-gpio: propagate rate change to parent
2020-01-04 19:17:21 +01:00
clk-hi655x.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288
2019-06-05 17:36:37 +02:00
clk-highbank.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201
2019-05-30 11:29:52 -07:00
clk-hsdk-pll.c
clk: Remove io.h from clk-provider.h
2019-05-15 13:21:37 -07:00
clk-lochnagar.c
clk: lochnagar: Don't reference clk_init_data after registration
2019-08-16 10:20:07 -07:00
clk-max9485.c
clk-max77686.c
clk-milbeaut.c
clk: milbeaut: Don't reference clk_init_data after registration
2019-08-16 10:20:15 -07:00
clk-moxart.c
clk-multiplier.c
clk: Remove io.h from clk-provider.h
2019-05-15 13:21:37 -07:00
clk-mux.c
Merge branch 'clk-ti' into clk-next
2019-05-07 11:46:02 -07:00
clk-nomadik.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194
2019-05-30 11:29:22 -07:00
clk-npcm7xx.c
clk-nspire.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
clk-oxnas.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201
2019-05-30 11:29:52 -07:00
clk-palmas.c
clk-pwm.c
This round of clk driver and framework updates is heavy on the driver update
2019-07-17 10:07:48 -07:00
clk-qoriq.c
clk: qoriq: Fix -Wunused-const-variable
2019-08-07 14:17:49 -07:00
clk-rk808.c
- Core Frameworks
2019-07-15 20:18:40 -07:00
clk-s2mps11.c
clk: s2mps11: Fix a resource leak in error handling paths in the probe function
2020-12-30 11:51:29 +01:00
clk-scmi.c
clk: scmi: Fix min and max rate when registering clocks with discrete rates
2020-08-19 08:15:55 +02:00
clk-scpi.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201
2019-05-30 11:29:52 -07:00
clk-si514.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157
2019-05-30 11:26:37 -07:00
clk-si544.c
clk: clk-si544: Implement small frequency change support
2019-06-27 13:45:38 -07:00
clk-si570.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157
2019-05-30 11:26:37 -07:00
clk-si5341.c
clk: si5341: Fix clock HW provider cleanup
2022-01-27 09:19:53 +01:00
clk-si5351.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
clk-si5351.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
clk-stm32f4.c
clk: stm32: Fix ltdc's clock turn off by clk_disable_unused() after system enter shell
2022-01-27 09:19:39 +01:00
clk-stm32h7.c
clk-stm32mp1.c
clk: stm32mp1: Add ddrperfm clock
2019-04-29 11:13:23 -07:00
clk-tango4.c
clk-twl6040.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 336
2019-06-05 17:37:07 +02:00
clk-u300.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194
2019-05-30 11:29:22 -07:00
clk-versaclock5.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157
2019-05-30 11:26:37 -07:00
clk-vt8500.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282
2019-06-05 17:36:37 +02:00
clk-wm831x.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
clk-xgene.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
2019-05-30 11:26:35 -07:00
clk.c
clk: Initialize orphan req_rate
2022-04-15 14:18:21 +02:00
clk.h
clk: consoldiate the __clk_get_hw() declarations
2019-07-12 11:00:14 -07:00
clkdev.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
Kconfig
clk: remove extra ---help--- tags in Kconfig
2019-09-17 10:27:57 -07:00
Makefile
clk: Add support for AST2600 SoC
2019-09-06 15:22:29 -07:00