• Gabor Juhos's avatar
    clk: qcom: clk-alpha-pll: fix rate setting for Stromer PLLs · 3c5b3e17
    Gabor Juhos authored
    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: e47a4f55 ("clk: qcom: clk-alpha-pll: Add support for Stromer PLLs")
    Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: default avatarGabor Juhos <j4g8y7@gmail.com>
    Link: https://lore.kernel.org/r/20240328-alpha-pll-fix-stromer-set-rate-v3-1-1b79714c78bc@gmail.comSigned-off-by: default avatarBjorn Andersson <andersson@kernel.org>
    3c5b3e17
clk-alpha-pll.c 71.9 KB