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.
| 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 |
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.