Setting up Device Request Permissions - 2023.2 English

Versal Adaptive SoC System Software Developers Guide (UG1304)

Document ID
Release Date
2023.2 English

The PLM checks permissions for any subsystem that requests a device. While creating a subsystem in the Vivado tool, you can assign a single peripheral to multiple subsystems, or to a single subsystem. This information is exported to PMC CDO, and the access for requesting a device is allowed based on this information from the CDO. By default, this permission is shared for all subsystems, that is, a single device can be requested by multiple subsystems. The exceptions are clock, reset and the power operation that are allowed only if a single subsystem has requested any of these resources.

Note: All subsystems must call the XPm_InitFinalize() API when they have finished initializing all their devices and requested devices using XPm_RequestNode(). Otherwise, the PLM does not power down any device.

The following sequence is the ideal sequence for calling using the PM API for device management is as follows:

  1. Call XPm_RequestNode() on all required devices.
  2. Initialize devices.
  3. Call XPM_InitFinalize() to inform PLM that all required devices are requested and initialized

It is not mandatory that XPm_RequestNode() has to be called before XPm_InitFinalize(). If XPm_InitFinalize() is called before XPm_RequestNode(), the PLM powers down that device (as initial state is ON). If XPm_RequestNode() is called after XPm_InitFinalize(), the PLM powers up the device.

Some device initialization is done through CDO. Therefore, if XPm_InitFinalize() is called before XPm_RequestNode(), it is possible that initialization is lost as device is powered down first and then powered up again. It is recommended that you call XPm_InitFinalize() once it has requested all required devices. Otherwise, you need to take care of initialization again.

When you call XPm_ReleaseNode(), be mindful that the device powers down, and initialization configuration might be lost.