170 lines
6.8 KiB
Plaintext
170 lines
6.8 KiB
Plaintext
* MSM Subsystem Power Manager (spm-v2)
|
|
|
|
S4 generation of MSMs have SPM hardware blocks to control the Application
|
|
Processor Sub-System power. These SPM blocks run individual state machine
|
|
to determine what the core (L2 or Krait/Scorpion) would do when the WFI
|
|
instruction is executed by the core. The SAW hardware block handles SPM and
|
|
AVS functionality for the cores.
|
|
|
|
The devicetree representation of the SPM block should be:
|
|
|
|
Required properties
|
|
|
|
- compatible: "qcom,spm-v2"
|
|
- reg: The physical address and the size of the SPM's memory mapped registers
|
|
- qcom,cpu: phandle for the CPU that the SPM block is attached to. This field
|
|
is required on only for SPMs that control the CPU. This field is not required
|
|
for SPMs that control L2/CCI/L3
|
|
- qcom,saw2-ver-reg: The location of the version register
|
|
- qcom,name: The name with which a SPM device is identified by the power
|
|
management code.
|
|
|
|
----------------------------------------------------
|
|
Non-PSCI targets should follow the rules shown below
|
|
----------------------------------------------------
|
|
Required properties for only Non-PSCI targets:
|
|
|
|
- qcom,saw2-cfg: SAW2 configuration register
|
|
- qcom,saw2-spm-ctl: The SPM control register
|
|
- qcom,saw2-spm-dly: Provides the values for the SPM delay command in the SPM
|
|
sequence
|
|
|
|
Optional properties for only Non-PSCI targets
|
|
- reg-names: Register names for the physical address required if spm device
|
|
has more than one physical addressed to be mapped. Allowed register
|
|
names are: "saw-base", "q2s", "hw-flush", "slpreq"
|
|
- qcom,saw2-avs-ctl: The AVS control register
|
|
- qcom,saw2-avs-hysterisis: The AVS hysterisis register to delay the AVS
|
|
controller requests
|
|
- qcom,vctl-timeout-us: The timeout value in us to wait for voltage to change
|
|
after sending the voltage command to the PMIC
|
|
- qcom,saw2-avs-limit: The AVS limit register
|
|
- qcom,saw2-avs-dly: The AVS delay register is used to specify the delay values
|
|
between AVS controller requests
|
|
- qcom,saw2-pmic-data0..7: Specify the pmic data value and the associated FTS
|
|
index to send the PMIC data to
|
|
- qcom,vctl-port: The PVC (PMIC Virtual Channel) port used for changing
|
|
voltage
|
|
- qcom,phase-port: The PVC port used for changing the number of phases
|
|
- qcom,pfm-port: The PVC port used for enabling PWM/PFM modes
|
|
- qcom,cpu-vctl-mask: Mask of cpus, whose voltage the spm device can control.
|
|
Depricated: Replaced with cpu-vctl-list when cpu phandles are available.
|
|
- qcom,cpu-vctl-list: List of cpu node phandles, whose voltage the spm device
|
|
can control.
|
|
- qcom,use-qchannel-for-pc: Boolean property to specify if qchannel should be
|
|
ignored when entering power collapse. If this property is set qchannel
|
|
will not be ignored in power collapse.
|
|
- qcom,supports-rpm-hs: Indicates that this SPM instance allow handshake with
|
|
RPM processor when executing the sleep command in the SPM sequence. Supported
|
|
only on SAW2 v3.0 and above.
|
|
- qcom,use-spm-clock-gating: This boolean property is used to indicate that
|
|
the SPM needs to be used for clock gating. Using the SPM for clock
|
|
gating would result in auto clock gating being disabled. Use this on
|
|
targets that do not support or do not use auto clock gating.
|
|
- qcom,use-qchannel-for-wfi: This boolean property is used to indicate
|
|
that the SPM gets triggerd by the qchannel and not by means of
|
|
wfi. So a wfe could trigger a spm for clock gating as well.
|
|
- modes: Lists all the available low power modes for the device
|
|
|
|
Second level properties for modes
|
|
|
|
Required properties (if modes node is available)
|
|
- qcom,label: Specifies the mode name such as:
|
|
qcom,saw2-spm-cmd-wfi: WFI mode
|
|
qcom,saw2-spm-cmd-ret: Retention mode
|
|
qcom,saw2-spm-cmd-spc: Standalone PC mode
|
|
qcom,saw2-spm-cmd-pc: Power Collapse mode
|
|
qcom,saw2-spm-cmd-gdhs: GDHS mode
|
|
- qcom,sequence: Specifies sequence for the low power mode
|
|
Optional properties
|
|
- qcom,pc_mode: Specifies pc_mode bit should be set in the SPM control register
|
|
- qcom,ret_mode: Specifies ret_mode bit should be set in the SPM control register
|
|
- qcom,spm_en: Specifies spm_en bit should be set in the SPM control register
|
|
- qcom,isar: Specifies isar bit should be set in the SPM control register
|
|
Specify this property only if SPM should retain its start address at
|
|
the end of the program.
|
|
- qcom,slp_cmd_mode: Specifies slp_cmd_mode bit should be set in SPM control register.
|
|
Adding this property results in SPM handshaking with RPM. Please remove
|
|
the RPM handshake command from the sleep sequence, replace that with
|
|
Sleep without RPM handshake command.
|
|
- qcom,event_sync: Specifies event_sync byte should be set in SPM control
|
|
register.
|
|
|
|
----------------------------------------------------
|
|
PSCI targets should follow the rules shown below
|
|
----------------------------------------------------
|
|
Optional properties for only PSCI targets:
|
|
|
|
- qcom,saw2-avs-ctl: The AVS control register
|
|
- qcom,saw2-avs-hysterisis: The AVS hysterisis register to delay the AVS
|
|
controller requests
|
|
- qcom,vctl-timeout-us: The timeout value in us to wait for voltage to change
|
|
after sending the voltage command to the PMIC
|
|
- qcom,saw2-avs-limit: The AVS limit register
|
|
- qcom,saw2-avs-dly: The AVS delay register is used to specify the delay values
|
|
between AVS controller requests
|
|
- qcom,vctl-port: The PVC (PMIC Virtual Channel) port used for changing
|
|
voltage
|
|
- qcom,phase-port: The PVC port used for changing the number of phases
|
|
- qcom,pfm-port: The PVC port used for enabling PWM/PFM modes
|
|
- qcom,cpu-vctl-list: List of cpu node phandles, whose voltage the spm device
|
|
can control.
|
|
|
|
|
|
Example 1:
|
|
qcom,spm@f9089000 {
|
|
compatible = "qcom,spm-v2";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
reg = <0xf9089000 0x1000>;
|
|
qcom,cpu = <&CPU0>;
|
|
qcom,saw2-ver-reg = <0xfd0>;
|
|
qcom,saw2-cfg = <0x1b>;
|
|
qcom,saw2-avs-ctl = <0>;
|
|
qcom,saw2-avs-hysteresis = <0>;
|
|
qcom,saw2-avs-limit = <0>;
|
|
qcom,saw2-avs-dly= <0>;
|
|
qcom,saw2-spm-dly= <0x20000400>;
|
|
qcom,saw2-spm-ctl = <0x1>;
|
|
qcom,cpu-vctl-list = <&CPU0 &CPU1 &CPU2 &CPU3>;
|
|
qcom,mode0 {
|
|
qcom,label = "qcom,saw2-spm-cmd-wfi";
|
|
qcom,sequence = [03 0b 0f];
|
|
qcom,spm_en;
|
|
};
|
|
|
|
qcom,mode1 {
|
|
qcom,label = "qcom,saw2-spm-cmd-spc";
|
|
qcom,sequence = [00 20 50 80 60 70 10 92
|
|
a0 b0 03 68 70 3b 92 a0 b0
|
|
82 2b 50 10 30 02 22 30 0f];
|
|
qcom,spm_en;
|
|
qcom,pc_mode;
|
|
};
|
|
|
|
qcom,mode2 {
|
|
qcom,label = "qcom,saw2-spm-cmd-pc";
|
|
qcom,sequence = [00 20 10 92 a0 b0 07 3b 92
|
|
a0 b0 82 10 30 02 22 30 0f];
|
|
qcom,spm_en;
|
|
qcom,pc_mode;
|
|
};
|
|
};
|
|
|
|
Example 2:
|
|
qcom,spm@9A10000 {
|
|
compatible = "qcom,spm-v2";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
reg = <0x9A10000 0x1000>;
|
|
qcom,name = "system-cbf"; /* CBF SAW */
|
|
qcom,saw2-ver-reg = <0xFD0>;
|
|
qcom,cpu-vctl-list = <&CPU0 &CPU1 &CPU2 &CPU3>;
|
|
qcom,vctl-timeout-us = <50>;
|
|
qcom,vctl-port = <0x0>;
|
|
qcom,phase-port = <0x1>;
|
|
qcom,saw2-avs-ctl = <0x1100>;
|
|
qcom,pfm-port = <0x2>;
|
|
};
|
|
|