mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge branches 'pm-cpufreq', 'pm-cpuidle' and 'pm-devfreq'
* pm-cpufreq: cpufreq: conservative: Allow down_threshold to take values from 1 to 10 Revert "cpufreq: schedutil: Reduce frequencies slower" * pm-cpuidle: cpuidle: dt: Add missing 'of_node_put()' * pm-devfreq: PM / devfreq: exynos-ppmu: Staticize event list PM / devfreq: exynos-ppmu: Handle return value of clk_prepare_enable PM / devfreq: exynos-nocp: Handle return value of clk_prepare_enable
This commit is contained in:
commit
f63e4f7d41
12368 changed files with 1319582 additions and 285774 deletions
|
|
@ -118,7 +118,7 @@ static void __init cps_cpuidle_unregister(void)
|
|||
|
||||
static int __init cps_cpuidle_init(void)
|
||||
{
|
||||
int err, cpu, core, i;
|
||||
int err, cpu, i;
|
||||
struct cpuidle_device *device;
|
||||
|
||||
/* Detect supported states */
|
||||
|
|
@ -160,7 +160,6 @@ static int __init cps_cpuidle_init(void)
|
|||
}
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
core = cpu_data[cpu].core;
|
||||
device = &per_cpu(cpuidle_dev, cpu);
|
||||
device->cpu = cpu;
|
||||
#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED
|
||||
|
|
|
|||
|
|
@ -56,10 +56,9 @@ static int snooze_loop(struct cpuidle_device *dev,
|
|||
|
||||
snooze_exit_time = get_tb() + snooze_timeout;
|
||||
ppc64_runlatch_off();
|
||||
HMT_very_low();
|
||||
while (!need_resched()) {
|
||||
HMT_low();
|
||||
HMT_very_low();
|
||||
if (snooze_timeout_en && get_tb() > snooze_exit_time)
|
||||
if (likely(snooze_timeout_en) && get_tb() > snooze_exit_time)
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -215,11 +214,25 @@ static inline void add_powernv_state(int index, const char *name,
|
|||
stop_psscr_table[index].mask = psscr_mask;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns 0 if prop1_len == prop2_len. Else returns -1
|
||||
*/
|
||||
static inline int validate_dt_prop_sizes(const char *prop1, int prop1_len,
|
||||
const char *prop2, int prop2_len)
|
||||
{
|
||||
if (prop1_len == prop2_len)
|
||||
return 0;
|
||||
|
||||
pr_warn("cpuidle-powernv: array sizes don't match for %s and %s\n",
|
||||
prop1, prop2);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int powernv_add_idle_states(void)
|
||||
{
|
||||
struct device_node *power_mgt;
|
||||
int nr_idle_states = 1; /* Snooze */
|
||||
int dt_idle_states;
|
||||
int dt_idle_states, count;
|
||||
u32 latency_ns[CPUIDLE_STATE_MAX];
|
||||
u32 residency_ns[CPUIDLE_STATE_MAX];
|
||||
u32 flags[CPUIDLE_STATE_MAX];
|
||||
|
|
@ -244,6 +257,21 @@ static int powernv_add_idle_states(void)
|
|||
goto out;
|
||||
}
|
||||
|
||||
count = of_property_count_u32_elems(power_mgt,
|
||||
"ibm,cpu-idle-state-latencies-ns");
|
||||
|
||||
if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags", dt_idle_states,
|
||||
"ibm,cpu-idle-state-latencies-ns",
|
||||
count) != 0)
|
||||
goto out;
|
||||
|
||||
count = of_property_count_strings(power_mgt,
|
||||
"ibm,cpu-idle-state-names");
|
||||
if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags", dt_idle_states,
|
||||
"ibm,cpu-idle-state-names",
|
||||
count) != 0)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Since snooze is used as first idle state, max idle states allowed is
|
||||
* CPUIDLE_STATE_MAX -1
|
||||
|
|
@ -278,6 +306,22 @@ static int powernv_add_idle_states(void)
|
|||
has_stop_states = (flags[0] &
|
||||
(OPAL_PM_STOP_INST_FAST | OPAL_PM_STOP_INST_DEEP));
|
||||
if (has_stop_states) {
|
||||
count = of_property_count_u64_elems(power_mgt,
|
||||
"ibm,cpu-idle-state-psscr");
|
||||
if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags",
|
||||
dt_idle_states,
|
||||
"ibm,cpu-idle-state-psscr",
|
||||
count) != 0)
|
||||
goto out;
|
||||
|
||||
count = of_property_count_u64_elems(power_mgt,
|
||||
"ibm,cpu-idle-state-psscr-mask");
|
||||
if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags",
|
||||
dt_idle_states,
|
||||
"ibm,cpu-idle-state-psscr-mask",
|
||||
count) != 0)
|
||||
goto out;
|
||||
|
||||
if (of_property_read_u64_array(power_mgt,
|
||||
"ibm,cpu-idle-state-psscr", psscr_val, dt_idle_states)) {
|
||||
pr_warn("cpuidle-powernv: missing ibm,cpu-idle-state-psscr in DT\n");
|
||||
|
|
@ -292,8 +336,21 @@ static int powernv_add_idle_states(void)
|
|||
}
|
||||
}
|
||||
|
||||
rc = of_property_read_u32_array(power_mgt,
|
||||
"ibm,cpu-idle-state-residency-ns", residency_ns, dt_idle_states);
|
||||
count = of_property_count_u32_elems(power_mgt,
|
||||
"ibm,cpu-idle-state-residency-ns");
|
||||
|
||||
if (count < 0) {
|
||||
rc = count;
|
||||
} else if (validate_dt_prop_sizes("ibm,cpu-idle-state-flags",
|
||||
dt_idle_states,
|
||||
"ibm,cpu-idle-state-residency-ns",
|
||||
count) != 0) {
|
||||
goto out;
|
||||
} else {
|
||||
rc = of_property_read_u32_array(power_mgt,
|
||||
"ibm,cpu-idle-state-residency-ns",
|
||||
residency_ns, dt_idle_states);
|
||||
}
|
||||
|
||||
for (i = 0; i < dt_idle_states; i++) {
|
||||
unsigned int exit_latency, target_residency;
|
||||
|
|
|
|||
|
|
@ -111,7 +111,8 @@ void cpuidle_use_deepest_state(bool enable)
|
|||
|
||||
preempt_disable();
|
||||
dev = cpuidle_get_device();
|
||||
dev->use_deepest_state = enable;
|
||||
if (dev)
|
||||
dev->use_deepest_state = enable;
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -180,8 +180,10 @@ int dt_init_idle_driver(struct cpuidle_driver *drv,
|
|||
if (!state_node)
|
||||
break;
|
||||
|
||||
if (!of_device_is_available(state_node))
|
||||
if (!of_device_is_available(state_node)) {
|
||||
of_node_put(state_node);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!idle_state_valid(state_node, i, cpumask)) {
|
||||
pr_warn("%s idle state not valid, bailing out\n",
|
||||
|
|
|
|||
Loading…
Reference in a new issue