linux-stable/drivers/clk
Maxime Ripard 6c17fd7a6f clk: Initialize orphan req_rate
[ Upstream commit 5f7e2af008 ]

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-08 14:23:52 +02:00
..
actions clk: actions: Terminate clk_div_table with sentinel element 2022-04-08 14:23:48 +02:00
analogbits Merge branch 'akpm' (patches from Andrew) 2021-07-02 12:08:10 -07:00
at91 clk: at91: sama7g5: fix parents of PDMCs' GCLK 2022-04-08 14:23:47 +02:00
axis
axs10x
baikal-t1 clk: baikal-t1: Mark Ethernet PLL as critical 2020-10-13 19:48:34 -07:00
bcm clk: bcm-2835: Remove rounding up the dividers 2022-01-27 11:03:03 +01:00
berlin
davinci This pull request contains zero diff to the core framework. It is a collection 2020-10-22 12:53:28 -07:00
h8300
hisilicon clk: hisilicon: Terminate clk_div_table with sentinel element 2022-04-08 14:23:48 +02:00
imgtec
imx clk: imx: off by one in imx_lpcg_parse_clks_from_dt() 2022-04-08 14:23:47 +02:00
ingenic clk: jz4725b: fix mmc0 clock gating 2022-03-02 11:47:48 +01:00
keystone clk: keystone: syscon-clk: Add support for AM64 specific epwm-tbclk 2021-06-22 14:18:26 -07:00
loongson1 clk: loongson1: Terminate clk_div_table with sentinel element 2022-04-08 14:23:48 +02:00
mediatek clk: mediatek: make COMMON_CLK_MT8167* depend on COMMON_CLK_MT8167 2021-07-27 11:46:27 -07:00
meson clk: meson: gxbb: Fix the SDM_EN bit for MPLL0 on GXBB 2022-01-27 11:04:58 +01:00
microchip
mmp clk: mmp2: fix build without CONFIG_PM 2021-01-12 12:10:55 -08:00
mstar clk: mstar: msc313-mpll: Fix format specifier 2021-02-16 12:52:28 -08:00
mvebu clk: mvebu: ap-cpu-clk: Fix a memory leak in error handling paths 2021-11-18 19:16:46 +01:00
mxs
nxp
pistachio clk: pistachio: Make it selectable for generic MIPS kernel 2021-08-12 16:01:49 +02:00
pxa clk: pxa: Constify static struct clk_ops 2020-10-13 19:49:11 -07:00
qcom clk: qcom: gcc-msm8994: Fix gpll4 width 2022-04-08 14:23:51 +02:00
ralink clk: ralink: avoid to set 'CLK_IS_CRITICAL' flag for gates 2021-08-28 22:24:06 -07:00
renesas clk: renesas: rzg2l: propagate return value of_genpd_add_provider_simple() 2022-01-27 11:04:06 +01:00
rockchip clk: rockchip: re-add rational best approximation algorithm to the fractional divider 2022-04-08 14:22:50 +02:00
samsung clk: samsung: Remove redundant dev_err calls 2021-04-08 19:35:26 +02:00
sifive clk: sifive: Fix kernel-doc 2021-06-01 23:39:15 -07:00
socfpga clk: socfpga: agilex: fix duplicate s2f_user0_clk 2021-09-24 16:03:08 -07:00
spear clk: spear: Move prototype to accessible header 2021-02-11 11:56:06 -08:00
sprd
st clk: st: clkgen-fsyn: embed soc clock outputs within compatible data 2021-06-27 19:53:40 -07:00
sunxi clk: sunxi: Demote non-conformant kernel-doc headers 2021-03-08 16:47:55 +01:00
sunxi-ng clk: sunxi-ng: Unregister clocks/resets when unbinding 2021-11-25 09:48:23 +01:00
tegra clk: tegra: tegra124-emc: Fix missing put_device() call in emc_ensure_emc_driver 2022-04-08 14:23:48 +02:00
ti drivers: ti: remove redundant error message in adpll.c 2021-06-27 19:56:45 -07:00
uniphier clk: uniphier: Fix fixed-rate initialization 2022-04-08 14:22:50 +02:00
ux500 mfd: db8500-prcmu: Handle missing FW variant 2021-08-09 09:33:29 +01:00
versatile clk: versatile: Depend on HAS_IOMEM 2021-06-04 12:23:28 -07:00
x86 clk: x86: Rename clk-lpt to more specific clk-lpss-atom 2021-07-27 14:03:47 -07:00
xilinx clk: xilinx: move xlnx_vcu clock driver from soc 2021-02-08 18:31:25 -08:00
zynq clk: zynq: clkc: Remove various instances of an unused variable 'clk' 2021-02-11 11:56:07 -08:00
zynqmp Merge branches 'clk-kirkwood', 'clk-imx', 'clk-doc', 'clk-zynq' and 'clk-ralink' into clk-next 2021-09-01 15:27:07 -07:00
clk-asm9260.c
clk-aspeed.c
clk-aspeed.h
clk-ast2600.c clk/ast2600: Fix soc revision for AHB 2021-11-25 09:48:32 +01:00
clk-axi-clkgen.c clk: axi-clkgen: use devm_platform_ioremap_resource() short-hand 2021-02-08 18:13:13 -08:00
clk-axm5516.c
clk-bd718x7.c clk: bd718xx: Drop BD70528 support 2021-06-27 18:42:45 -07:00
clk-bm1880.c clk: bm1880: remove kfrees on static allocations 2022-01-27 11:04:20 +01:00
clk-bulk.c
clk-cdce706.c
clk-cdce925.c
clk-clps711x.c clk: clps711x: Terminate clk_div_table with sentinel element 2022-04-08 14:23:48 +02:00
clk-composite.c clk: composite: Also consider .determine_rate for rate + mux composites 2021-10-18 12:59:42 -07:00
clk-conf.c
clk-cs2000-cp.c
clk-devres.c clk: fix leak on devm_clk_bulk_get_all() unwind 2021-07-31 00:53:38 -07:00
clk-divider.c clk: divider: Implement and wire up .determine_rate by default 2021-08-05 17:35:58 -07:00
clk-fixed-factor.c clk: fixed: fix double free in resource managed fixed-factor clock 2021-04-07 16:01:25 -07:00
clk-fixed-mmio.c clk: clk-fixed-mmio: Demote obvious kernel-doc abuse 2021-02-11 11:56:05 -08:00
clk-fixed-rate.c clk: fixed: add missing kerneldoc 2020-09-22 12:44:14 -07:00
clk-fractional-divider.c clk: fractional-divider: Document the arithmetics used behind the code 2021-08-12 12:42:00 -07:00
clk-fractional-divider.h clk: fractional-divider: Hide clk_fractional_divider_ops from wide audience 2021-08-12 12:42:00 -07:00
clk-fsl-flexspi.c clk: fsl-flexspi: new driver 2020-12-07 16:56:41 -08:00
clk-fsl-sai.c clk: fsl-sai: use devm_clk_hw_register_composite_pdata() 2020-12-07 14:06:16 -08:00
clk-gate.c
clk-gemini.c
clk-gpio.c
clk-hi655x.c
clk-highbank.c
clk-hsdk-pll.c
clk-k210.c clk: k210: Fix k210_clk_set_parent() 2021-06-30 11:34:36 -07:00
clk-lmk04832.c clk: lmk04832: drop redundant fallthrough statements 2021-07-27 11:52:30 -07:00
clk-lochnagar.c
clk-max9485.c
clk-max77686.c
clk-milbeaut.c
clk-moxart.c
clk-multiplier.c
clk-mux.c clk: mux: provide devm_clk_hw_register_mux() 2021-04-07 11:05:44 -07:00
clk-nomadik.c
clk-npcm7xx.c clk: clk-npcm7xx: Remove unused static const tables 'npcm7xx_gates' and 'npcm7xx_divs_fx' 2021-02-11 11:56:05 -08:00
clk-nspire.c
clk-oxnas.c
clk-palmas.c clk: palmas: Add a missing SPDX license header 2021-08-05 17:34:30 -07:00
clk-plldig.c
clk-pwm.c clk: pwm: drop of_match_ptr from of_device_id table 2020-12-10 12:24:18 -08:00
clk-qoriq.c clk: qoriq: use macros to generate pll_mask 2021-02-14 13:02:01 -08:00
clk-rk808.c
clk-s2mps11.c clk: s2mps11: Fix a resource leak in error handling paths in the probe function 2020-12-19 15:53:31 -08:00
clk-scmi.c clk: scmi: Port driver to the new scmi_clk_proto_ops interface 2021-03-30 16:34:37 +01:00
clk-scpi.c clk: scpi: mark scpi_clk_match as maybe unused 2020-12-10 12:24:40 -08:00
clk-si514.c
clk-si544.c
clk-si570.c clk: si570: Skip NVM to RAM recall operation if an optional property is set 2021-02-11 12:13:50 -08:00
clk-si5341.c clk: si5341: Fix clock HW provider cleanup 2022-01-27 11:05:31 +01:00
clk-si5351.c clk: si5351: Wait for bit clear after PLL reset 2020-12-19 15:49:54 -08:00
clk-si5351.h
clk-sparx5.c
clk-stm32f4.c clk: stm32: Fix ltdc's clock turn off by clk_disable_unused() after system enter shell 2022-01-27 11:04:12 +01:00
clk-stm32h7.c clk: stm32h7: Switch to clk_divider.determine_rate 2021-08-05 17:36:10 -07:00
clk-stm32mp1.c clk: stm32mp1: Switch to clk_divider.determine_rate 2021-08-05 17:36:10 -07:00
clk-twl6040.c
clk-versaclock5.c clk: vc5: Add properties for configuring SD/OE behavior 2021-08-28 23:46:21 -07:00
clk-vt8500.c
clk-wm831x.c
clk-xgene.c clk: clk-xgene: Add description for 'mask' and fix formatting for 'flags' 2021-02-11 11:56:06 -08:00
clk.c clk: Initialize orphan req_rate 2022-04-08 14:23:52 +02:00
clk.h
clkdev.c clkdev: remove unused clkdev_alloc() interfaces 2021-06-08 17:00:09 +02:00
Kconfig clk: pistachio: Make it selectable for generic MIPS kernel 2021-08-12 16:01:49 +02:00
Makefile clk: pistachio: Make it selectable for generic MIPS kernel 2021-08-12 16:01:49 +02:00