Zephyr Power Management Ramesh Thomas OTC, Intel Zephyr is a - - PowerPoint PPT Presentation

zephyr power management
SMART_READER_LITE
LIVE PREVIEW

Zephyr Power Management Ramesh Thomas OTC, Intel Zephyr is a - - PowerPoint PPT Presentation

Zephyr Power Management Ramesh Thomas OTC, Intel Zephyr is a trademark of the Linux Foundation. *Other names and brands may be claimed as the property of others. Agenda Why Power Management? The core concepts behind Zephyr RTOS PM Power


slide-1
SLIDE 1

Zephyr™ Power Management

Ramesh Thomas OTC, Intel

Zephyr is a trademark of the Linux Foundation. *Other names and brands may be claimed as the property of others.

slide-2
SLIDE 2

Agenda

Why Power Management? The core concepts behind Zephyr RTOS PM Power Management Infrastructures Future direction

slide-3
SLIDE 3

Think Possible…

slide-4
SLIDE 4

Zephyr RTOS PM – Core Concepts

Multi architecture/board/SOC Designed for IoT/embedded Customizable for different needs Flexibility and variety of options Scalable design Follow open source process

slide-5
SLIDE 5

Zephyr RTOS components

(partial)

Application API Device Management Power Management Device Drivers Kernel HAL Peripherals UART SPI I2C Timers Boot ROM

slide-6
SLIDE 6

PM high level layout

SOC Interface Boot ROM HAL SOC PM Interface Application Thread 1 Thread 2 Thread 3 Kernel PM Subsystem Device Management

SHIM Device Drivers

slide-7
SLIDE 7

Zephyr RTOS PM Deep Dive

slide-8
SLIDE 8

Zephyr RTOS PM features

Event based kernel idling System power management Device power management

slide-9
SLIDE 9

First a quick intro to the scheduler…

slide-10
SLIDE 10

Kernel scheduling and idling

Priority based scheduling Threads wait on semaphore or yield Idle Thread scheduled when no other thread can run Idle Thread is lowest priority thread System Power Management happens in Idle Thread

Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Thread 6 Thread 7 Thread 8 Thread 9 Idle Thread

Equal Priority High Priority Low Priority

slide-11
SLIDE 11

Inside the Idle Thread

CPU Wait for event

Kernel scheduler gets invoked from ISR of timer or other event If no thread is ready to run, schedules Idle Thread again

Periodic mode timer ticks

slide-12
SLIDE 12

Event Based Idling

CPU Wait for event

Power saved by avoiding unnecessary wake events ISR turns periodic mode timer on again

Turn off periodic mode timer Set one shot timer

No ticks until a thread is ready to run

2 secs 5 secs 10 secs 15 secs

Ordered list of thread wait/timeout periods

slide-13
SLIDE 13

System Power Management

slide-14
SLIDE 14

Hooks into the Kernel Idle Thread

_sys_soc_suspend(idle time) Going to idle _sys_soc_resume() Notify low power state exit or wake event SOC implementation dependent Simple and intuitive When idle - save power When active - real-time performance

slide-15
SLIDE 15

Triggered from Idle Thread

CPU Wait for event Turn off periodic mode timer Call hook function _sys_soc_suspend(idle time) Handled?

Yes No

_sys_soc_suspend() sets wake event Wake -> ISR -> Periodic Mode On -> Scheduler

Set one shot timer

slide-16
SLIDE 16

Inside _sys_soc_suspend

slide-17
SLIDE 17

Quick look into HW PM features…

slide-18
SLIDE 18

Categories based on HW PM features

CPU Low Power State

CPU clock gated Peripherals active

SOC Deep Sleep

CPU power gated Selective RAM retention Most peripherals lose power

Different power savings Different wake latencies Different resume paths

CPU SRAM Internal Clocks Peripherals SPI I2C Timers …

slide-19
SLIDE 19

_sys_soc_suspend(<idle time>)

Setup wake event If short idle time

Any PM operation that takes less time Enter a CPU low power state

If long idle time

Save states of devices that will lose power Any PM operation that saves more power Enter SOC Deep Sleep

slide-20
SLIDE 20

_sys_soc_resume()

Deep Sleep wake notification

Depends on SOC specific implementation

Wake event notification

Optionally called from ISR of wake events Before Kernel schedules other tasks or process nested interrupts Call _sys_soc_disable_wake_event_notification() if not required

slide-21
SLIDE 21

Device Power Management

slide-22
SLIDE 22

Device Power States

Classified based on device state retention

DEVICE_PM_ACTIVE_STATE DEVICE_PM_LOW_POWER_STATE DEVICE_PM_SUSPEND_STATE DEVICE_PM_OFF_STATE

slide-23
SLIDE 23

Device Power Management Overview

Integrated with Device Management Drivers maintain per device power states Device APIs to set and get state Application, Driver or SOC interface can set states Multiple design options to manage device PM

Central – Only in _sys_soc_suspend() Distributed – By Applications, Drivers, SOC Interface.

slide-24
SLIDE 24

Device PM APIs

device_list_get(struct device **device_list, int *device_count) device_get_power_state(struct device *device, uint32_t *device_power_state) device_set_power_state(struct device *device, uint32_t device_power_state) device_busy_set(), device_busy_clear(), device_any_busy_check(), device_busy_check()

slide-25
SLIDE 25

Device Driver PM Interface

PM Control Function Control codes

DEVICE_PM_SET_POWER_STATE DEVICE_PM_GET_POWER_STATE

Part of Device Interface Access only through Device APIs

int (*device_pm_control)( struct device *device, uint32_t command, void *context); static int example_control_fn(…) { switch (ctrl_command) { case DEVICE_PM_SET_POWER_STATE: set state code case DEVICE_PM_GET_POWER_STATE: get state code } return 0; }

slide-26
SLIDE 26

Power Management Examples

slide-27
SLIDE 27

PM Example 1 (Distributed Device PM)

App UART SPI

SOC Interface

HW

Idle Thread

set_state SUSPEND set_state SUSPEND _sys_soc_suspend _sys_soc_suspend SOC Deep Sleep Yield Yield

slide-28
SLIDE 28

PM Example 2 (Central Device PM)

App UART SPI

SOC Interface

HW

Idle Thread

set_state SUSPEND set_state SUSPEND _sys_soc_suspend SOC Deep Sleep Resume set_state ACTIVE set_state ACTIVE Yield

slide-29
SLIDE 29

PM Example 3 (Flash on SPI)

App Flash SPI

set_state SUSPEND set_state SUSPEND set_state ACTIVE set_state ACTIVE

slide-30
SLIDE 30

Adding PM Support

Configure Board, SOC, CPU, Arch

(If not done already…)

Enable/Disable PM feature configs _sys_soc_suspend / _sys_soc_resume PM support in device drivers PM support in application

slide-31
SLIDE 31

Summary

slide-32
SLIDE 32

Future direction

New PM features derived from kernel updates

Tick-less kernel Different time unit options

Add ARC* and ARM* examples Distributed Device PM examples

*Other names and brands may be claimed as the property of others.

slide-33
SLIDE 33

Summary

Multi Arch, CPU, SOC, Board support Simple and Intuitive hook interface Versatile Device PM options Configurable, Scalable, Portable Open Source

slide-34
SLIDE 34

Questions