#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
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;
/*
* 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;
}
#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;
}
#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);
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;