Merge branches 'pm-domains' and 'pm-cpufreq'
* pm-domains: PM / Domains: Fix bad of_node_put() in failure paths of genpd_dev_pm_attach() PM / Domains: Validate cases of a non-bound driver in genpd governor * pm-cpufreq: cpufreq: use last policy after online for drivers with ->setpolicy
This commit is contained in:
commit
d441fe25e7
|
@ -1775,10 +1775,10 @@ int genpd_dev_pm_attach(struct device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
pd = of_genpd_get_from_provider(&pd_args);
|
pd = of_genpd_get_from_provider(&pd_args);
|
||||||
|
of_node_put(pd_args.np);
|
||||||
if (IS_ERR(pd)) {
|
if (IS_ERR(pd)) {
|
||||||
dev_dbg(dev, "%s() failed to find PM domain: %ld\n",
|
dev_dbg(dev, "%s() failed to find PM domain: %ld\n",
|
||||||
__func__, PTR_ERR(pd));
|
__func__, PTR_ERR(pd));
|
||||||
of_node_put(dev->of_node);
|
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1796,7 +1796,6 @@ int genpd_dev_pm_attach(struct device *dev)
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(dev, "failed to add to PM domain %s: %d",
|
dev_err(dev, "failed to add to PM domain %s: %d",
|
||||||
pd->name, ret);
|
pd->name, ret);
|
||||||
of_node_put(dev->of_node);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,9 +160,6 @@ static bool default_power_down_ok(struct dev_pm_domain *pd)
|
||||||
struct gpd_timing_data *td;
|
struct gpd_timing_data *td;
|
||||||
s64 constraint_ns;
|
s64 constraint_ns;
|
||||||
|
|
||||||
if (!pdd->dev->driver)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if the device is allowed to be off long enough for the
|
* Check if the device is allowed to be off long enough for the
|
||||||
* domain to turn off and on (that's how much time it will
|
* domain to turn off and on (that's how much time it will
|
||||||
|
|
|
@ -976,10 +976,14 @@ static int cpufreq_init_policy(struct cpufreq_policy *policy)
|
||||||
|
|
||||||
new_policy.governor = gov;
|
new_policy.governor = gov;
|
||||||
|
|
||||||
/* Use the default policy if its valid. */
|
/* Use the default policy if there is no last_policy. */
|
||||||
if (cpufreq_driver->setpolicy)
|
if (cpufreq_driver->setpolicy) {
|
||||||
cpufreq_parse_governor(gov->name, &new_policy.policy, NULL);
|
if (policy->last_policy)
|
||||||
|
new_policy.policy = policy->last_policy;
|
||||||
|
else
|
||||||
|
cpufreq_parse_governor(gov->name, &new_policy.policy,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
/* set default policy */
|
/* set default policy */
|
||||||
return cpufreq_set_policy(policy, &new_policy);
|
return cpufreq_set_policy(policy, &new_policy);
|
||||||
}
|
}
|
||||||
|
@ -1330,6 +1334,8 @@ static void cpufreq_offline_prepare(unsigned int cpu)
|
||||||
if (has_target())
|
if (has_target())
|
||||||
strncpy(policy->last_governor, policy->governor->name,
|
strncpy(policy->last_governor, policy->governor->name,
|
||||||
CPUFREQ_NAME_LEN);
|
CPUFREQ_NAME_LEN);
|
||||||
|
else
|
||||||
|
policy->last_policy = policy->policy;
|
||||||
} else if (cpu == policy->cpu) {
|
} else if (cpu == policy->cpu) {
|
||||||
/* Nominate new CPU */
|
/* Nominate new CPU */
|
||||||
policy->cpu = cpumask_any(policy->cpus);
|
policy->cpu = cpumask_any(policy->cpus);
|
||||||
|
|
|
@ -77,6 +77,7 @@ struct cpufreq_policy {
|
||||||
unsigned int suspend_freq; /* freq to set during suspend */
|
unsigned int suspend_freq; /* freq to set during suspend */
|
||||||
|
|
||||||
unsigned int policy; /* see above */
|
unsigned int policy; /* see above */
|
||||||
|
unsigned int last_policy; /* policy before unplug */
|
||||||
struct cpufreq_governor *governor; /* see below */
|
struct cpufreq_governor *governor; /* see below */
|
||||||
void *governor_data;
|
void *governor_data;
|
||||||
bool governor_enabled; /* governor start/stop flag */
|
bool governor_enabled; /* governor start/stop flag */
|
||||||
|
|
Loading…
Reference in New Issue