|
| 1 | +.. _lpm_modes_socoff: |
| 2 | + |
| 3 | +############### |
| 4 | +Low power modes |
| 5 | +############### |
| 6 | + |
| 7 | +******** |
| 8 | +Overview |
| 9 | +******** |
| 10 | + |
| 11 | +The following sections describe a high-level description of the different low power modes (LPM) supported on |__PART_FAMILY_NAME__| SoC (System on Chip). |
| 12 | +TI EVMs (Evaluation Modules) validate supported low power modes. Each mode needs evaluation based on power consumption and latency (the time it takes to wake-up to Active mode) requirements. |
| 13 | +There is a tradeoff between power and latency based on the mode. Users must select the appropriate low power mode at build time to fit the needs of the application. The default mode in the SDK is SoC off. |
| 14 | + |
| 15 | +In SDK offering, following low power modes are supported: |
| 16 | + |
| 17 | +#. SoC off |
| 18 | +#. I/O Only Plus DDR |
| 19 | + |
| 20 | +******* |
| 21 | +SoC off |
| 22 | +******* |
| 23 | + |
| 24 | +In SoC off low power mode, DDR retains partial software context (Mainly HLOS - High Level Operating System, Linux in this case) powering off the rest of SoC. This can save a significant amount of boot time, because it does not reinitialize whole kernel as it is already present in DDR. |
| 25 | + |
| 26 | +The benefits of using SoC off in embedded devices: |
| 27 | + |
| 28 | +#. Faster wake-up: Devices can wake-up from this low-power state much faster than |
| 29 | + a complete power cycle. |
| 30 | +#. Better efficiency: This mode can help to improve the efficiency of embedded devices by |
| 31 | + reducing the amount of time that the processor is idle. This is because we can keep the processor in a low-power state when it is not needed. |
| 32 | + |
| 33 | +To enter SoC off, use the following command: |
| 34 | + |
| 35 | + .. code-block:: console |
| 36 | +
|
| 37 | + root@<machine>-evm:~# echo mem > /sys/power/state |
| 38 | + [18.380346] PM: suspend entry (deep) |
| 39 | + [18.576999] Filesystems sync: 0.193 seconds |
| 40 | + [18.587643] Freezing user space processes |
| 41 | + [18.593191] Freezing user space processes completed (elapsed 0.001 seconds) |
| 42 | + [18.600179] OOM killer disabled. |
| 43 | + [18.603395] Freezing remaining freezable tasks |
| 44 | + [18.608964] Freezing remaining freezable tasks completed (elapsed 0.001 seconds) |
| 45 | + [18.616364] printk: Suspending console(s) (use no_console_suspend to debug) |
| 46 | +
|
| 47 | +This indicates that Linux has finished its suspend sequence. |
| 48 | + |
| 49 | +To exit from SoC off, |
| 50 | + |
| 51 | +.. ifconfig:: CONFIG_part_variant in ('J7200') |
| 52 | + |
| 53 | + Press SW12 push button on J7200 evm. |
| 54 | + |
| 55 | +.. ifconfig:: CONFIG_part_variant in ('J784S4') |
| 56 | + |
| 57 | + Press SW15 push button on J784S4 evm. |
| 58 | + |
| 59 | + |
| 60 | +***************** |
| 61 | +I/O only Plus DDR |
| 62 | +***************** |
| 63 | + |
| 64 | +In I/O only plus DDR, only the I/O pins remain active while the system turns off the rest of SoC. |
| 65 | + |
| 66 | +#. Low power consumption: IO Only Plus DDR mode can save a significant amount of power, especially in battery-powered |
| 67 | + devices. DDR is in self-refresh and the system turns off the rest of the SoC, except for the I/O pins. |
| 68 | +#. Better efficiency: I/O Only Plus DDR mode can help to improve the efficiency of embedded devices by reducing |
| 69 | + the amount of time that the processor is idle. This is because we can keep the processor in a low-power state when it is not needed. |
| 70 | +#. Respond to external wake-up sources: This allows the system to still respond to external events, while it is in a low-power state and wake-up faster improving boot time. |
| 71 | + |
| 72 | + |
| 73 | +.. ifconfig:: CONFIG_part_variant in ('J7200') |
| 74 | + |
| 75 | + To enter I/O only Plus DDR mode, Enable edge sensitive wake-up for MCAN1_RX pin by writing to PADCONFIG_11 (0x0011C02C) |
| 76 | + |
| 77 | + .. code-block:: console |
| 78 | +
|
| 79 | + # devmem2 0x0011C02C w 0x20050000 |
| 80 | +
|
| 81 | +.. ifconfig:: CONFIG_part_variant in ('J784S4') |
| 82 | + |
| 83 | + To enter I/O only Plus DDR mode, Enable level sensitive wake-up for MCU_MCAN0_RX pin by writing to WKUP_PADCONFIG_47 (at address 0x4301C0BC) |
| 84 | + |
| 85 | + .. code-block:: console |
| 86 | +
|
| 87 | + # devmem2 0x4301C0BC w 0x20050180 |
| 88 | +
|
| 89 | +
|
| 90 | +.. code-block:: console |
| 91 | +
|
| 92 | + root@<machine>-evm:~# echo mem > /sys/power/state |
| 93 | + [18.380346] PM: suspend entry (deep) |
| 94 | + [18.576999] Filesystems sync: 0.193 seconds |
| 95 | + [18.587643] Freezing user space processes |
| 96 | + [18.593191] Freezing user space processes completed (elapsed 0.001 seconds) |
| 97 | + [18.600179] OOM killer disabled. |
| 98 | + [18.603395] Freezing remaining freezable tasks |
| 99 | + [18.608964] Freezing remaining freezable tasks completed (elapsed 0.001 seconds) |
| 100 | + [18.616364] printk: Suspending console(s) (use no_console_suspend to debug) |
| 101 | +
|
| 102 | +To exit from I/O only Plus DDR mode, |
| 103 | + |
| 104 | +.. ifconfig:: CONFIG_part_variant in ('J7200') |
| 105 | + |
| 106 | + Press SW1 push button on |__PART_FAMILY_NAME__| SOM |
| 107 | + |
| 108 | +.. ifconfig:: CONFIG_part_variant in ('J784S4') |
| 109 | + |
| 110 | + On the |__PART_FAMILY_NAME__| EVM, the second pin-out of J33 is MCU_MCAN0_RX and it connects directly to the SoC. |
| 111 | + A voltage of 3.3V should be applied on that pin to wake it up from low power. |
| 112 | + |
| 113 | + |
| 114 | +Resume flow, |
| 115 | + |
| 116 | +.. code-block:: console |
| 117 | +
|
| 118 | + U-Boot SPL 2025.01-00676-g0373244c939d (Oct 23 2025 - 18:28:04 +0530) |
| 119 | + SYSFW ABI: 4.0 (firmware rev 0x000b '11.2.0-6-ge1d0d+ (Fancy Rat)') |
| 120 | + Trying to boot from MMC2 |
| 121 | + Starting ATF on ARM64 core... |
| 122 | +
|
| 123 | + [ 41.242486] Enabling non-boot CPUs ... |
| 124 | + I/TC: Secondary CPU 1 initializing |
| 125 | + I/TC: Secondary CPU 1 switching to normal world boot |
| 126 | + [ 41.265404] Detected PIPT I-cache on CPU1 |
| 127 | + [ 41.269427] GICv3: CPU1: found redistributor 1 region 0:0x0000000001920000 |
| 128 | + [ 41.276323] CPU1: Booted secondary processor 0x0000000001 [0x411fd080] |
| 129 | + [ 41.283475] CPU1 is up |
| 130 | + [ 41.305953] am65-cpsw-nuss 46000000.ethernet: set new flow-id-base 48 |
| 131 | + [ 41.323544] am65-cpsw-nuss 46000000.ethernet eth0: PHY [46000f00.mdio:00] driver [TI DP83867] (irq=POLL) |
| 132 | + [ 41.333027] am65-cpsw-nuss 46000000.ethernet eth0: configuring for phy/rgmii-rxid link mode |
| 133 | + [ 41.343885] OOM killer enabled. |
| 134 | + [ 41.347048] Restarting tasks ... done. |
| 135 | + [ 41.353184] random: crng reseeded on system resumption |
| 136 | + [ 41.359868] platform 41000000.r5f: R5F core may have been powered on by a different host, programmed state (0) != actual state (1) |
| 137 | + [ 41.371848] platform 41000000.r5f: configured R5F for IPC-only mode |
| 138 | + [ 41.378136] remoteproc remoteproc0: attaching to 41000000.r5f |
| 139 | + [ 41.384636] rproc-virtio rproc-virtio.10.auto: assigned reserved memory node r5f-dma-memory@a0000000 |
| 140 | + [ 41.395697] virtio_rpmsg_bus virtio0: rpmsg host is online |
| 141 | + [ 41.401350] rproc-virtio rproc-virtio.10.auto: registered virtio0 (type 7) |
| 142 | + [ 41.408925] remoteproc remoteproc0: remote processor 41000000.r5f is now attached |
| 143 | + [ 41.416506] PM: suspend exit |
| 144 | + root@<machine>-evm:~# |
| 145 | + root@<machine>-evm:~# |
0 commit comments