SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
MPU_Cx (where x = 0 or 1) changes power states only when the StandbyWFI signal is asserted. There is no signal coming from the MPU cores, or the MPU_CLUSTER to define in which power state MPU_Cx can go. Software must program such information by writing to the PM_CPUx_PWRSTCTRL[1:0] POWERSTATE bit field before executing the WFI instruction. Table 4-5 provides the software requirements before executing the WFI instruction, and the condition to return to RUN mode.
Low-Power State | Software Sequence Before Executing WFI | Wakeup (Transition Back to Run Mode) |
---|---|---|
WFI/ON Logic ON L1$ ON | Execute a Data Synchronization Barrier (DSB) instruction. | Managed locally to MPU_Cx upon one of the following sources:
|
WFI/INACT Logic ON L1$ ON | Execute a DSB instruction. | Managed locally by MPU_PRCM upon following source:
|
WFI/RETENTION Logic RET L1$ ON L1$ peripheral OFF |
| Managed locally by MPU_PRCM upon following source:
MPU_PRCM does not need to reset MPU_Cx. |
WFI/FORCED_OFF(1) Logic OFF L1$ OFF |
| Managed locally by MPU_PRCM upon following source:
MPU_PRCM must reset MPU_C1 to make it reboot and restore its context, including MPU_INTC. |
For the description of the Cortex-A15 CPU registers and the DSB/ISB instructions, see the Arm Cortex-A15 Technical Reference Manual (available at infocenter.arm.com/help/index.jsp).
The RETENTION low-power state is not natively supported by the MPU_CLUSTER. This mode is implemented with SR3-APG power-management technology. The MPU subsystem power-management hardware is designed to ensure that the system does not have an L1 cache coherency problem when putting both MPU cores in retention mode. In this mode, the MPU_Cx logic is in full retention with all memory content preserved by keeping the array of memories fully powered and the logic of the memory peripheries shut down. In slow wake-up mode, memories are put into retention to prevent more leakage.
In FORCED_OFF and RETENTION low-power states, the standby controller gates the clock to the MPU_CLUSTER by deasserting the CLKEN signal before signaling the MPU_PRCM to perform a power transition. In these low-power states, the MPU core can be wakened only by the MPU_PRCM. A number of important actions must be performed by software before entering such a state.
FORCED_OFF mode applies only to MPU_C1. In this mode, it is critically important for software to clear the SMP bit of the targeted MPU core to take that MPU core out of coherency and to prevent TLB, BTB, or instruction cache maintenance operations from other MPU core in the cluster being issued to this MPU core. The SMP bit is part of the Auxiliary Control Register (ACTLR); there is one ACTLR per MPU core. The ACTLR is a CP15 register. For more information about this register, see the Arm Cortex-A15 Technical Reference Manual (available at infocenter.arm.com/help/index.jsp).
A wakeup from FORCED_OFF low-power state must always happen through a MPU core (MPU_C1) reset so that the MPU core (MPU_C1) restores its state to the same level as before the power transition before handling the wake-up event itself (the interrupt). A wakeup from RETENTION low-power state does not need to happen through a MPU core reset because MPU core logics are fully retained.
The private peripheral interrupts (PPIs) cannot wake up an MPU core in INACT, RETENTION, or FORCED_OFF low-power state. Software-generated interrupts (SGI) cannot wake up an MPU core in the same low-power state. However, it is possible to work around the issue by applying the following method:
Table 4-6 gives details of the power state of the supported MPU_Cx and the corresponding values of the MPU_PRCM register.
Hardware Conditions | MPU_Cx Programming Model | Resulting MPU_Cx State | |||||
---|---|---|---|---|---|---|---|
StandbyWFI StandbyWFE | State of L2/Other MPU core | MPU_PRCM Power State PM_CPUx_PWRSTCTRL[1:0] POWERSTATE | MPU_PRCM Clock Transition Control CM_CPUx_CLKSTCTRL[1:0] CLKTRCTRL | Logic | L1 Cache | Arm Cortex-A15 Internal Clock | Power State at MPU_PRCM |
MPU_Cx running | Any | Any | Any | ON | ON | ON | ON |
MPU_Cx in WFE | Any | Any | Any | ON | ON | OFF | ON |
MPU_Cx in WFI | Any | Any | NO_SLEEP/SW_WKUP | ON | ON | OFF | ON |
MPU_Cx in WFI | Any | ON | HW_AUTO | ON | ON | OFF | ON |
MPU_C1 in WFI | Any | FORCED_OFF(1) | HW_AUTO | OFF | OFF | OFF | OFF |
MPU_Cx in WFI | != (IDLE/WFI/WFI) | Any | HW_AUTO | ON | ON | OFF | ON |
MPU_Cx in WFI | IDLE/WFI/WFI | INACT | HW_AUTO | ON | ON | OFF | INACT |
MPU_Cx in WFI | IDLE/WFI/WFI | RETENTION | HW_AUTO | SR3-APG/ ON(2) | ON/RETENTION(3) | OFF | CSWRET |
The PM_CPUx_PWRSTCTRL register is static over any power transition. That is, software programs it before executing the WFI instruction and does not change it until MPU_Cx is again in running mode. In other words, when MPU_Cx reaches a low-power state, it cannot move to another low-power state. It must be woken up to reach another low-power state. To wake up MPU_Cx, the user must:
Table 4-7 shows the available MPU_Cx power states in single and coherency mode. For coherency, software must ensure that both MPU cores are in the same power state.
MPU_C0 Power State | MPU_C1 Power State | Mode |
---|---|---|
Running/ON or WFI/ON | Running/ON or WFI/ON | SMP mode (coherent mode) |
WFI/INACT | WFI/INACT | |
WFI/CSWRET | WFI/CSWRET | |
Running/ON or WFI/ON | FORCED_OFF | Single mode (MPU_C1 is out of coherency) |
WFI/INACT | FORCED_OFF | |
WFI/CSWRET | FORCED_OFF |