A processing unit can be a cluster of CPUs. For Versal devices, the APU is a dual-core Arm Cortex-A72 CPU and the RPU is a dual-core Arm Cortex-R5F CPU.
The RPUs can run independently (split mode) or in fault tolerant mode (lockstep). Currently, these processing units are part of the default subsystem.
Any processing unit can suspend itself by calling the XPm_SelfSuspend
API to inform PMC about its intent. The processing unit must also
inform the target state as part of this call. Currently, CPU Idle target state is
supported for PU Suspend.
There are two types of target states CPU Idle and Suspend to RAM.
Actions performed by the respective processing units, PMC and PSM are discussed as follows in each case.
- CPU Idle
-
- Rich OS-like Linux has the capability to idle and subsequently power-down cores not being used by any process. This helps in power saving. If the workload increases, the OS can also wake up the powered down core. The platform management provides API calls as part of the TF-A and the XilPM (Client) library.
- A processing unit can invoke CPU Idle in a bare-metal APU application use case by using
XPm_SelfSuspend
with the target state set as PM_SUSPEND_STATE_CPU_IDLE.
- Suspend to RAM
-
- The platform management provides the capability to suspend an entire subsystem. If the subsystem uses the DDRMC and no other subsystem uses the DDRMC, XilPM puts the DDR memory into the self-refresh mode. This mode eliminates need for the DDRMC to refresh the DRAM.
- A processor node that is part of subsystem (to be suspended) can invoke
subsystem suspend using the
XPm_SelfSuspend
call to the PMC by setting target state as PM_SUSPEND_STATE_SUSPEND_TO_RAM.
For more information about XPm_SelfSuspend
and
XPm_SuspendFinalize
, see
BSP and
Libraries Document Collection (UG643).