Commit b894d20e authored by Vincent Donnefort's avatar Vincent Donnefort Committed by Rafael J. Wysocki

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: default avatarVincent Donnefort <vincent.donnefort@arm.com>
Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 1f39fa0d
...@@ -554,7 +554,7 @@ static unsigned int __resolve_freq(struct cpufreq_policy *policy, ...@@ -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 cpufreq_driver_resolve_freq(struct cpufreq_policy *policy,
unsigned int target_freq) 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); EXPORT_SYMBOL_GPL(cpufreq_driver_resolve_freq);
......
...@@ -111,7 +111,8 @@ static unsigned int cs_dbs_update(struct cpufreq_policy *policy) ...@@ -111,7 +111,8 @@ static unsigned int cs_dbs_update(struct cpufreq_policy *policy)
if (requested_freq > policy->max) if (requested_freq > policy->max)
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; dbs_info->requested_freq = requested_freq;
goto out; goto out;
} }
...@@ -134,7 +135,8 @@ static unsigned int cs_dbs_update(struct cpufreq_policy *policy) ...@@ -134,7 +135,8 @@ static unsigned int cs_dbs_update(struct cpufreq_policy *policy)
else else
requested_freq = policy->min; 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; dbs_info->requested_freq = requested_freq;
} }
......
...@@ -120,12 +120,12 @@ static void dbs_freq_increase(struct cpufreq_policy *policy, unsigned int freq) ...@@ -120,12 +120,12 @@ static void dbs_freq_increase(struct cpufreq_policy *policy, unsigned int freq)
if (od_tuners->powersave_bias) if (od_tuners->powersave_bias)
freq = od_ops.powersave_bias_target(policy, freq, freq = od_ops.powersave_bias_target(policy, freq,
CPUFREQ_RELATION_H); CPUFREQ_RELATION_HE);
else if (policy->cur == policy->max) else if (policy->cur == policy->max)
return; return;
__cpufreq_driver_target(policy, freq, od_tuners->powersave_bias ? __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) ...@@ -163,9 +163,9 @@ static void od_update(struct cpufreq_policy *policy)
if (od_tuners->powersave_bias) if (od_tuners->powersave_bias)
freq_next = od_ops.powersave_bias_target(policy, freq_next = od_ops.powersave_bias_target(policy,
freq_next, 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) ...@@ -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) { if (sample_type == OD_SUB_SAMPLE && policy_dbs->sample_delay_ns > 0) {
__cpufreq_driver_target(policy, dbs_info->freq_lo, __cpufreq_driver_target(policy, dbs_info->freq_lo,
CPUFREQ_RELATION_H); CPUFREQ_RELATION_HE);
return dbs_info->freq_lo_delay_us; return dbs_info->freq_lo_delay_us;
} }
......
...@@ -283,6 +283,10 @@ static inline void cpufreq_stats_record_transition(struct cpufreq_policy *policy ...@@ -283,6 +283,10 @@ static inline void cpufreq_stats_record_transition(struct cpufreq_policy *policy
/* relation flags */ /* relation flags */
#define CPUFREQ_RELATION_E BIT(2) /* Get if possible an efficient frequency */ #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 freq_attr {
struct attribute attr; struct attribute attr;
ssize_t (*show)(struct cpufreq_policy *, char *); ssize_t (*show)(struct cpufreq_policy *, char *);
...@@ -636,9 +640,11 @@ struct cpufreq_governor *cpufreq_fallback_governor(void); ...@@ -636,9 +640,11 @@ struct cpufreq_governor *cpufreq_fallback_governor(void);
static inline void cpufreq_policy_apply_limits(struct cpufreq_policy *policy) static inline void cpufreq_policy_apply_limits(struct cpufreq_policy *policy)
{ {
if (policy->max < policy->cur) 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) 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 */ /* Governor attribute set */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment