2024-09-09 08:52:07 +00:00
|
|
|
* Low Power Management Levels
|
|
|
|
|
|
|
|
The application processor in MSM can do a variety of C-States for low power
|
2024-09-09 08:57:42 +00:00
|
|
|
management. The LPM module performs the System low power modes based on
|
|
|
|
the latency/residency information of the individual CPUs and clusters.
|
2024-09-09 08:52:07 +00:00
|
|
|
|
2024-09-09 08:57:42 +00:00
|
|
|
LPM-levels defines a hierarchy of low power modes that a cluster and
|
|
|
|
clusters/cpus within that cluster can enter. The bottom hierarchy level
|
|
|
|
represents the low power modes that a CPU can enter. The CPU low power nodes
|
|
|
|
are associated with a cluster that defines the low power modes that a cluster
|
|
|
|
can enter. For system involving a hierarchy of clusters, the cluster low power
|
|
|
|
modes can be contained within another cluster.
|
|
|
|
|
|
|
|
[Top Level Node]
|
|
|
|
Required properties:
|
2024-09-09 08:52:07 +00:00
|
|
|
|
|
|
|
- compatible: "qcom,lpm-levels"
|
2024-09-09 08:57:42 +00:00
|
|
|
|
|
|
|
[Node bindings for qcom,pm-cluster]
|
|
|
|
Required properties:
|
|
|
|
- reg - The numeric cluster id
|
|
|
|
- label: Identifies the cluster name. The name will be
|
|
|
|
used when reporting the stats for each low power mode.
|
|
|
|
- qcom,spm-device-names: List of SPM device names which control the
|
|
|
|
low power modes for this driver. The lpm driver uses the device name
|
|
|
|
to obtain a handle to the SPM driver that controls the cluster's low
|
|
|
|
power mode. This is only required if "qcom,use-psci" is not defined.
|
|
|
|
- qcom,default-level: The default low power level that a cluster is
|
|
|
|
programmed. The SPM of the corresponding device is configured at this
|
|
|
|
low power mode by default.
|
|
|
|
- qcom,cpu: List of CPU phandles to identify the CPUs associated with
|
|
|
|
this cluster. This property is required if and only if the cluster
|
|
|
|
node contains a qcom,pm-cpu node.
|
|
|
|
|
|
|
|
qcom,pm-cluster contains qcom,pm-cluster-level nodes which identify
|
|
|
|
the various low power modes that the cluster can enter. The
|
|
|
|
qcom,pm-cluster node should also include another cluster node or a cpu
|
|
|
|
node that defines their respective low power modes.
|
|
|
|
|
|
|
|
[Node bindings for qcom,pm-cluster-level]
|
|
|
|
Required properties:
|
|
|
|
- reg: The numeric cluster level id
|
|
|
|
- label: Name to identify the low power mode in stats
|
|
|
|
module.
|
|
|
|
- qcom,spm-<device-name>-mode: For each SPM device defined in
|
|
|
|
qcom,spm-devices-names, a corresponding entry identifying the low
|
|
|
|
power mode is expected. For example, the qcom,pm-cluster node contains
|
|
|
|
a SPM device by name "l2" then the cluster level should contain a
|
|
|
|
qcom,spm-l2-mode. When a cluster level is chosen ,the SPM device is
|
|
|
|
programmed with its
|
|
|
|
corresponding low power mode. The accepted values for this property
|
|
|
|
are:
|
|
|
|
- "active"
|
|
|
|
- "wfi"
|
|
|
|
- "retention"
|
|
|
|
- "gdhs"
|
|
|
|
- "pc"
|
|
|
|
- "fpc"
|
|
|
|
- qcom,min-child-idx: The minimum level that a child CPU should be in
|
|
|
|
before this level can be chosen. This property is required for all
|
|
|
|
non-default level.
|
|
|
|
- qcom,latency-us: The latency in handling the interrupt if this level
|
|
|
|
was chosen, in uSec
|
|
|
|
- qcom,ss-power: The steady state power expelled when the processor is
|
|
|
|
in this level in mWatts
|
|
|
|
- qcom,energy-overhead: The energy used up in entering and exiting
|
|
|
|
this level in mWatts.uSec
|
|
|
|
- qcom,time-overhead: The time spent in entering and exiting this
|
|
|
|
level in uS
|
|
|
|
Optional properties:
|
|
|
|
- qcom,notify-rpm: When set, the driver flushes the RPM sleep set and
|
|
|
|
configures the virtual MPM driver in prepration for a RPM assisted
|
|
|
|
sleep.
|
|
|
|
- qcom,last-level - When set, the cluster level is applied only when
|
|
|
|
there is 1 online core.
|
|
|
|
- qcom,disable-dynamic-int-routing: When set disables the dynamic
|
|
|
|
routing of rpm-smd and mpm interrupts to next wake up core.
|
|
|
|
- qcom,use-psci: This boolean property allows the LPM modules to
|
|
|
|
terminate in PSCI to configure SPM for low power modes.
|
|
|
|
- qcom,psci-mode-shift: The property is used to determine with bit
|
|
|
|
location of the cluster mode in the composite state ID used to define
|
|
|
|
cluster low power modes in PSCI v1.0. Required only if qcom,use-psci
|
|
|
|
is defined at the lpm-levels root node.
|
|
|
|
- qcom,psci-mode-mask: The property is used to determine with bit
|
|
|
|
mask of the cluster mode in the composite state ID used to define
|
|
|
|
cluster low power modes in PSCI v1.0. Required only if qcom,use-psci
|
|
|
|
is defined at the lpm-levels root node.
|
|
|
|
- qcom,psci-mode: ID to be passed into the PSCI firmware. Required
|
|
|
|
only if qcom,use-psci is defined at the lpm-levels root node.
|
|
|
|
- qcom,is-reset: This boolean property will tell whether
|
|
|
|
cluster level need power management notifications to be sent out
|
|
|
|
or not for the drivers to prepare for cluster collapse.
|
|
|
|
|
|
|
|
[Node bindings for qcom,pm-cpu]
|
|
|
|
qcom,pm-cpu contains the low power modes that a cpu could enter. Currently it
|
|
|
|
doesn't have any required properties and is a container for
|
|
|
|
qcom,pm-cpu-levels.
|
|
|
|
|
|
|
|
[Node bindings for qcom,pm-cpu-levels]
|
|
|
|
Required properties:
|
|
|
|
- reg: The numeric cpu level id
|
|
|
|
- qcom,spm-cpu-mode: The sleep mode of the processor, values for the
|
|
|
|
property are:
|
2024-09-09 08:52:07 +00:00
|
|
|
"wfi" - Wait for Interrupt
|
2024-09-09 08:57:42 +00:00
|
|
|
"retention" - Retention
|
2024-09-09 08:52:07 +00:00
|
|
|
"standalone_pc" - Standalone power collapse
|
|
|
|
"pc" - Power Collapse
|
2024-09-09 08:57:42 +00:00
|
|
|
- qcom,latency-us: The latency in handling the interrupt if this level
|
|
|
|
was chosen, in uSec
|
|
|
|
- qcom,ss-power: The steady state power expelled when the processor is
|
|
|
|
in this level in mWatts
|
|
|
|
- qcom,energy-overhead: The energy used up in entering and exiting
|
|
|
|
this level in mWatts.uSec
|
|
|
|
- qcom,time-overhead: The time spent in entering and exiting this
|
|
|
|
level in uS
|
|
|
|
- qcom,use-broadcast-timer: Indicates that the timer gets reset during
|
|
|
|
power collapse and the cpu relies on Broadcast timer for scheduled
|
|
|
|
wakeups. Required only for states where the CPUs internal timer state
|
|
|
|
is lost.
|
|
|
|
|
|
|
|
Optional properties:
|
|
|
|
- qcom,psci-mode-shift: Same as cluster level fields.
|
|
|
|
- qcom,psci-mode-mask: Same as cluster level fields.
|
|
|
|
- qcom,psci-cpu-mode: ID to be passed into PSCI firmware.
|
|
|
|
- qcom,jtag-save-restore: A boolean specifying jtag registers save and restore
|
|
|
|
required are not.
|
|
|
|
- qcom,is-reset: This boolean property maps to "power state" bit in PSCI
|
|
|
|
state_id configuration. This property will tell whether CPU get reset for
|
|
|
|
a particular LPM or not. This property will also be used to notify the
|
|
|
|
drivers in case of cpu reset.
|
|
|
|
|
|
|
|
[Example dts]
|
2024-09-09 08:52:07 +00:00
|
|
|
|
|
|
|
qcom,lpm-levels {
|
2024-09-09 08:57:42 +00:00
|
|
|
#address-cells = <1>;
|
|
|
|
#size-cells = <0>;
|
|
|
|
compatible = "qcom,lpm-levels";
|
|
|
|
|
|
|
|
qcom,pm-cluster@0 {
|
|
|
|
#address-cells = <1>;
|
|
|
|
#size-cells = <0>;
|
2024-09-09 08:52:07 +00:00
|
|
|
reg = <0>;
|
2024-09-09 08:57:42 +00:00
|
|
|
label = "system";
|
|
|
|
qcom,spm-device-names = "cci";
|
|
|
|
qcom,default-level = <0>;
|
|
|
|
|
|
|
|
qcom,pm-cluster-level@0{
|
|
|
|
reg = <0>;
|
|
|
|
label = "system-cci-retention";
|
|
|
|
qcom,spm-cci-mode = "retention";
|
|
|
|
qcom,latency-us = <100>;
|
|
|
|
qcom,ss-power = <1000>;
|
|
|
|
qcom,energy-overhead = <300000>;
|
|
|
|
qcom,time-overhead = <100>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cluster-level@2{
|
|
|
|
reg = <1>;
|
|
|
|
label = "system-cci-pc";
|
|
|
|
qcom,spm-cci-mode = "pc";
|
|
|
|
qcom,latency-us = <30000>;
|
|
|
|
qcom,ss-power = <83>;
|
|
|
|
qcom,energy-overhead = <2274420>;
|
|
|
|
qcom,time-overhead = <6605>;
|
|
|
|
qcom,min-child-idx = <1>;
|
|
|
|
qcom,notify-rpm;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cluster@0{
|
|
|
|
#address-cells = <1>;
|
|
|
|
#size-cells = <0>;
|
|
|
|
reg = <0>;
|
|
|
|
label = "a53";
|
|
|
|
qcom,spm-device-names = "l2";
|
|
|
|
qcom,default-level=<0>;
|
|
|
|
qcom,cpu = <&CPU0 &CPU1 &CPU2 &CPU3>;
|
|
|
|
|
|
|
|
qcom,pm-cluster-level@0{
|
|
|
|
reg = <0>;
|
|
|
|
label = "a53-l2-retention";
|
|
|
|
qcom,spm-l2-mode = "retention";
|
|
|
|
qcom,latency-us = <100>;
|
|
|
|
qcom,ss-power = <1000>;
|
|
|
|
qcom,energy-overhead = <300000>;
|
|
|
|
qcom,time-overhead = <100>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cluster-level@1{
|
|
|
|
reg = <1>;
|
|
|
|
label = "a53-l2-pc";
|
|
|
|
qcom,spm-l2-mode = "pc";
|
|
|
|
qcom,latency-us = <30000>;
|
|
|
|
qcom,ss-power = <83>;
|
|
|
|
qcom,energy-overhead = <2274420>;
|
|
|
|
qcom,time-overhead = <6605>;
|
|
|
|
qcom,min-child-idx = <3>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cpu {
|
|
|
|
#address-cells = <1>;
|
|
|
|
#size-cells = <0>;
|
|
|
|
qcom,pm-cpu-level@0 {
|
|
|
|
reg = <0>;
|
|
|
|
qcom,spm-cpu-mode = "wfi";
|
|
|
|
qcom,latency-us = <1>;
|
|
|
|
qcom,ss-power = <715>;
|
|
|
|
qcom,energy-overhead = <17700>;
|
|
|
|
qcom,time-overhead = <2>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cpu-level@1 {
|
|
|
|
reg = <1>;
|
|
|
|
qcom,spm-cpu-mode = "retention";
|
|
|
|
qcom,latency-us = <35>;
|
|
|
|
qcom,ss-power = <542>;
|
|
|
|
qcom,energy-overhead = <34920>;
|
|
|
|
qcom,time-overhead = <40>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cpu-level@2 {
|
|
|
|
reg = <2>;
|
|
|
|
qcom,spm-cpu-mode = "standalone_pc";
|
|
|
|
qcom,latency-us = <300>;
|
|
|
|
qcom,ss-power = <476>;
|
|
|
|
qcom,energy-overhead = <225300>;
|
|
|
|
qcom,time-overhead = <350>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cpu-level@3 {
|
|
|
|
reg = <3>;
|
|
|
|
qcom,spm-cpu-mode = "pc";
|
|
|
|
qcom,latency-us = <500>;
|
|
|
|
qcom,ss-power = <163>;
|
|
|
|
qcom,energy-overhead = <577736>;
|
|
|
|
qcom,time-overhead = <1000>;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cluster@1{
|
|
|
|
#address-cells = <1>;
|
|
|
|
#size-cells = <0>;
|
|
|
|
reg = <1>;
|
|
|
|
label = "a57";
|
|
|
|
qcom,spm-device-names = "l2";
|
|
|
|
qcom,default-level=<0>;
|
|
|
|
qcom,cpu = <&CPU4 &CPU5 &CPU6 &CPU7>;
|
|
|
|
|
|
|
|
qcom,pm-cluster-level@0{
|
|
|
|
reg = <0>;
|
|
|
|
label = "a57-l2-retention";
|
|
|
|
qcom,spm-l2-mode = "retention";
|
|
|
|
qcom,latency-us = <100>;
|
|
|
|
qcom,ss-power = <1000>;
|
|
|
|
qcom,energy-overhead = <300000>;
|
|
|
|
qcom,time-overhead = <100>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cluster-level@2{
|
|
|
|
reg = <1>;
|
|
|
|
label = "a57-l2-pc";
|
|
|
|
qcom,spm-l2-mode = "pc";
|
|
|
|
qcom,latency-us = <30000>;
|
|
|
|
qcom,ss-power = <83>;
|
|
|
|
qcom,energy-overhead = <2274420>;
|
|
|
|
qcom,time-overhead = <6605>;
|
|
|
|
qcom,min-child-idx = <3>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cpu {
|
|
|
|
#address-cells = <1>;
|
|
|
|
#size-cells = <0>;
|
|
|
|
qcom,pm-cpu-level@0 {
|
|
|
|
reg = <0>;
|
|
|
|
qcom,spm-cpu-mode = "wfi";
|
|
|
|
qcom,latency-us = <1>;
|
|
|
|
qcom,ss-power = <715>;
|
|
|
|
qcom,energy-overhead = <17700>;
|
|
|
|
qcom,time-overhead = <2>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cpu-level@1 {
|
|
|
|
reg = <1>;
|
|
|
|
qcom,spm-cpu-mode = "retention";
|
|
|
|
qcom,latency-us = <35>;
|
|
|
|
qcom,ss-power = <542>;
|
|
|
|
qcom,energy-overhead = <34920>;
|
|
|
|
qcom,time-overhead = <40>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cpu-level@2 {
|
|
|
|
reg = <2>;
|
|
|
|
qcom,spm-cpu-mode = "standalone_pc";
|
|
|
|
qcom,latency-us = <300>;
|
|
|
|
qcom,ss-power = <476>;
|
|
|
|
qcom,energy-overhead = <225300>;
|
|
|
|
qcom,time-overhead = <350>;
|
|
|
|
};
|
|
|
|
|
|
|
|
qcom,pm-cpu-level@3 {
|
|
|
|
reg = <3>;
|
|
|
|
qcom,spm-cpu-mode = "pc";
|
|
|
|
qcom,latency-us = <500>;
|
|
|
|
qcom,ss-power = <163>;
|
|
|
|
qcom,energy-overhead = <577736>;
|
|
|
|
qcom,time-overhead = <1000>;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2024-09-09 08:52:07 +00:00
|
|
|
};
|
2024-09-09 08:57:42 +00:00
|
|
|
|
|
|
|
|
2024-09-09 08:52:07 +00:00
|
|
|
};
|