zephyr/samples/power/power_mgr
Ramesh Thomas 1af3a40b9e power_mgmt: Add Deep Sleep support in sample PM app
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>
2016-07-21 11:25:31 -07:00
..
src power_mgmt: Add Deep Sleep support in sample PM app 2016-07-21 11:25:31 -07:00
Makefile
README.txt power_mgmt: Add Deep Sleep support in sample PM app 2016-07-21 11:25:31 -07:00
prj.conf power_mgmt: Add Deep Sleep support in sample PM app 2016-07-21 11:25:31 -07:00
prj.mdef
testcase.ini

README.txt

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

...