cpufreq: Use CPUFREQ_RELATION_E in DVFS governors
Let the governors schedutil, conservative and ondemand to work, if possible on efficient frequencies only. Signed-off-by: Vincent Donnefort <vincent.donnefort@arm.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
1f39fa0dcc
commit
b894d20e68
@ -554,7 +554,7 @@ static unsigned int __resolve_freq(struct cpufreq_policy *policy,
|
||||
unsigned int cpufreq_driver_resolve_freq(struct cpufreq_policy *policy,
|
||||
unsigned int target_freq)
|
||||
{
|
||||
return __resolve_freq(policy, target_freq, CPUFREQ_RELATION_L);
|
||||
return __resolve_freq(policy, target_freq, CPUFREQ_RELATION_LE);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cpufreq_driver_resolve_freq);
|
||||
|
||||
|
@ -111,7 +111,8 @@ static unsigned int cs_dbs_update(struct cpufreq_policy *policy)
|
||||
if (requested_freq > policy->max)
|
||||
requested_freq = policy->max;
|
||||
|
||||
__cpufreq_driver_target(policy, requested_freq, CPUFREQ_RELATION_H);
|
||||
__cpufreq_driver_target(policy, requested_freq,
|
||||
CPUFREQ_RELATION_HE);
|
||||
dbs_info->requested_freq = requested_freq;
|
||||
goto out;
|
||||
}
|
||||
@ -134,7 +135,8 @@ static unsigned int cs_dbs_update(struct cpufreq_policy *policy)
|
||||
else
|
||||
requested_freq = policy->min;
|
||||
|
||||
__cpufreq_driver_target(policy, requested_freq, CPUFREQ_RELATION_L);
|
||||
__cpufreq_driver_target(policy, requested_freq,
|
||||
CPUFREQ_RELATION_LE);
|
||||
dbs_info->requested_freq = requested_freq;
|
||||
}
|
||||
|
||||
|
@ -120,12 +120,12 @@ static void dbs_freq_increase(struct cpufreq_policy *policy, unsigned int freq)
|
||||
|
||||
if (od_tuners->powersave_bias)
|
||||
freq = od_ops.powersave_bias_target(policy, freq,
|
||||
CPUFREQ_RELATION_H);
|
||||
CPUFREQ_RELATION_HE);
|
||||
else if (policy->cur == policy->max)
|
||||
return;
|
||||
|
||||
__cpufreq_driver_target(policy, freq, od_tuners->powersave_bias ?
|
||||
CPUFREQ_RELATION_L : CPUFREQ_RELATION_H);
|
||||
CPUFREQ_RELATION_LE : CPUFREQ_RELATION_HE);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -163,9 +163,9 @@ static void od_update(struct cpufreq_policy *policy)
|
||||
if (od_tuners->powersave_bias)
|
||||
freq_next = od_ops.powersave_bias_target(policy,
|
||||
freq_next,
|
||||
CPUFREQ_RELATION_L);
|
||||
CPUFREQ_RELATION_LE);
|
||||
|
||||
__cpufreq_driver_target(policy, freq_next, CPUFREQ_RELATION_C);
|
||||
__cpufreq_driver_target(policy, freq_next, CPUFREQ_RELATION_CE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -184,7 +184,7 @@ static unsigned int od_dbs_update(struct cpufreq_policy *policy)
|
||||
*/
|
||||
if (sample_type == OD_SUB_SAMPLE && policy_dbs->sample_delay_ns > 0) {
|
||||
__cpufreq_driver_target(policy, dbs_info->freq_lo,
|
||||
CPUFREQ_RELATION_H);
|
||||
CPUFREQ_RELATION_HE);
|
||||
return dbs_info->freq_lo_delay_us;
|
||||
}
|
||||
|
||||
|
@ -283,6 +283,10 @@ static inline void cpufreq_stats_record_transition(struct cpufreq_policy *policy
|
||||
/* relation flags */
|
||||
#define CPUFREQ_RELATION_E BIT(2) /* Get if possible an efficient frequency */
|
||||
|
||||
#define CPUFREQ_RELATION_LE (CPUFREQ_RELATION_L | CPUFREQ_RELATION_E)
|
||||
#define CPUFREQ_RELATION_HE (CPUFREQ_RELATION_H | CPUFREQ_RELATION_E)
|
||||
#define CPUFREQ_RELATION_CE (CPUFREQ_RELATION_C | CPUFREQ_RELATION_E)
|
||||
|
||||
struct freq_attr {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct cpufreq_policy *, char *);
|
||||
@ -636,9 +640,11 @@ struct cpufreq_governor *cpufreq_fallback_governor(void);
|
||||
static inline void cpufreq_policy_apply_limits(struct cpufreq_policy *policy)
|
||||
{
|
||||
if (policy->max < policy->cur)
|
||||
__cpufreq_driver_target(policy, policy->max, CPUFREQ_RELATION_H);
|
||||
__cpufreq_driver_target(policy, policy->max,
|
||||
CPUFREQ_RELATION_HE);
|
||||
else if (policy->min > policy->cur)
|
||||
__cpufreq_driver_target(policy, policy->min, CPUFREQ_RELATION_L);
|
||||
__cpufreq_driver_target(policy, policy->min,
|
||||
CPUFREQ_RELATION_LE);
|
||||
}
|
||||
|
||||
/* Governor attribute set */
|
||||
|
Loading…
Reference in New Issue
Block a user