ipipsu
Vitis Drivers API Documentation
ipipsu Documentation

This section explains the implementation of IPIPSU driver. Inter Processor Interrupt (IPI) is used for communication between different processors on ZynqMP SoC. Each IPI register set has Trigger, Status and Observation registers for communication between processors. Each IPI path has a 32 byte buffer associated with it and these buffers are located in the XPPU RAM.

This driver supports the following operations:

  • Trigger IPIs to CPUs on the SoC
  • Write and Read Message buffers
  • Read the status of Observation Register to get status of Triggered IPI
  • Enable/Disable IPIs from selected Masters
  • Read the Status register to get the source of an incoming IPI

Initialization & Configuration

The XIpiPsu_Config structure is used by the driver to configure itself. Fields inside this structure are properties of XIpiPsu based on its hardware build.

To support multiple runtime loading and initialization strategies employed by various operating systems, the driver instance can be initialized in the following way:

  • XIpiPsu_CfgInitialize(InstancePtr, CfgPtr, EffectiveAddr) - Uses a configuration structure provided by the caller. If running in a system with address translation, the parameter EffectiveAddr should be the virtual address.

The config data for the driver is loaded and is based on the HW build. The XIpiPsu_Config data structure contains all the data related to the IPI driver instance and also the available Target CPUs.

Sending an IPI

The following steps can be followed to send an IPI:

Note
XIpiPsu_GetObsStatus() before sending an IPI to ensure that the previous IPI was serviced by the target

Receiving an IPI

To receive an IPI, the following sequence can be followed:

Note
XIpiPsu_Reset can be used at startup to clear the status and disable all sources
 MODIFICATION HISTORY:
 Ver  Who Date     Changes


2.2 ms 01/23/17 Modified xil_printf statement in main function for all examples to ensure that "Successfully ran" and "Failed" strings are available in all examples. This is a fix for CR-965028. kvn 02/17/17 Add support for updating ConfigTable at run time ms 03/17/17 Added readme.txt file in examples folder for doxygen generation. 2.3 ms 04/11/17 Modified tcl file to add suffix U for all macro definitions of ipipsu in xparameters.h ms 03/28/17 Add index.html to provide support for importing examples in SDK. 2.5 sdd 12/17/18 Add the cpp extern macro. 2.6 sdd 04/09/20 Restructure the code for modularity and readability Added file xipipsu_buf.c and xipipsu_buf.h as part of it. 2.7 sdd 09/03/20 Makefile update for parallel execution. 2.8 nsk 12/14/20 Modified the driver tcl to not to use the instance names. 2.8 nsk 01/19/21 Updated the driver tcl to use IP_NAME for IPIs mapped. 2.9 ma 02/12/21 Added IPI CRC functionality sdd 02/17/21 Fixed doxygen warnings. sdd 03/10/21 Fixed misrac warnings. Fixed doxygen warnings. 2.11 sdd 11/17/21 Updated tcl to check for microblaze processors 2.14 adk 04/14/23 Added support for system device-tree flow. 2.14 adk 05/22/23 Added IPI Mask's for referring to processor IPI Targets in system device-tree flow. 2.14 sd 07/27/23 Update the target count.