4.6. Android Low Power Support

This application note contains steps to enable low power support in BSP.

Supported low power mode:

  1. Suspend to RAM (S2R): All power domains are off except for wake-up domain that has wake-up co-processor (DM R5) running. DDR is in self refresh.

4.6.1. Enable Suspend/Resume support

  1. At Android prompt, using RTC as wake-up source, test S2R using following command:

    console:/ $ su
    console:/ # rtcwake -s 10 -m mem
    wakeup using "mem" from /dev/rtc0 at Mon Feb 27 20:47:02 2023
    [  171.729145] PM: suspend entry (deep)
    [  171.737476] Filesystems sync: 0.004 seconds
    [  171.742214] Freezing user space processes ... (elapsed 0.004 seconds) done.
    [  171.754087] OOM killer disabled.
    [  171.757326] Freezing remaining freezable tasks ... (elapsed 0.003 seconds) done.
    [  171.784455] android_work: sent uevent USB_STATE=DISCONNECTED
    [  171.961454] Disabling non-boot CPUs ...
    [  171.970763] psci: CPU1 killed (polled 4 ms)
    [  171.993689] psci: CPU2 killed (polled 0 ms)
    [  172.014894] psci: CPU3 killed (polled 4 ms)
    [I/TC: Secondary CPU 1 initializing
    I/TC: Secondary CPU 1 switching to normal world boot
    I/TC: Secondary CPU 2 initializing
    I/TC: Secondary CPU 2 switching to normal world boot
    I/T[  200.035482] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 19
    C: Secondary CPU 3 initializing
    I/TC: Secondary CPU 3 switching to normal world boot
    [  200.067533] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL)
    [  200.076971] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rgmii-rxid link mode
    [  200.103015] am65-cpsw-nuss 8000000.ethernet eth1: PHY [8000f00.mdio:01] driver [TI DP83867] (irq=POLL)
    [  200.112422] am65-cpsw-nuss 8000000.ethernet eth1: configuring for phy/rgmii-rxid link mode
    [  200.454835] OOM killer enabled.
    [  200.457993] Restarting tasks ...
    [  200.505711] android_work: sent uevent USB_STATE=CONNECTED
    [  200.527147] dwc3 31000000.usb: request 0000000000000000 was not queued to ep0out
    [  200.687139] done.
    [  200.689205] Resume caused by IRQ 15, 2b1f0000.rtc
    [  200.701243] read descriptors
    [  200.705646] read strings
    [  200.711041] android_work: sent uevent USB_STATE=DISCONNECTED
    [  200.734919] PM: suspend exit
    console:/ # [  201.555258] android_work: sent uevent USB_STATE=CONNECTED
    [  201.595880] android_work: sent uevent USB_STATE=CONFIGURED
    console:/ $
    

This puts system to sleep for 10s and then wakes it up via RTC interrupt.