ipq806x: fix dedicated cpufreq driver
[openwrt/openwrt.git] / target / linux / ipq806x / patches-5.10 / 098-1-cpufreq-add-Krait-dedicated-scaling-driver.patch
index 42913a994ca0c77a1ffacf161d335f7f85b845c3..769686220b770a20f12ac90a6260465aefdaf6d9 100644 (file)
@@ -75,7 +75,7 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
  ##################################################################################
 --- /dev/null
 +++ b/drivers/cpufreq/qcom-cpufreq-krait.c
-@@ -0,0 +1,601 @@
+@@ -0,0 +1,603 @@
 +// SPDX-License-Identifier: GPL-2.0
 +
 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@ -115,9 +115,11 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
 +      int cpu, ret;
 +
 +      if (l2_pdev) {
++              int policy_cpu = policy->cpu;
++
 +              /* find the max freq across all core */
 +              for_each_present_cpu(cpu)
-+                      if (cpu != index)
++                      if (cpu != policy_cpu)
 +                              target_freq = max(
 +                                      target_freq,
 +                                      (unsigned long)cpufreq_quick_get(cpu));
@@ -132,6 +134,18 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
 +              level = dev_pm_opp_get_level(opp);
 +              dev_pm_opp_put(opp);
 +
++              /*
++               * Hardware constraint:
++               * Krait CPU cannot operate at 384MHz with L2 at 1Ghz.
++               * Assume index 0 with the idle freq and level > 0 as 
++               * any L2 freq > 384MHz.
++               * Skip CPU freq change in this corner case.
++               */
++              if (unlikely(index == 0 && level != 0)) {
++                      dev_err(priv->cpu_dev, "Krait CPU can't operate at idle freq with L2 at 1GHz");
++                      return -EINVAL;
++              }
++
 +              opp = dev_pm_opp_find_level_exact(&l2_pdev->dev, level);
 +              if (IS_ERR(opp)) {
 +                      dev_err(&l2_pdev->dev,
@@ -144,18 +158,6 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
 +              ret = dev_pm_opp_set_rate(&l2_pdev->dev, target_freq);
 +              if (ret)
 +                      return ret;
-+
-+              /*
-+               * Hardware constraint:
-+               * Krait CPU cannot operate at 384MHz with L2 at 1Ghz.
-+               * Assume index 0 with the idle freq and level > 0 as 
-+               * any L2 freq > 384MHz.
-+               * Skip CPU freq change in this corner case.
-+               */
-+              if (unlikely(index == 0 && level != 0)) {
-+                      dev_err(priv->cpu_dev, "Krait CPU can't operate at idle freq with L2 at 1GHz");
-+                      return -EINVAL;
-+              }
 +      }
 +
 +      ret = dev_pm_opp_set_rate(priv->cpu_dev, freq * 1000);