ipq806x: fix dedicated cpufreq driver
authorAnsuel Smith <ansuelsmth@gmail.com>
Thu, 20 May 2021 21:41:57 +0000 (23:41 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Wed, 30 Jun 2021 21:14:43 +0000 (23:14 +0200)
2 small fix for the dedicated cpufreq driver:
- Fix index wrongly used as the current cpu
- Exit early if a bad freq is detected. In the current state the freq
is applied anyway even with invalid state.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
target/linux/ipq806x/patches-5.10/098-1-cpufreq-add-Krait-dedicated-scaling-driver.patch
target/linux/ipq806x/patches-5.10/098-3-add-fab-scaling-support-with-cpufreq.patch
target/linux/ipq806x/patches-5.4/098-1-cpufreq-add-Krait-dedicated-scaling-driver.patch
target/linux/ipq806x/patches-5.4/098-3-add-fab-scaling-support-with-cpufreq.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);
index fe9143218f3d7568760eda6e2a9866642abd1d6f..8ce3f062cff6c2c145a97b8e5518b9a30df8bf98 100644 (file)
  
  #include "cpufreq-dt.h"
  
-@@ -54,6 +55,13 @@ static int set_target(struct cpufreq_pol
-               level = dev_pm_opp_get_level(opp);
-               dev_pm_opp_put(opp);
+@@ -68,6 +69,13 @@ static int set_target(struct cpufreq_pol
+                       return -EINVAL;
+               }
  
 +              /*
 +               * Scale fabrics with max freq across all cores
index cfc4341ebc29d48d3669acbddd45211739bf57de..d6711105da6d38788918f785525d430cc890b421 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);
index fe9143218f3d7568760eda6e2a9866642abd1d6f..8ce3f062cff6c2c145a97b8e5518b9a30df8bf98 100644 (file)
  
  #include "cpufreq-dt.h"
  
-@@ -54,6 +55,13 @@ static int set_target(struct cpufreq_pol
-               level = dev_pm_opp_get_level(opp);
-               dev_pm_opp_put(opp);
+@@ -68,6 +69,13 @@ static int set_target(struct cpufreq_pol
+                       return -EINVAL;
+               }
  
 +              /*
 +               * Scale fabrics with max freq across all cores