lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 267/757] cpufreq: qcom: Dont add frequencies without an OPP
    Date
    From: Matthias Kaehlcke <mka@chromium.org>

    [ Upstream commit bc9b9c5ab9d8d16157737db539929d57562926e9 ]

    The driver currently adds all frequencies from the hardware LUT to
    the cpufreq table, regardless of whether the corresponding OPP
    exists. This prevents devices from disabling certain OPPs through
    the device tree and can result in CPU frequencies for which the
    interconnect bandwidth can't be adjusted. Only add frequencies
    with an OPP entry.

    Fixes: 55538fbc79e9 ("cpufreq: qcom: Read voltage LUT and populate OPP")
    Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/cpufreq/qcom-cpufreq-hw.c | 21 +++++++++++++++------
    1 file changed, 15 insertions(+), 6 deletions(-)

    diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c
    index 3fb044b907a83..47b7d394d2abb 100644
    --- a/drivers/cpufreq/qcom-cpufreq-hw.c
    +++ b/drivers/cpufreq/qcom-cpufreq-hw.c
    @@ -177,10 +177,15 @@ static int qcom_cpufreq_hw_read_lut(struct device *cpu_dev,
    freq = cpu_hw_rate / 1000;

    if (freq != prev_freq && core_count != LUT_TURBO_IND) {
    - table[i].frequency = freq;
    - qcom_cpufreq_update_opp(cpu_dev, freq, volt);
    - dev_dbg(cpu_dev, "index=%d freq=%d, core_count %d\n", i,
    + if (!qcom_cpufreq_update_opp(cpu_dev, freq, volt)) {
    + table[i].frequency = freq;
    + dev_dbg(cpu_dev, "index=%d freq=%d, core_count %d\n", i,
    freq, core_count);
    + } else {
    + dev_warn(cpu_dev, "failed to update OPP for freq=%d\n", freq);
    + table[i].frequency = CPUFREQ_ENTRY_INVALID;
    + }
    +
    } else if (core_count == LUT_TURBO_IND) {
    table[i].frequency = CPUFREQ_ENTRY_INVALID;
    }
    @@ -197,9 +202,13 @@ static int qcom_cpufreq_hw_read_lut(struct device *cpu_dev,
    * as the boost frequency
    */
    if (prev->frequency == CPUFREQ_ENTRY_INVALID) {
    - prev->frequency = prev_freq;
    - prev->flags = CPUFREQ_BOOST_FREQ;
    - qcom_cpufreq_update_opp(cpu_dev, prev_freq, volt);
    + if (!qcom_cpufreq_update_opp(cpu_dev, prev_freq, volt)) {
    + prev->frequency = prev_freq;
    + prev->flags = CPUFREQ_BOOST_FREQ;
    + } else {
    + dev_warn(cpu_dev, "failed to update OPP for freq=%d\n",
    + freq);
    + }
    }

    break;
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 16:42    [W:4.037 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site