OpenCloudOS-Kernel/drivers/clk
Gabor Juhos a68c0c55fa clk: qcom: clk-alpha-pll: fix rate setting for Stromer PLLs
commit 3c5b3e17b8fd1f1add5a9477306c355fab126977 upstream.

The clk_alpha_pll_stromer_set_rate() function writes inproper
values into the ALPHA_VAL{,_U} registers which results in wrong
clock rates when the alpha value is used.

The broken behaviour can be seen on IPQ5018 for example, when
dynamic scaling sets the CPU frequency to 800000 KHz. In this
case the CPU cores are running only at 792031 KHz:

  # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
  800000
  # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
  792031

This happens because the function ignores the fact that the alpha
value calculated by the alpha_pll_round_rate() function is only
32 bits wide which must be extended to 40 bits if it is used on
a hardware which supports 40 bits wide values.

Extend the clk_alpha_pll_stromer_set_rate() function to convert
the alpha value to 40 bits before wrinting that into the registers
in order to ensure that the hardware really uses the requested rate.

After the change the CPU frequency is correct:

  # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
  800000
  # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
  800000

Cc: stable@vger.kernel.org
Fixes: e47a4f55f2 ("clk: qcom: clk-alpha-pll: Add support for Stromer PLLs")
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
Link: https://lore.kernel.org/r/20240328-alpha-pll-fix-stromer-set-rate-v3-1-1b79714c78bc@gmail.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-06-16 13:47:39 +02:00
..
actions clk: actions: Convert to devm_platform_ioremap_resource() 2023-08-22 14:28:03 -07:00
analogbits
at91 Merge branches 'clk-qcom' and 'clk-microchip' into clk-next 2023-06-26 16:36:14 -07:00
axis
axs10x clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
baikal-t1 clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
bcm clk: bcm: rpi: Assign ->num before accessing ->hws 2024-06-16 13:47:39 +02:00
berlin clk: berlin: div: Add a determine_rate hook 2023-06-08 18:39:26 -07:00
davinci clk: da8xx: clk48: Switch to determine_rate 2023-06-08 18:39:34 -07:00
hisilicon clk: hisilicon: hi3559a: Fix an erroneous devm_kfree() 2024-03-26 18:19:50 -04:00
imgtec
imx clk: imx: imx8mp: Fix SAI_MCLK_SEL definition 2024-03-26 18:19:52 -04:00
ingenic clk: ingenic: tcu: Switch to determine_rate 2023-06-08 18:39:34 -07:00
keystone clk: keystone: pll: fix a couple NULL vs IS_ERR() checks 2023-11-20 11:59:06 +01:00
mediatek clk: mediatek: mt8365-mm: fix DPI0 parent 2024-06-12 11:12:07 +02:00
meson clk: meson: Add missing clocks to axg_clk_regmaps 2024-03-26 18:19:45 -04:00
microchip clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
mmp clk: mmp: pxa168: Fix memory leak in pxa168_clk_init() 2024-02-05 20:14:29 +00:00
mstar clk: mstar: msc313 cpupll clk driver 2022-10-27 11:44:27 -07:00
mvebu Merge branches 'clk-imx', 'clk-samsung', 'clk-annotate', 'clk-marvell' and 'clk-lmk' into clk-next 2023-08-30 14:39:19 -07:00
mxs
nuvoton clk: nuvoton: Convert to devm_platform_ioremap_resource() 2023-08-22 14:52:11 -07:00
nxp clk: nxp: fix typo in comment 2022-10-03 12:34:32 -07:00
pistachio clk: pistachio: Fix initconst confusion 2022-09-28 18:35:45 -07:00
pxa ARM: SoC changes for 6.5 2023-06-29 15:28:33 -07:00
qcom clk: qcom: clk-alpha-pll: fix rate setting for Stromer PLLs 2024-06-16 13:47:39 +02:00
ralink clk: ralink: mtmips: quiet unused variable warning 2023-11-20 11:59:06 +01:00
renesas clk: renesas: r9a07g043: Add clock and reset entry for PLIC 2024-06-12 11:12:08 +02:00
rockchip clk: rockchip: rk3128: Fix HCLK_OTG gate register 2024-01-20 11:51:42 +01:00
samsung clk: samsung: exynosautov9: fix wrong pll clock id value 2024-06-12 11:12:05 +02:00
sifive clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
socfpga clk: socfpga: Fix undefined behavior bug in struct stratix10_clock_data 2023-11-28 17:20:00 +00:00
spear clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
sprd clk: sprd: Fix thm_parents incorrect configuration 2023-09-11 13:50:49 -07:00
st clk: st: flexgen: Switch to determine_rate 2023-06-08 18:39:35 -07:00
starfive Merge branches 'clk-bindings', 'clk-starfive', 'clk-rm', 'clk-renesas' and 'clk-cleanup' into clk-next 2023-08-30 14:37:45 -07:00
stm32 clk: stm32: Fix a signedness issue in clk_stm32_composite_determine_rate() 2023-10-12 17:30:54 -07:00
sunxi Merge branches 'clk-versa', 'clk-strdup', 'clk-amlogic', 'clk-allwinner' and 'clk-rockchip' into clk-next 2023-08-30 14:38:19 -07:00
sunxi-ng clk: sunxi-ng: a64: Set minimum and maximum rate for PLL-MIPI 2024-05-17 12:02:33 +02:00
tegra clk: tegra: fix error return case for recalc_rate 2023-09-12 10:56:05 -07:00
ti clk: ti: fix double free in of_ti_divider_clk_setup() 2023-11-20 11:59:06 +01:00
uniphier clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
ux500 clk: ux500: sysctrl: Add a determine_rate hook 2023-06-08 18:39:30 -07:00
versatile clk: versatile: sp810: Add a determine_rate hook 2023-06-08 18:39:31 -07:00
visconti clk: visconti: Fix undefined behavior bug in struct visconti_pll_provider 2023-11-28 17:20:00 +00:00
x86 clk: x86: Convert to platform remove callback returning void 2023-03-28 19:31:45 -07:00
xilinx clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
zynq clk: zynq: Prevent null pointer dereference caused by kmalloc failure 2024-03-26 18:19:56 -04:00
zynqmp drivers: clk: zynqmp: update divider round rate logic 2024-01-25 15:35:37 -08:00
.kunitconfig clk: explicitly disable CONFIG_UML_PCI_OVER_VIRTIO in .kunitconfig 2022-07-14 10:35:44 -06:00
Kconfig This pull request is full of clk driver changes. In fact, there aren't any 2023-08-30 19:53:39 -07:00
Makefile Merge branches 'clk-versa', 'clk-strdup', 'clk-amlogic', 'clk-allwinner' and 'clk-rockchip' into clk-next 2023-08-30 14:38:19 -07:00
clk-apple-nco.c
clk-asm9260.c clk: asm9260: use parent index to link the reference clock 2022-09-29 17:55:26 -07:00
clk-aspeed.c Merge branches 'clk-imx', 'clk-samsung', 'clk-annotate', 'clk-marvell' and 'clk-lmk' into clk-next 2023-08-30 14:39:19 -07:00
clk-aspeed.h
clk-ast2600.c Merge branches 'clk-imx', 'clk-samsung', 'clk-annotate', 'clk-marvell' and 'clk-lmk' into clk-next 2023-08-30 14:39:19 -07:00
clk-axi-clkgen.c clk: axi-clkgen: Switch to determine_rate 2023-06-08 18:39:33 -07:00
clk-axm5516.c clk: axm5516: Convert to devm_platform_ioremap_resource() 2023-08-22 14:28:05 -07:00
clk-bd718x7.c
clk-bm1880.c clk: bm1880: Convert to devm_platform_ioremap_resource() 2023-08-22 14:28:11 -07:00
clk-bulk.c clk: bulk: Use dev_err_probe() helper in __clk_bulk_get() 2022-10-17 16:07:51 -07:00
clk-cdce706.c Merge branches 'clk-renesas', 'clk-determine-rate', 'clk-allwinner', 'clk-samsung' and 'clk-amlogic' into clk-next 2023-06-26 08:55:04 -07:00
clk-cdce925.c clk: cdce925: Remove redundant of_match_ptr() 2023-08-22 14:16:53 -07:00
clk-clps711x.c
clk-composite.c clk: composite: Fix handling of high clock rates 2023-06-12 17:42:10 -07:00
clk-conf.c clk: add missing of_node_put() in "assigned-clocks" property parsing 2023-03-29 13:53:28 -07:00
clk-cs2000-cp.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-devres.c clk: Fix slab-out-of-bounds error in devm_clk_release() 2023-08-22 15:25:18 -07:00
clk-divider.c clk: Introduce clk_hw_init_rate_request() 2022-09-15 09:31:40 -07:00
clk-en7523.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-fixed-factor.c clk: fixed-factor: Convert to platform remove callback returning void 2023-03-28 19:23:36 -07:00
clk-fixed-mmio.c Nothing looks out of the ordinary in this batch of clk driver updates. There 2023-04-29 17:29:39 -07:00
clk-fixed-rate.c clk: fixed-rate: Convert to platform remove callback returning void 2023-03-28 19:23:36 -07:00
clk-fractional-divider.c clk: Compute masks for fractional_divider clk when needed. 2023-04-05 12:09:26 -07:00
clk-fractional-divider.h
clk-fsl-flexspi.c
clk-fsl-sai.c clk: fsl-sai: Convert to devm_platform_ioremap_resource() 2023-08-22 14:28:15 -07:00
clk-gate.c
clk-gate_test.c
clk-gemini.c Merge branches 'clk-imx', 'clk-samsung', 'clk-annotate', 'clk-marvell' and 'clk-lmk' into clk-next 2023-08-30 14:39:19 -07:00
clk-gpio.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-hi655x.c
clk-highbank.c
clk-hsdk-pll.c clk: hsdk-pll: Convert to devm_platform_ioremap_resource() 2023-08-22 14:28:20 -07:00
clk-k210.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-lan966x.c clk: lan966x: Remove unused round_rate hook 2023-06-08 18:39:25 -07:00
clk-lmk04832.c clk: lmk04832: Support using PLL1_LD as SPI readback pin 2023-08-23 15:47:35 -07:00
clk-lochnagar.c clk: lochnagar: Add a determine_rate hook 2023-06-08 18:39:27 -07:00
clk-loongson1.c clk: loongson1: Re-implement the clock driver 2023-03-21 16:34:23 -07:00
clk-loongson2.c clk: clk-loongson2: Zero init clk_init_data 2023-06-12 18:30:46 -07:00
clk-max9485.c clk: Switch i2c drivers back to use .probe() 2023-05-10 14:05:34 -07:00
clk-max77686.c
clk-milbeaut.c clk: Annotate struct clk_hw_onecell_data with __counted_by 2023-08-22 13:51:26 -07:00
clk-moxart.c
clk-multiplier.c
clk-mux.c
clk-nomadik.c clk: nomadik: correct struct name kernel-doc warning 2022-12-09 10:26:25 -08:00
clk-npcm7xx.c clk: npcm7xx: Fix incorrect kfree 2023-11-20 11:59:06 +01:00
clk-nspire.c
clk-palmas.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-plldig.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-pwm.c clk: pwm: Convert to platform remove callback returning void 2023-03-28 19:23:37 -07:00
clk-qoriq.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-renesas-pcie.c clk: rs9: fix wrong default value for clock amplitude 2024-06-12 11:12:07 +02:00
clk-rk808.c clk: RK808: Reduce 'struct rk808' usage 2023-05-15 16:13:56 +01:00
clk-s2mps11.c clk: s2mps11: Convert to platform remove callback returning void 2023-03-28 19:23:37 -07:00
clk-scmi.c clk: scmi: Free scmi_clk allocated when the clocks with invalid info are skipped 2023-11-20 11:59:16 +01:00
clk-scpi.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-si514.c clk: Switch i2c drivers back to use .probe() 2023-05-10 14:05:34 -07:00
clk-si521xx.c clk: si521xx: Increase stack based print buffer size in probe 2024-01-10 17:16:55 +01:00
clk-si544.c clk: Switch i2c drivers back to use .probe() 2023-05-10 14:05:34 -07:00
clk-si570.c clk: Switch i2c drivers back to use .probe() 2023-05-10 14:05:34 -07:00
clk-si5341.c clk: si5341: fix an error code problem in si5341_output_clk_set_rate 2024-01-25 15:35:38 -08:00
clk-si5351.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-si5351.h
clk-sp7021.c clk: sp7021: fix return value check in sp7021_clk_probe() 2024-01-25 15:35:37 -08:00
clk-sparx5.c
clk-stm32f4.c clk: stm32f4: mux: Add a determine_rate hook 2023-06-08 18:39:27 -07:00
clk-stm32h7.c clk: stm32h7: Remove an unused field in struct stm32_fractional_divider 2023-04-03 14:10:42 -07:00
clk-stm32mp1.c clk: stm32mp1: Convert to platform remove callback returning void 2023-03-28 19:23:37 -07:00
clk-tps68470.c platform/x86: int3472: Support multiple clock consumers 2022-09-24 19:12:32 +02:00
clk-twl6040.c
clk-versaclock3.c clk: vc3: Make vc3_clk_mux enum values based on vc3_clk enum values 2023-09-11 13:50:43 -07:00
clk-versaclock5.c Merge branches 'clk-versa', 'clk-strdup', 'clk-amlogic', 'clk-allwinner' and 'clk-rockchip' into clk-next 2023-08-30 14:38:19 -07:00
clk-versaclock7.c Merge branches 'clk-versa', 'clk-strdup', 'clk-amlogic', 'clk-allwinner' and 'clk-rockchip' into clk-next 2023-08-30 14:38:19 -07:00
clk-vt8500.c
clk-wm831x.c clk: wm831x: clkout: Add a determine_rate hook 2023-06-08 18:39:28 -07:00
clk-xgene.c clk: clk-xgene: simplify if-if to if-else 2022-10-03 14:13:29 -07:00
clk.c clk: Don't hold prepare_lock when calling kref_put() 2024-05-17 12:02:19 +02:00
clk.h
clk_test.c clk: test: Add a determine_rate hook 2023-06-08 18:39:25 -07:00
clkdev.c clkdev: Simplify devm_clk_hw_register_clkdev() function 2022-09-30 14:50:11 -07:00