Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

Xilinx IPI Mailbox Controller
========================================

The Xilinx IPI(Inter Processor Interrupt) mailbox controller is to manage
messaging between two Xilinx Zynq UltraScale+ MPSoC IPI agents. Each IPI
agent owns registers used for notification and buffers for message.

               +-------------------------------------+
               | Xilinx ZynqMP IPI Controller        |
               +-------------------------------------+
    +--------------------------------------------------+
ATF                    |                     |
                       |                     |
                       |                     |
    +--------------------------+             |
                       |                     |
                       |                     |
    +--------------------------------------------------+
            +------------------------------------------+
            |  +----------------+   +----------------+ |
Hardware    |  |  IPI Agent     |   |  IPI Buffers   | |
            |  |  Registers     |   |                | |
            |  |                |   |                | |
            |  +----------------+   +----------------+ |
            |                                          |
            | Xilinx IPI Agent Block                   |
            +------------------------------------------+


Controller Device Node:
===========================
Required properties:
--------------------
IPI agent node:
- compatible:		Shall be: "xlnx,zynqmp-ipi-mailbox"
- interrupt-parent:	Phandle for the interrupt controller
- interrupts:		Interrupt information corresponding to the
			interrupt-names property.
- xlnx,ipi-id:		local Xilinx IPI agent ID
- #address-cells:	number of address cells of internal IPI mailbox nodes
- #size-cells:		number of size cells of internal IPI mailbox nodes

Internal IPI mailbox node:
- reg:			IPI buffers address ranges
- reg-names:		Names of the reg resources. It should have:
			* local_request_region
			  - IPI request msg buffer written by local and read
			    by remote
			* local_response_region
			  - IPI response msg buffer written by local and read
			    by remote
			* remote_request_region
			  - IPI request msg buffer written by remote and read
			    by local
			* remote_response_region
			  - IPI response msg buffer written by remote and read
			    by local
- #mbox-cells:		Shall be 1. It contains:
			* tx(0) or rx(1) channel
- xlnx,ipi-id:		remote Xilinx IPI agent ID of which the mailbox is
			connected to.

Optional properties:
--------------------
- method:              The method of accessing the IPI agent registers.
                       Permitted values are: "smc" and "hvc". Default is
                       "smc".

Client Device Node:
===========================
Required properties:
--------------------
- mboxes:		Standard property to specify a mailbox
			(See ./mailbox.txt)
- mbox-names:		List of identifier  strings for each mailbox
			channel.

Example:
===========================
	zynqmp_ipi {
		compatible = "xlnx,zynqmp-ipi-mailbox";
		interrupt-parent = <&gic>;
		interrupts = <0 29 4>;
		xlnx,ipi-id = <0>;
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		/* APU<->RPU0 IPI mailbox controller */
		ipi_mailbox_rpu0: mailbox@ff90400 {
			reg = <0xff990400 0x20>,
			      <0xff990420 0x20>,
			      <0xff990080 0x20>,
			      <0xff9900a0 0x20>;
			reg-names = "local_request_region",
				    "local_response_region",
				    "remote_request_region",
				    "remote_response_region";
			#mbox-cells = <1>;
			xlnx,ipi-id = <1>;
		};
		/* APU<->RPU1 IPI mailbox controller */
		ipi_mailbox_rpu1: mailbox@ff990440 {
			reg = <0xff990440 0x20>,
			      <0xff990460 0x20>,
			      <0xff990280 0x20>,
			      <0xff9902a0 0x20>;
			reg-names = "local_request_region",
				    "local_response_region",
				    "remote_request_region",
				    "remote_response_region";
			#mbox-cells = <1>;
			xlnx,ipi-id = <2>;
		};
	};
	rpu0 {
		...
		mboxes = <&ipi_mailbox_rpu0 0>,
			 <&ipi_mailbox_rpu0 1>;
		mbox-names = "tx", "rx";
	};
	rpu1 {
		...
		mboxes = <&ipi_mailbox_rpu1 0>,
			 <&ipi_mailbox_rpu1 1>;
		mbox-names = "tx", "rx";
	};