PM Platform Driver - 2021.2 English

Zynq UltraScale+ MPSoC Software Developer Guide

Document ID
UG1137
Release Date
2021-10-27
Version
2021.2 English

The Zynq UltraScale+ MPSoC power management for Linux is encapsulated in a power management driver, power domain driver and platform firmware driver. The system-level API functions are exported and as such, can be called by other Linux modules with GPL compatible license. The function declarations are available in the following location:

include/linux/firmware/xilinx/zynqmp/firmware.h

The function implementations are available in the following location:

drivers/firmware/xilinx/zynqmp/firmware*.c

Provide the correct node in the Linux device tree for proper driver initialization. The firmware driver relies on the 'firmware' node to detect the presence of PMU firmware, determine the calling method (either 'smc' or 'hvc') to the PM-Framework firmware layer and to register the callback interrupt number.

The ‘firmware’ node contains following properties:

  • Compatible: Must contain ‘xlnx,zynqmp-firmware’.
  • Method: The method of calling the PM framework firmware. It should be ‘smc’.
Note: Additional information is available in the following txt file of Linux Documentation: Documentation/devicetree/bindings/firmware/xilinx/xlnx,zynqmp-firmware.txt.

Example:

firmware {
zynqmp_firmware: zynqmp-firmware { compatible = "xlnx,zynqmp-firmware"; method = "smc";
};
};
Note: Power domain driver and power management driver binding details are available in the following files of Linux Documentation:
  • Documentation/devicetree/bindings/soc/xilinx/xlnx,zynqmp-power.txt
  • Documentation/devicetree/bindings/power/zynqmp-genpd.txt
Note: xilPM do not support the following EEMI APIs. For current release, they are only supported for Linux through TF-A.
  • query_data
  • ioctl
  • clock_enable
  • clock_disable
  • clock_getstate
  • clock_setdivider
  • clock_getdivider
  • clock_setrate
  • clock_getrate
  • clock_setparent
  • clock_getparent
  • pinctrl_request
  • pinctrl_release
  • pinctrl_set_function
  • pinctrl_get_function
  • pinctrl_set_config
  • pinctrl_get_config