mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-07 03:22:30 +00:00
Added changes to enhance device suspend/resume involving core devices used by OS and app. Updated with Deep Sleep power policy usage example. Moved the arch/soc dependent code to soc/arch dependent areas in Zephyr in a separate patch. This app now uses api that abstracts the soc/arch details in handling power states. Jira: ZEP-511 Change-Id: I3b4eb0be973027dbf9bd046e16836f7863eee46e Signed-off-by: Ramesh Thomas <ramesh.thomas@intel.com> |
||
---|---|---|
.. | ||
src | ||
Makefile | ||
prj.conf | ||
prj.mdef | ||
README.txt | ||
testcase.ini |
Title: Power management demo Description: A sample implementation of a power manager app that uses the zephyr power management infrastructure. This app will cycle through the various power schemes at every call to _sys_soc_suspend() hook function. It will cycle through following policies 1. Low Power State (LPS) - puts the CPU in C2 state 2. Device suspend only - demonstrates hooks into kernel idle entry and exit that can be used to only suspend devices without CPU or SOC PM operations. 3. Deep Sleep - demonstrates invoking suspend/resume handlers of devices to save device states and switching to deep sleep state. 4. No-op - no operation and letting kernel do its idle This application runs on quark se boards. When started, the app waits for a toggle of GPIO pin 16. GPIO Pin 16 is DIO 8 in arduino_101 and DIO 4 in quark_se_devboard. Toggle the GPIO pin in the following sequence:- 1) Start connected to GND during power on or reset. 2) Disconnect from GND and connect to 3.3V 3) Disconnect from 3.3V. Test should start now. Known issues: The test uses RTC to wake it up from deep sleep. After several iterations, the RTC might fail to fire an alarm or the alarm is missed. It appears to be a timing issue with using RTC for his purpose. If this happens, the app would be unable to wake up from deep sleep and would need a reset. -------------------------------------------------------------------------------- Building and Running Project: This application is architecture and SoC specific. It is written for x86 architecture and uses features specific to quark_se platforms. This is a microkernel only project since the zephyr power management infrastructure currently is only microkernel idle based. In future, when nanokernel idle is supported, a separate nanokernel app would be created. make BOARD=<quark_se board> -------------------------------------------------------------------------------- Troubleshooting: Problems caused by out-dated project information can be addressed by issuing one of the following commands then rebuilding the project: make clean # discard results of previous builds # but keep existing configuration info or make pristine # discard results of previous builds # and restore pre-defined configuration info -------------------------------------------------------------------------------- Sample Output: Power Management Demo Toggle gpio pin 16 to start test PM test started Low power state policy entry! Low power state policy exit! Total Elapsed From Suspend To Resume = 163869 RTC Cycles Device suspend only policy entry! Device suspend only policy exit! Total Elapsed From Suspend To Resume = 163868 RTC Cycles Deep sleep policy entry! Wake from Deep Sleep! Deep sleep policy exit! Total Elapsed From Suspend To Resume = 163986 RTC Cycles Deep Sleep wake up event handler ...