Lines Matching +full:idle +full:- +full:states

1 // SPDX-License-Identifier: GPL-2.0
3 * cpuidle-powernv - idle state cpuidle driver.
4 * Adapted from drivers/cpuidle/cpuidle-pseries
26 * Expose only those Hardware idle states via the cpuidle framework
58 for (i = index + 1; i < drv->state_count; i++) { in get_snooze_timeout()
59 struct cpuidle_state *s = &drv->states[i]; in get_snooze_timeout()
60 struct cpuidle_state_usage *su = &dev->states_usage[i]; in get_snooze_timeout()
62 if (s->disabled || su->disable) in get_snooze_timeout()
65 return s->target_residency * tb_ticks_per_usec; in get_snooze_timeout()
153 * States for dedicated partition case.
196 drv->state_count = 0; in powernv_cpuidle_driver_init()
203 drv->states[drv->state_count] = /* structure copy */ in powernv_cpuidle_driver_init()
206 drv->state_count += 1; in powernv_cpuidle_driver_init()
216 * drv->cpumask defaults to cpu_possible_mask in in powernv_cpuidle_driver_init()
219 * cannot be hot-added later at run time. in powernv_cpuidle_driver_init()
225 drv->cpumask = (struct cpumask *)cpu_present_mask; in powernv_cpuidle_driver_init()
251 * Returns 0 if prop1_len == prop2_len. Else returns -1
259 pr_warn("cpuidle-powernv: array sizes don't match for %s and %s\n", in validate_dt_prop_sizes()
261 return -1; in validate_dt_prop_sizes()
276 pr_warn("cpuidle-powernv : Only Snooze is available\n"); in powernv_add_idle_states()
280 /* TODO: Count only states which are eligible for cpuidle */ in powernv_add_idle_states()
284 * Since snooze is used as first idle state, max idle states allowed is in powernv_add_idle_states()
285 * CPUIDLE_STATE_MAX -1 in powernv_add_idle_states()
287 if (nr_pnv_idle_states > CPUIDLE_STATE_MAX - 1) { in powernv_add_idle_states()
288 pr_warn("cpuidle-powernv: discovered idle states more than allowed"); in powernv_add_idle_states()
289 dt_idle_states = CPUIDLE_STATE_MAX - 1; in powernv_add_idle_states()
293 * If the idle states use stop instruction, probe for psscr values in powernv_add_idle_states()
305 * Skip the platform idle state whose flag isn't in in powernv_add_idle_states()
308 if ((state->flags & supported_flags) != state->flags) in powernv_add_idle_states()
311 * If an idle state has exit latency beyond in powernv_add_idle_states()
313 * in cpu-idle. in powernv_add_idle_states()
315 if (state->latency_ns > POWERNV_THRESHOLD_LATENCY_NS) in powernv_add_idle_states()
321 exit_latency = DIV_ROUND_UP(state->latency_ns, 1000); in powernv_add_idle_states()
322 target_residency = DIV_ROUND_UP(state->residency_ns, 1000); in powernv_add_idle_states()
324 if (has_stop_states && !(state->valid)) in powernv_add_idle_states()
327 if (state->flags & OPAL_PM_TIMEBASE_STOP) in powernv_add_idle_states()
330 if (state->flags & OPAL_PM_NAP_ENABLED) { in powernv_add_idle_states()
336 add_powernv_state(nr_idle_states, state->name, in powernv_add_idle_states()
339 state->psscr_val, in powernv_add_idle_states()
340 state->psscr_mask); in powernv_add_idle_states()
344 * All cpuidle states with CPUIDLE_FLAG_TIMER_STOP set must come in powernv_add_idle_states()
348 else if (state->flags & OPAL_PM_SLEEP_ENABLED || in powernv_add_idle_states()
349 state->flags & OPAL_PM_SLEEP_ENABLED_ER1) { in powernv_add_idle_states()
356 add_powernv_state(nr_idle_states, state->name, in powernv_add_idle_states()
359 state->psscr_val, in powernv_add_idle_states()
360 state->psscr_mask); in powernv_add_idle_states()
378 return -ENODEV; in powernv_idle_probe()
382 /* Device tree can indicate more idle states */ in powernv_idle_probe()
388 return -ENODEV; in powernv_idle_probe()