Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

Title: Power management demo


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>



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
    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