CHROMIUM: MALI: Revert mali_kbase_devfreq.c in CL:1317240
Revert mali_kbase_devfreq.c in CL:1317240, since it's causing
compilation error on all other platform other than mediatek.
Reverting this single file cause other compilation error, and would be
fixed in CL:1424957.
BUG=b:121277411
TEST=None
CQ-DEPEND=CL:1424957
Change-Id: I0bbaf65e866a5079ac9da6c77cf41c141a2681fd
Signed-off-by: Pi-Hsun Shih <pihsun@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1496710
Commit-Ready: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Dominik Behr <dbehr@chromium.org>
diff --git a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c
index 9a2a07c..683a24c 100644
--- a/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c
+++ b/drivers/gpu/arm/midgard/backend/gpu/mali_kbase_devfreq.c
@@ -79,98 +79,6 @@
return freq;
}
-static void voltage_range_check(unsigned long *voltage)
-{
- voltage[1] = ((voltage[1] - voltage[0]) < MIN_VOLT_BIAS) ?
- (voltage[0] + MIN_VOLT_BIAS) : voltage[1];
- voltage[1] = ((voltage[1] - voltage[0]) > MAX_VOLT_BIAS) ?
- (voltage[0] + MIN_VOLT_BIAS) : voltage[1];
- voltage[1] = min_t(unsigned long, max_t(unsigned long, voltage[1],
- VSRAM_GPU_MIN_VOLT), VSRAM_GPU_MAX_VOLT);
-}
-
-static bool get_step_volt(unsigned long *step_volt,
- unsigned long *target_volt, int count, bool inc)
-{
- unsigned long regulator_min_volt;
- unsigned long regulator_max_volt;
- unsigned long current_bias;
- long adjust_step;
- int i;
-
- if (inc) {
- current_bias = target_volt[1] - step_volt[0];
- adjust_step = MIN_VOLT_BIAS;
- } else {
- current_bias = step_volt[1] - target_volt[0];
- adjust_step = -MIN_VOLT_BIAS;
- }
-
- for (i = 0; i < count; ++i)
- if (step_volt[i] != target_volt[i])
- break;
-
- if (i == count)
- return 0;
-
- for (i = 0; i < count; i++) {
- if (i) {
- regulator_min_volt = VSRAM_GPU_MIN_VOLT;
- regulator_max_volt = VSRAM_GPU_MAX_VOLT;
- } else {
- regulator_min_volt = VGPU_MIN_VOLT;
- regulator_max_volt = VGPU_MAX_VOLT;
- }
-
- if (current_bias > MAX_VOLT_BIAS) {
- step_volt[i] = min(max(step_volt[0] + adjust_step,
- regulator_min_volt), regulator_max_volt);
- } else {
- step_volt[i] = target_volt[i];
- }
- }
- return 1;
-}
-
-static int
-set_voltages(struct kbase_device *kbdev, unsigned long *target_volt, int inc)
-{
- unsigned long step_volt[REGULATOR_NUM];
- int first, step;
- int i;
- int err;
-
- for (i = 0; i < kbdev->regulator_num; ++i)
- step_volt[i] = kbdev->current_voltage[i];
-
- if (inc) {
- first = kbdev->regulator_num - 1;
- step = -1;
- } else {
- first = 0;
- step = 1;
- }
-
- while (get_step_volt(step_volt, target_volt,
- kbdev->regulator_num, inc)) {
- for (i = first; i >= 0 && i < kbdev->regulator_num; i += step) {
- if (kbdev->current_voltage[i] == step_volt[i])
- continue;
-
- err = regulator_set_voltage(kbdev->regulator[i],
- step_volt[i], step_volt[i] + VOLT_TOL);
-
- if (err) {
- dev_err(kbdev->dev, "Failed to set reg %d voltage err:(%d)\n",
- i, err);
- return err;
- }
- }
- }
-
- return 0;
-}
-
static int
kbase_devfreq_target(struct device *dev, unsigned long *target_freq, u32 flags)
{
@@ -178,10 +86,9 @@
struct dev_pm_opp *opp;
unsigned long nominal_freq;
unsigned long freq = 0;
- unsigned long target_volt[REGULATOR_NUM];
- int err, i;
+ unsigned long voltage;
+ int err;
u64 core_mask;
- struct mfg_base *mfg = kbdev->platform_context;
freq = *target_freq;
@@ -189,6 +96,7 @@
rcu_read_lock();
#endif
opp = devfreq_recommended_opp(dev, &freq, flags);
+ voltage = dev_pm_opp_get_voltage(opp);
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
rcu_read_unlock();
#endif
@@ -196,9 +104,6 @@
dev_err(dev, "Failed to get opp (%ld)\n", PTR_ERR(opp));
return PTR_ERR(opp);
}
-
- for (i = 0; i < kbdev->regulator_num; i++)
- target_volt[i] = dev_pm_opp_get_voltage_supply(opp, i);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
dev_pm_opp_put(opp);
#endif
@@ -208,51 +113,36 @@
/*
* Only update if there is a change of frequency
*/
- if (kbdev->current_nominal_freq == nominal_freq &&
- kbdev->current_voltage[0] == target_volt[0]) {
+ if (kbdev->current_nominal_freq == nominal_freq) {
*target_freq = nominal_freq;
return 0;
}
freq = opp_translate(kbdev, nominal_freq, &core_mask);
- voltage_range_check(target_volt);
-
#ifdef CONFIG_REGULATOR
- if (kbdev->current_voltage[0] < target_volt[0]) {
- err = set_voltages(kbdev, target_volt, 1);
+ if (kbdev->regulator && kbdev->current_voltage != voltage
+ && kbdev->current_freq < freq) {
+ err = regulator_set_voltage(kbdev->regulator, voltage, voltage);
if (err) {
- dev_err(kbdev->dev, "Failed to increase voltage\n");
+ dev_err(dev, "Failed to increase voltage (%d)\n", err);
return err;
}
}
#endif
- if (kbdev->current_freq != freq) {
- err = clk_set_parent(mfg->clk_mux, mfg->clk_sub_parent);
- if (err) {
- dev_err(kbdev->dev, "Failed to select sub clock src\n");
- return err;
- }
-
- err = clk_set_rate(kbdev->clock, freq);
- if (err) {
- dev_err(dev, "Failed to set clock %lu (target %lu)\n",
- freq, *target_freq);
- return err;
- }
-
- err = clk_set_parent(mfg->clk_mux, mfg->clk_main_parent);
- if (err) {
- dev_err(kbdev->dev, "Failed to select main clock src\n");
- return err;
- }
+ err = clk_set_rate(kbdev->clock, freq);
+ if (err) {
+ dev_err(dev, "Failed to set clock %lu (target %lu)\n",
+ freq, *target_freq);
+ return err;
}
#ifdef CONFIG_REGULATOR
- if (kbdev->current_voltage[0] > target_volt[0]) {
- err = set_voltages(kbdev, target_volt, 0);
+ if (kbdev->regulator && kbdev->current_voltage != voltage
+ && kbdev->current_freq > freq) {
+ err = regulator_set_voltage(kbdev->regulator, voltage, voltage);
if (err) {
- dev_err(kbdev->dev, "Failed to decrease voltage\n");
+ dev_err(dev, "Failed to decrease voltage (%d)\n", err);
return err;
}
}
@@ -261,8 +151,7 @@
kbase_devfreq_set_core_mask(kbdev, core_mask);
*target_freq = nominal_freq;
- for (i = 0; i < kbdev->regulator_num; i++)
- kbdev->current_voltage[i] = target_volt[i];
+ kbdev->current_voltage = voltage;
kbdev->current_nominal_freq = nominal_freq;
kbdev->current_freq = freq;
kbdev->current_core_mask = core_mask;
@@ -432,7 +321,7 @@
kbdev->opp_table[i].core_mask = core_mask;
dev_info(kbdev->dev, "OPP %d : opp_freq=%llu real_freq=%llu core_mask=%llx\n",
- i, opp_freq, real_freq, core_mask);
+ i, opp_freq, real_freq, core_mask);
i++;
}