|
|
@@ -75,7 +75,7 @@ Signed-off-by: Ansuel Smith <[email protected]>
|
|
|
##################################################################################
|
|
|
--- /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 <[email protected]>
|
|
|
+ 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 <[email protected]>
|
|
|
+ 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 <[email protected]>
|
|
|
+ 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);
|