linux/drivers/clk/qcom
Gabor Juhos a68c0c55fa clk: qcom: clk-alpha-pll: fix rate setting for Stromer PLLs
commit 3c5b3e17b8 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>
History 2024-06-16 13:47:39 +02:00
..
a7-pll.c clk: qcom: a7-pll: Add missing MODULE_DEVICE_TABLE 2021-04-09 11:20:52 -07:00
a53-pll.c clk: qcom: a53-pll: convert to use parent_data rather than parent_names 2022-09-13 16:49:15 -05:00
apcs-msm8916.c clk: qcom: Convert to platform remove callback returning void 2023-03-13 05:41:06 -07:00
apcs-msm8996.c clk: qcom: apcs-msm8986: Include bitfield.h for FIELD_PREP 2023-02-22 17:38:56 -08:00
apcs-sdx55.c clk: qcom: Convert to platform remove callback returning void 2023-03-13 05:41:06 -07:00
apss-ipq-pll.c clk: qcom: apss-ipq-pll: Fix 'l' value for ipq5332_pll_config 2023-11-20 11:59:07 +01:00
apss-ipq6018.c clk: qcom: apss-ipq6018: mark apcs_alias0_core_clk as critical 2022-09-26 21:40:10 -05:00
camcc-sc7180.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
camcc-sc7280.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
camcc-sdm845.c clk: qcom: Revert sync_state based clk_disable_unused 2023-02-22 06:34:08 -08:00
camcc-sm6350.c clk: qcom: camcc-sm6350: Make camcc_sm6350_hws static 2023-01-11 13:35:17 -06:00
camcc-sm8250.c clk: qcom: camcc-sm8250: Fix topology around titan_top power domain 2022-06-30 18:34:55 -05:00
camcc-sm8450.c clk: qcom: camcc-sm8450: switch to parent_hws 2023-01-10 15:58:59 -06:00
clk-alpha-pll.c clk: qcom: clk-alpha-pll: fix rate setting for Stromer PLLs 2024-06-16 13:47:39 +02:00
clk-alpha-pll.h clk: qcom: clk-alpha-pll: introduce stromer plus ops 2023-11-20 11:59:06 +01:00
clk-branch.c clk: qcom: branch: Extend the invert logic for branch2 clocks 2023-05-24 21:47:17 -07:00
clk-branch.h clk: qcom: branch: Clean up branch enable registers 2023-03-13 12:59:44 -07:00
clk-cbf-8996.c clk: qcom: cbf-msm8996: Add support for MSM8996 Pro 2023-07-31 14:29:05 -07:00
clk-cpu-8996.c clk: Annotate struct clk_hw_onecell_data with __counted_by 2023-08-22 13:51:26 -07:00
clk-hfpll.c clk: qcom: clk-hfpll: switch to .determine_rate 2023-03-13 16:38:24 -07:00
clk-hfpll.h clk: qcom: Add support for High-Frequency PLLs (HFPLLs) 2018-10-17 13:14:37 -07:00
clk-krait.c clk: qcom: clk-krait: switch to .determine_rate 2023-03-13 16:38:24 -07:00
clk-krait.h clk: qcom: clk-krait: add apq/ipq8064 errata workaround 2022-06-27 15:41:37 -05:00
clk-pll.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
clk-pll.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
clk-rcg.c clk: qcom: clk-rcg: add clk_rcg_floor_ops ops 2022-03-08 16:19:31 -06:00
clk-rcg.h clk: qcom: rcg2: Make hw_clk_ctrl toggleable 2023-05-26 18:22:58 -07:00
clk-rcg2.c clk: qcom: clk-rcg2: Fix clock rate overflow for high parent frequencies 2023-11-20 11:59:04 +01:00
clk-regmap-divider.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
clk-regmap-divider.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
clk-regmap-mux-div.c clk: qcom: Add regmap mux-div clocks support 2018-01-02 10:00:24 -08:00
clk-regmap-mux-div.h clk: qcom: Use the correct style for SPDX License Identifier 2019-05-01 13:01:13 -07:00
clk-regmap-mux.c Revert "clk: qcom: regmap-mux: add pipe clk implementation" 2022-05-23 12:26:13 -05:00
clk-regmap-mux.h Revert "clk: qcom: regmap-mux: add pipe clk implementation" 2022-05-23 12:26:13 -05:00
clk-regmap-phy-mux.c clk: qcom: regmap: add PHY clock source implementation 2022-06-25 21:36:07 -05:00
clk-regmap-phy-mux.h clk: qcom: regmap: add PHY clock source implementation 2022-06-25 21:36:07 -05:00
clk-regmap.c clk: qcom: clk-regmap: Provide missing description for 'devm_clk_register_regmap()'s dev param 2021-02-10 19:42:51 -08:00
clk-regmap.h clk: define to_clk_regmap() as inline function 2020-10-28 16:34:44 -07:00
clk-rpm.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-rpmh.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
clk-smd-rpm.c clk: qcom: smd-rpm: Restore msm8976 num_clk 2024-05-17 12:02:07 +02:00
clk-spmi-pmic-div.c clk: qcom: clk-spmi-pmic-div: Annotate struct spmi_pmic_div_clk_cc with __counted_by 2023-08-22 13:51:54 -07:00
common.c clk: qcom: regmap-mux: fix parent clock lookup 2021-12-02 15:07:34 -08:00
common.h clk: qcom: regmap-mux: fix parent clock lookup 2021-12-02 15:07:34 -08:00
dispcc-qcm2290.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
dispcc-sc7180.c clk: qcom: dispcc-sc7180: switch to parent_hws 2023-01-10 15:58:59 -06:00
dispcc-sc7280.c clk: qcom: dispcc: Update the transition delay for MDSS GDSC 2022-02-24 16:22:11 -08:00
dispcc-sc8280xp.c clk: qcom: dispcc-sc8280xp: Use ret registers on GDSCs 2023-07-27 20:28:15 -07:00
dispcc-sdm845.c clk: qcom: dispcc-sdm845: Adjust internal GDSC wait times 2024-03-26 18:19:49 -04:00
dispcc-sm6115.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
dispcc-sm6125.c clk: qcom: dispcc-sm6125: Fix compatible string to match bindings 2022-12-29 10:57:25 -06:00
dispcc-sm6350.c clk: qcom: dispcc-sm6350: fix DisplayPort clocks 2024-06-12 11:12:08 +02:00
dispcc-sm6375.c clk: qcom: dispcc-sm6375: switch to parent_hws 2023-01-10 15:58:59 -06:00
dispcc-sm8250.c clk: qcom: dispcc-sm8250: switch to devm_pm_runtime_enable 2023-01-10 22:05:08 -06:00
dispcc-sm8450.c clk: qcom: dispcc-sm8450: fix DisplayPort clocks 2024-06-12 11:12:08 +02:00
dispcc-sm8550.c clk: qcom: dispcc-sm8550: fix DisplayPort clocks 2024-06-12 11:12:08 +02:00
gcc-apq8084.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-ipq806x.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-ipq4019.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-ipq5018.c clk: qcom: gcc-ipq5018: fix terminating of frequency table arrays 2024-04-03 15:28:23 +02:00
gcc-ipq5332.c clk: qcom: ipq5332: drop the CLK_SET_RATE_PARENT flag from GPLL clocks 2023-11-20 11:59:07 +01:00
gcc-ipq6018.c clk: qcom: gcc-ipq6018: fix terminating of frequency table arrays 2024-04-03 15:28:23 +02:00
gcc-ipq8074.c clk: qcom: gcc-ipq8074: fix terminating of frequency table arrays 2024-04-03 15:28:23 +02:00
gcc-ipq9574.c clk: qcom: gcc-ipq9574: fix terminating of frequency table arrays 2024-04-03 15:28:23 +02:00
gcc-mdm9607.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-mdm9615.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-msm8660.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-msm8909.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-msm8916.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-msm8917.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-msm8939.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-msm8953.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-msm8960.c clk: qcom: Convert to platform remove callback returning void 2023-03-13 05:41:06 -07:00
gcc-msm8974.c clk: qcom: gcc-msm8974: switch from sleep_clk_src to sleep_clk 2023-01-10 22:47:42 -06:00
gcc-msm8976.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-msm8994.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-msm8996.c clk: qcom: gcc-msm8996: Remove RPM bus clocks 2023-11-20 11:59:04 +01:00
gcc-msm8998.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-qcm2290.c clk: qcom: gcc-qcm2290: Mark RCGs shared where applicable 2023-05-24 21:47:16 -07:00
gcc-qcs404.c clk: qcom: gcc-qcs404: fix duplicate initializer warning 2023-01-30 08:41:06 -06:00
gcc-qdu1000.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-sa8775p.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sc7180.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-sc7280.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sc8180x.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sc8280xp.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-sdm660.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sdm845.c clk: qcom: gcc-sdm845: Add soft dependency on rpmhpd 2024-04-03 15:28:16 +02:00
gcc-sdx55.c clk: qcom: gcc-sdx55: get rid of test clock 2023-01-10 22:44:29 -06:00
gcc-sdx65.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sdx75.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sm6115.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sm6125.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sm6350.c clk: qcom: gcc-sm6350: Fix gcc_sdcc2_apps_clk_src 2023-08-04 08:54:29 -07:00
gcc-sm6375.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gcc-sm7150.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-sm8150.c clk: qcom: gcc-sm8150: Fix gcc_sdcc2_apps_clk_src 2023-11-20 11:59:04 +01:00
gcc-sm8250.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-sm8350.c clk: qcom: gcc-sm8350: fix PCIe PIPE clocks handling 2023-04-13 20:35:53 -07:00
gcc-sm8450.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gcc-sm8550.c clk: qcom: gcc-sm8550: Mark RCGs shared where applicable 2024-01-25 15:35:38 -08:00
gdsc.c clk: qcom: gdsc: Support 'synced_poweroff' genpd flag 2023-01-10 11:07:10 -06:00
gdsc.h clk: qcom: gdsc: Remove direct runtime PM calls 2022-11-04 11:53:49 -07:00
gpucc-msm8998.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
gpucc-sa8775p.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gpucc-sc7180.c clk: qcom: gpucc-sc7180: fix clk_dis_wait being programmed for CX GDSC 2023-02-08 17:48:55 -08:00
gpucc-sc7280.c clk: qcom: Update the force mem core bit for GPU clocks 2022-10-27 17:23:29 -07:00
gpucc-sc8280xp.c clk: qcom: gpucc-sc8280xp: Add runtime PM 2023-06-20 16:31:04 -07:00
gpucc-sdm660.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gpucc-sdm845.c clk: qcom: Revert sync_state based clk_disable_unused 2023-02-22 06:34:08 -08:00
gpucc-sm6115.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gpucc-sm6125.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gpucc-sm6350.c clk: qcom: gpucc-sm6350: Fix clock source names 2023-07-09 20:53:09 -07:00
gpucc-sm6375.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gpucc-sm8150.c clk: qcom: gpucc-sm8150: Update the gpu_cc_pll1 config 2024-01-25 15:35:34 -08:00
gpucc-sm8250.c clk: qcom: gpucc-sm8250: use parent_hws where possible 2021-04-07 17:22:54 -07:00
gpucc-sm8350.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gpucc-sm8450.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
gpucc-sm8550.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
hfpll.c clk: qcom: hfpll: use devm_platform_get_and_ioremap_resource() 2022-12-01 17:26:40 -06:00
Kconfig clk: qcom: config IPQ_APSS_6018 should depend on QCOM_SMEM 2023-11-20 11:59:06 +01:00
kpss-xcc.c clk: qcom: kpss-xcc: register it as clk provider 2022-12-01 17:26:36 -06:00
krait-cc.c clk: qcom: krait-cc: fix wrong pointer passed to IS_ERR() 2023-01-10 09:29:02 -06:00
lcc-ipq806x.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
lcc-msm8960.c Merge branch 'clk-qcom' into clk-next 2023-08-30 14:39:58 -07:00
lpass-gfm-sm8250.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
lpassaudiocc-sc7280.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
lpasscc-sc7280.c clk: qcom: lpasscc-sc7280: fix missing resume during probe 2023-07-18 07:58:50 -07:00
lpasscc-sc8280xp.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
lpasscc-sdm845.c clk: qcom: lpasscc-sdm845: explicitly include clk-provider.h 2021-12-20 23:14:50 -06:00
lpasscorecc-sc7180.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
lpasscorecc-sc7280.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
Makefile clk: qcom: Add Global Clock controller (GCC) driver for IPQ5018 2023-08-11 10:50:38 -07:00
mmcc-apq8084.c clk: qcom: mmcc-apq8084: fix terminating of frequency table arrays 2024-04-03 15:28:23 +02:00
mmcc-msm8960.c clk: qcom: mmcc-msm8960: use parent_hws/_data instead of parent_names 2022-09-13 21:58:35 -05:00
mmcc-msm8974.c clk: qcom: mmcc-msm8974: fix terminating of frequency table arrays 2024-04-03 15:28:23 +02:00
mmcc-msm8994.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
mmcc-msm8996.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
mmcc-msm8998.c clk: qcom: mmcc-msm8998: fix venus clock issue 2024-06-12 11:12:08 +02:00
mmcc-sdm660.c clk: qcom: mmcc-sdm660: Add hw_ctrl flag to venus_core0_gdsc 2021-10-13 15:20:24 -07:00
mss-sc7180.c clk: qcom: mss-sc7180: fix missing resume during probe 2023-07-18 07:58:50 -07:00
q6sstop-qcs404.c clk: qcom: q6sstop-qcs404: fix missing resume during probe 2023-07-18 07:58:50 -07:00
reset.c clk: qcom: reset: Ensure write completion on reset de/assertion 2024-03-26 18:19:46 -04:00
reset.h clk: qcom: reset: support resetting multiple bits 2022-12-01 17:26:35 -06:00
tcsrcc-sm8550.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
turingcc-qcs404.c clk: qcom: turingcc-qcs404: fix missing resume during probe 2023-07-18 07:58:50 -07:00
videocc-sc7180.c clk: qcom: videocc-sc7180: use parent_hws instead of parent_data 2022-02-10 18:33:31 -06:00
videocc-sc7280.c clk: qcom: Add video clock controller driver for SC7280 2021-07-20 13:46:32 -07:00
videocc-sdm845.c clk: qcom: videocc-sdm845: get rid of the test clock 2021-04-07 17:22:53 -07:00
videocc-sm8150.c clk: qcom: videocc-sm8150: Add missing PLL config property 2024-01-25 15:35:37 -08:00
videocc-sm8250.c clk: qcom: videocc-sm8250: switch to devm_pm_runtime_enable 2023-01-10 22:05:09 -06:00
videocc-sm8350.c clk: qcom: videocc-sm8350: Add SC8280XP support 2023-07-31 14:15:44 -07:00
videocc-sm8450.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00
videocc-sm8550.c clk: Explicitly include correct DT includes 2023-07-19 13:13:16 -07:00