[RFC 0/6] Illustration of using domain-idle-states for CPU idle states
From: Brendan Jackman <hidden>
Date: 2016-08-24 13:48:16
Also in:
linux-arm-msm
Hi,
I've proposed before that, in order to avoid splitting idle state information
between cpu-idle-states (or a hypothetical device-idle-states for devices) and
domain-idle-states, we use domain-idle-states for everything. If a device or CPU
has an idle state, we declare that it's in a power (sub)domain of its own, and
add the idle state as a property of that (sub)domain.
I'm just posting these patches to illustrate the idea. With these patches,
cpu-idle-states is totally ignored when a cpu node has a power-domains property
and instead the power-domains tree is walked to find states. The states are
linearised under the assumption that no parent domain can enter an idle state
until its children are in their deepest possible state.
This _doesn't_ include OSI suspend so not much of the work is done. In order to
extend this for OSI suspend, we'd need to detect whether OSI is supported by the
FW (as in Lina's patch [1]). If it is not supported, we'd add all the states to
cpuidle as in these patches. If it _is_, we'd add only the CPU-level states to
cpuidle, and the remaining states to the CPU PM domains. I'm not clear on how
that would be architected so my next step is to investigate that.
[1] drivers: firmware: psci: Allow OS Initiated suspend mode
https://patchwork.kernel.org/patch/9264543/
Brendan Jackman (6):
These three are just awkward implementation details for the proof-of-concept:
cpuidle: Rename cpuidle_get_{cpu->dev}_driver
cpuidle: Add public funcion to get driver from CPU index
cpuidle: Add device_node pointer in cpuidle_state
This is the important one that demonstrates the behaviour I'm talking about:
cpuidle: dt: Add support for reading states from power domains
These two illustrate how the DT would look with this model; ARM Juno r0 is the
only platform I have for the moment.
arm64: dts: Add Juno r0 CPU power domain tree
arm64: dts: Add domain-idle-states for Juno r0 power domains
arch/arm64/boot/dts/arm/juno.dts | 61 +++++++++++
drivers/cpuidle/cpuidle.c | 10 +-
drivers/cpuidle/driver.c | 22 ++--
drivers/cpuidle/dt_idle_states.c | 220 ++++++++++++++++++++++++++++++++-------
drivers/cpuidle/sysfs.c | 6 +-
drivers/firmware/psci.c | 38 +++----
include/linux/cpuidle.h | 23 ++--
kernel/sched/idle.c | 2 +-
8 files changed, 297 insertions(+), 85 deletions(-)
--
2.9.3
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html