Self-Suspending - 2024.1 English

Versal Adaptive SoC System Software Developers Guide (UG1304)

Document ID
UG1304
Release Date
2024-05-30
Version
2024.1 English

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 and CPU OFF target states are supported for PU Suspend.

There are three types of target states: CPU Idle, CPU OFF, 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.
CPU OFF
  • This state is used in case of CPU power down during subsystem restart/CPU hot-plug when there is only requirement to power off CPU.
  • A processing unit can invoke CPU OFF state using the XPm_SelfSuspend call to the PMC by setting target state as PM_SUSPEND_STATE_CPU_OFF.
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).