[PATCH v7 0/7] QCOM 8974 and 8084 cpuidle driver

Lina Iyer
2014-09-29T15:05:04Z

On Mon, Sep 29 2014 at 06:18 -0600, Pramod Gurav wrote:
>Hi Lina,
>
>Thanks for the patches. Tested these patches on my Dragonboard APQ8074
>and with cpuidle tests from Linaro. They all pass.
>
>And the proper names of the cpuidle state (wfi and spc) are also
>reflecting in sysfs.
>
>Tested-by: pramod.gurav at smartplayin.com.
>
Thanks.

>Thanks
>Pramod
>On Saturday 27 September 2014 06:28 AM, Lina Iyer wrote:
>> Changes since v6:
>> [ https://www.mail-archive.com/linux-arm-msm at vger.kernel.org/msg11012.html ]
>> - SPM device nodes merged with existing SAW DT nodes
>> - SPM register information is handled within the driver
>> - Clean up from using 'msm' to 'qcom'
>> - Shorten some enumerations as well
>> - Review comments from v6 addressed
>> - New: Support for 8084 SoC
>> - Not tested. I do not have a board with this SoC, but the SPM
>> configuration should be identical for WFI and SPC
>>
>> Changes since v5:
>> [ https://www.mail-archive.com/linux-arm-msm at vger.kernel.org/msg10559.html ]
>> - Merge spm-devices.c and spm.c into one file and one patch
>> - Simplify implementation of the driver.
>> - Update documentation mapping the DT properties with corresponding
>> SPM register information.
>> - Removed scm-boot changes for quad core warmboot, its has been pulled in.
>>
>> Changes since v4:
>> [ https://www.mail-archive.com/linux-arm-msm at vger.kernel.org/msg10327.html ]
>> - Update to the v8 of ARM generic idle states patches
>> - Use platform device model for cpuidle-qcom
>> - Clean up msm-pm.c to remove unnecessary include files and functions
>> - Update commit text and documentation for all idle states
>> - Remove scm-boot relocate patch from this series, submitted earlier
>> [ https://www.mail-archive.com/linux-arm-msm at vger.kernel.org/msg10518.html ]
>>
>> Changes since v3:
>> [ https://www.mail-archive.com/linux-arm-msm at vger.kernel.org/msg10288.html ]
>> - Fix CONFIG_QCOM_PM Kconfig as bool
>> - More clean ups in spm.c and spm-devices.c
>> - Removed and re-organized data structures to make initialization simple
>> - Remove export of sequence flush functions
>> - Updated commit text
>> - Comments for use of barriers.
>> - Rebase on top of 3.17-rc1
>>
>> Changes since v2:
>> [ https://www.mail-archive.com/linux-arm-msm at vger.kernel.org/msg10148.html ]
>> - Prune all the drivers to support basic WFI and power down cpuidle
>> functionality. Remove debug code.
>> - Integrate KConfig changes into the drivers' patches.
>> - Use Lorenzo's ARM idle-states patches as the basis for reading cpuidle
>> c-states from DT.
>> [ http://marc.info/?l=linux-pm&m=140794514812383&w=2 ]
>> - Incorporate review comments
>> - Rebase on top of 3.16
>>
>> Changes since v1/RFC:
>> [ https://www.mail-archive.com/linux-arm-msm at vger.kernel.org/msg10065.html ]
>> - Remove hotplug from the patch series. Will submit it separately.
>> - Fix SPM drivers per the review comments
>> - Modify patch sequence to compile SPM drivers independent of msm-pm, so as to
>> allow wfi() calls to use SPM even without SoC interface driver.
>>
>> 8074/8084 like any ARM SoC can do architectural clock gating, that helps save
>> on power, but not enough of leakage power. Leakage power of the SoC can be
>> further reduced by turning off power to the core. To aid this, every core (cpu
>> and L2) is accompanied by a Sub-system Power Manager (SPM), that can be
>> configured to indicate the low power mode, the core would be put into and the
>> SPM programs the peripheral h/w accordingly to enter low power and turn off the
>> power rail to the core.
>>
>> The idle invocation hierarchy -
>>
>> CPUIDLE
>> |
>> cpuidle-qcom.c [CPUIdle driver]
>> |
>> ------> pm.c [SoC Interface layer for QCOM chipsets]
>> |
>> ------> spm.c [SPM driver]
>> |
>> ------> scm-boot.c [SCM interface layer]
>> |
>> ------------------------|--------------------------
>> (EL) Secure Monitor Code
>> |
>> |
>> wfi();
>> ------------------------|--------------------------
>> (HW) [CPU] {clock gate}
>> |
>> -----> [SPM] {statemachine}
>>
>>
>> The patchset does the following -
>>
>> - Introduce the SPM driver to control power to the core
>>
>> - Add device bindings for 8974 CPU SPM devices
>>
>> - Add device bindings for 8084 CPU SPM devices
>>
>> - Introduce the SoC interface layer to configure SPM per the core's idle state.
>>
>> - Add CPUIDLE driver for QCOM cpus, using ARM generic idle state definitions.
>>
>> - Add device bindings for 8974 idle-states - WFI and SPC
>>
>> - Add device bindings for 8084 idle-states - WFI and SPC
>>
>> Thanks,
>> Lina
>>
>>
>>
>> Lina Iyer (7):
>> qcom: spm: Add Subsystem Power Manager driver
>> arm: dts: qcom: Add SPM device bindings for 8974
>> arm: dts: qcom: Add SPM device bindings for 8084
>> qcom: pm: Add cpu low power mode functions
>> qcom: cpuidle: Add cpuidle driver for QCOM cpus
>> arm: dts: qcom: Add idle states device nodes for 8974
>> arm: dts: qcom: Add idle states device nodes for 8084
>>
>> .../bindings/arm/msm/qcom,idle-state.txt | 72 +++++++
>> .../devicetree/bindings/arm/msm/qcom,saw2.txt | 10 +-
>> arch/arm/boot/dts/qcom-apq8084.dtsi | 46 ++++-
>> arch/arm/boot/dts/qcom-msm8974.dtsi | 46 ++++-
>> drivers/cpuidle/Kconfig.arm | 7 +
>> drivers/cpuidle/Makefile | 1 +
>> drivers/cpuidle/cpuidle-qcom.c | 89 +++++++++
>> drivers/soc/qcom/Kconfig | 8 +
>> drivers/soc/qcom/Makefile | 1 +
>> drivers/soc/qcom/pm.c | 109 +++++++++++
>> drivers/soc/qcom/spm.c | 216 +++++++++++++++++++++
>> include/soc/qcom/pm.h | 26 +++
>> include/soc/qcom/spm.h | 35 ++++
>> 13 files changed, 658 insertions(+), 8 deletions(-)
>> create mode 100644 Documentation/devicetree/bindings/arm/msm/qcom,idle-state.txt
>> create mode 100644 drivers/cpuidle/cpuidle-qcom.c
>> create mode 100644 drivers/soc/qcom/pm.c
>> create mode 100644 drivers/soc/qcom/spm.c
>> create mode 100644 include/soc/qcom/pm.h
>> create mode 100644 include/soc/qcom/spm.h
>>