[PATCH v5 0/7] QCOM 8074 cpuidle driver

Lina Iyer lina.iyer at linaro.org
Thu Sep 11 07:48:51 PDT 2014


On Thu, Sep 11 2014 at 00:55 -0600, Pramod Gurav wrote:
>Hi Lina,
>
>With your patchset on top of 3.17-rc4 with v9 of ARM generic idle states
>patches from Lorenzo I have tested cpuidle on dragonboard8974 with
>Linaro test suites. All testcases report pass. Also verified manually
>through sysfs to see changes in usage count and other details about each
>state on all cpus.
>
>So,
>Tested-by:  Pramod Gurav <pramod.gurav at smartplayin.com>
>
Thanks!
>I have a comment/observation only on name entry for each state which
>reflects only "cpu-idle-state-" as Lorenzo dt-idle driver limits
>CPUIDLE_NAME_LEN to 16.
>
Yes, Kevin pointed that out. I will address them in the next revision.

>Thanks
>Pramod.
>On Friday 05 September 2014 04:05 AM, Lina Iyer wrote:
>> Changes since v4:
>> [ https://www.mail-archive.com/linux-arm-msm@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@vger.kernel.org/msg10518.html ]
>>
>> Changes since v3:
>> [ https://www.mail-archive.com/linux-arm-msm@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@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@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 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]
>> 	|
>> 	------>	msm-pm.c [SoC Interface layer for QCOM chipsets]
>> 		|
>> 		------> spm-devices.c [SPM devices manager]
>> 		|	|
>> 		|	------>	spm.c [SPM h/w driver]
>> 		|
>> 		------> scm-boot.c [SCM interface layer]		
>> 			|
>> ------------------------|--------------------------
>> (EL)			Secure Monitor Code
>> 			|
>> 			|
>> 			wfi();
>> ------------------------|--------------------------
>> (HW)			[CPU] {clock gate}
>> 			|
>> 			-----> [SPM] {statemachine}
>> 			
>>
>> The patchset does the following -
>>
>> - Add new Secure Monitor flags to support warmboot of a quad core system.
>>
>> - Introduce the SPM driver to control power to the core. The SPM h/w IP works
>> in conjunction with the Krait CPU/L2. When the core executes WFI instruction,
>> the core is clockgated and the SPM state machine takes over and powers the core
>> down. An interrupt from GIC, resumes the SPM state machine which brings the cpu
>> out of the low power mode.
>>
>> - Add a SPM device manager to configure multiple SPM devices.
>>
>> - Add the device tree configuration for each of the SPM nodes. There is one for
>> each cpu. There is one for each cpu.
>>
>> - Introduce the SoC driver interface layer to configure SPM per the core's idle
>>  state. To power down the cpu core, the SPM h/w needs to be set up correctly
>> to power down the core, when the core executes WFI. Linux is expected to call
>> into Secure Monitor to power down the core. At reset, the core will start in
>> seure mode and will be returned back to Linux.
>>
>> - Add CPUIDLE driver for QCOM cpus. The cpuidle driver uses the SoC interface
>> layer to configure the SPM to allow Krait to be powered down. The cpuidle driver
>> is based on ARM idle-state framework for cpuidle drivers.
>>
>> - Provide device configuration for 8074 SoC. Current support is for WFI and
>> standalone power collapse, which powers only the core independent of the
>> other cores and caches.
>>
>> Thanks,
>> Lina
>>
>>
>>
>> Lina Iyer (7):
>>   msm: scm: Add SCM warmboot flags for quad core targets.
>>   qcom: spm: Add Subsystem Power Manager driver (SAW2)
>>   qcom: spm-devices: Add SPM device manager for the SoC
>>   arm: dts: qcom: Add SPM device bindings for 8974
>>   qcom: msm-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
>>
>>  .../bindings/arm/msm/qcom,idle-state.txt           |  72 ++++++++
>>  Documentation/devicetree/bindings/arm/msm/spm.txt  |  47 +++++
>>  arch/arm/boot/dts/qcom-msm8974-pm.dtsi             |  69 +++++++
>>  arch/arm/boot/dts/qcom-msm8974.dtsi                |  30 +++-
>>  drivers/cpuidle/Kconfig.arm                        |   7 +
>>  drivers/cpuidle/Makefile                           |   1 +
>>  drivers/cpuidle/cpuidle-qcom.c                     |  87 +++++++++
>>  drivers/soc/qcom/Kconfig                           |   8 +
>>  drivers/soc/qcom/Makefile                          |   1 +
>>  drivers/soc/qcom/msm-pm.c                          | 106 +++++++++++
>>  drivers/soc/qcom/spm-devices.c                     | 198 +++++++++++++++++++++
>>  drivers/soc/qcom/spm-drv.h                         |  69 +++++++
>>  drivers/soc/qcom/spm.c                             | 192 ++++++++++++++++++++
>>  include/soc/qcom/pm.h                              |  31 ++++
>>  include/soc/qcom/scm-boot.h                        |   2 +
>>  include/soc/qcom/spm.h                             |  38 ++++
>>  16 files changed, 954 insertions(+), 4 deletions(-)
>>  create mode 100644 Documentation/devicetree/bindings/arm/msm/qcom,idle-state.txt
>>  create mode 100644 Documentation/devicetree/bindings/arm/msm/spm.txt
>>  create mode 100644 arch/arm/boot/dts/qcom-msm8974-pm.dtsi
>>  create mode 100644 drivers/cpuidle/cpuidle-qcom.c
>>  create mode 100644 drivers/soc/qcom/msm-pm.c
>>  create mode 100644 drivers/soc/qcom/spm-devices.c
>>  create mode 100644 drivers/soc/qcom/spm-drv.h
>>  create mode 100644 drivers/soc/qcom/spm.c
>>  create mode 100644 include/soc/qcom/pm.h
>>  create mode 100644 include/soc/qcom/spm.h
>>



More information about the linux-arm-kernel mailing list