Power Management Initialization - 2025.1 English - UG1137

Zynq UltraScale+ MPSoC Software Developer Guide (UG1137)

Document ID
UG1137
Release Date
2025-06-25
Version
2025.1 English

Power management is disabled during boot and all the peripherals are powered up at this time. That is because it is often necessary to allow for possible, and temporary, inter-dependencies between peripherals during boot and initialization. When FSBL is finished with initializing the peripherals and loading the application binaries, it passes the Configuration Object to the PMU. The PMU is now aware of all the sub-systems and their associated PM Masters and PM Slaves. PM Masters and PM Slaves that are not included in the Configuration Object are never used, and are powered down by the PMU.

A PM Master is not likely to use all the PM Slaves at all times. Therefore, a PM Slave should be powered up only when it is being used. The PM Master must notify the PMU before and after using a PM Slave. This functionality is implemented in the PetaLinux kernel. This requirement hinders developers starting with a new RPU application, when the focus is on functionality and not power optimization. Therefore, it is convenient for the PMU to also support PM-incapable Masters that do not provide notifications when they are using the PM Slaves. This is done by keeping all the PM Slaves in the sub-system powered up until the PM Master sends the PmInitFinalize request to the PMU. A PM-incapable Master never sends this request, which means that its PM Slaves remain powered up at all times or until this PM Master itself is powered down.

A PM-capable Master sends this request after initializing the sub-system. The PMU then begins powering down the PM Slaves in this sub-system whenever they are not being used.

As a result, when there is an RPU master present in the system but it is not running any application, the PMU firmware considers it as a PM incapable master and hence never powers down the RPU and its slaves. This behavior is fixed and allows you to power down unused RPUs. This change is protected by the compilation flag ENABLE_UNUSED_RPU_PWR_DWN and is enabled by default. When this flag is enabled, the unused RPU and allocated slaves are powered down if not in use.

Table 1. Power Management Initialization
Boot Mode APU Image RPU Image RPU Mode ENABLE_UNUSED_RPU_PWR_DWN_VAL RPU0/TCM0 State RPU1/ TCM1 State
JTAG Don’t Care Don’t Care Don’t Care Don’t Care ON ON
Non-JTAG Boot modes Don’t Care Don’t Care Don’t Care 0 ON ON
Linux or PM aware app that calls PM_INIT_FINALIZE RPU app in boot image Lock step mode 1 ON OFF
RPU0 app in boot image Split mode 1 ON OFF
RPU1 app in boot image Split mode 1 OFF ON
Both RPU apps in boot image Split mode 1 ON ON
RPU app not in boot image   1 OFF OFF
Bare Metal app that does not call PM_INIT_FINALIZE Don’t Care Don’t Care Don’t Care ON ON
Note: If you do not want to power down RPU/TCM by default, set the ENABLE_UNUSED_RPU_PWR_DWN flag to 0 while compiling the PMU firmware. For the JTAG boot mode there is no impact on behavior change even though ENABLE_UNUSED_RPU_PWR_DWN flag is 1.
Note: Sub-systems might overlap each other. This means that some PM Slaves might belong to more than one sub-system (for example, DDR, OCM, and so on). If a PM Slave is in more than one sub-system, the PMU does not power down this PM Slave until it has been released by all its PM Masters, or until all these PM Masters have powered down themselves.