MALI: rockchip: upgrade midgard DDK to r14p0-01rel0
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / arm / midgard / backend / gpu / mali_kbase_devfreq.c
index 083810f853ae050b6949de966a685c3e95f4641b..2306c757735ce6a4ffc1987eedaeabed1f3860ae 100644 (file)
@@ -19,6 +19,7 @@
 
 
 #include <mali_kbase.h>
+#include <mali_kbase_tlstream.h>
 #include <mali_kbase_config_defaults.h>
 #include <backend/gpu/mali_kbase_pm_internal.h>
 #ifdef CONFIG_DEVFREQ_THERMAL
@@ -53,9 +54,8 @@ kbase_devfreq_target(struct device *dev, unsigned long *target_freq, u32 flags)
        struct kbase_device *kbdev = dev_get_drvdata(dev);
        struct dev_pm_opp *opp;
        unsigned long freq = 0;
-       unsigned long old_freq = kbdev->current_freq;
        unsigned long voltage;
-       int err = 0;
+       int err;
 
        freq = *target_freq;
 
@@ -71,25 +71,15 @@ kbase_devfreq_target(struct device *dev, unsigned long *target_freq, u32 flags)
        /*
         * Only update if there is a change of frequency
         */
-       if (old_freq == freq) {
+       if (kbdev->current_freq == freq) {
                *target_freq = freq;
-#ifdef CONFIG_REGULATOR
-               if (kbdev->current_voltage == voltage)
-                       return 0;
-               err = regulator_set_voltage(kbdev->regulator, voltage, INT_MAX);
-               if (err) {
-                       dev_err(dev, "Failed to set voltage (%d)\n", err);
-                       return err;
-               }
-#else
                return 0;
-#endif
        }
 
 #ifdef CONFIG_REGULATOR
-       if (kbdev->regulator && kbdev->current_voltage != voltage &&
-           old_freq < freq) {
-               err = regulator_set_voltage(kbdev->regulator, voltage, INT_MAX);
+       if (kbdev->regulator && kbdev->current_voltage != voltage
+                       && kbdev->current_freq < freq) {
+               err = regulator_set_voltage(kbdev->regulator, voltage, voltage);
                if (err) {
                        dev_err(dev, "Failed to increase voltage (%d)\n", err);
                        return err;
@@ -97,23 +87,17 @@ kbase_devfreq_target(struct device *dev, unsigned long *target_freq, u32 flags)
        }
 #endif
 
-       mutex_lock(&kbdev->mutex_for_clk);
-       if (!kbdev->is_power_off)
-               err = clk_set_rate(kbdev->clock, freq);
-       kbdev->freq = freq;
-       mutex_unlock(&kbdev->mutex_for_clk);
+       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;
        }
-       *target_freq = freq;
-       kbdev->current_freq = freq;
 
 #ifdef CONFIG_REGULATOR
-       if (kbdev->regulator && kbdev->current_voltage != voltage &&
-           old_freq > freq) {
-               err = regulator_set_voltage(kbdev->regulator, voltage, INT_MAX);
+       if (kbdev->regulator && kbdev->current_voltage != voltage
+                       && kbdev->current_freq > freq) {
+               err = regulator_set_voltage(kbdev->regulator, voltage, voltage);
                if (err) {
                        dev_err(dev, "Failed to decrease voltage (%d)\n", err);
                        return err;
@@ -121,7 +105,11 @@ kbase_devfreq_target(struct device *dev, unsigned long *target_freq, u32 flags)
        }
 #endif
 
+       *target_freq = freq;
        kbdev->current_voltage = voltage;
+       kbdev->current_freq = freq;
+
+       kbase_tlstream_aux_devfreq_target((u64)freq);
 
        kbase_pm_reset_dvfs_utilisation(kbdev);
 
@@ -224,11 +212,6 @@ int kbase_devfreq_init(struct kbase_device *kbdev)
                return -ENODEV;
 
        kbdev->current_freq = clk_get_rate(kbdev->clock);
-#ifdef CONFIG_REGULATOR
-       if (kbdev->regulator)
-               kbdev->current_voltage =
-                       regulator_get_voltage(kbdev->regulator);
-#endif
 
        dp = &kbdev->devfreq_profile;