1Xilinx IPI Mailbox Controller
2========================================
3
4The Xilinx IPI(Inter Processor Interrupt) mailbox controller is to manage
5messaging between two Xilinx Zynq UltraScale+ MPSoC IPI agents. Each IPI
6agent owns registers used for notification and buffers for message.
7
8               +-------------------------------------+
9               | Xilinx ZynqMP IPI Controller        |
10               +-------------------------------------+
11    +--------------------------------------------------+
12ATF                    |                     |
13                       |                     |
14                       |                     |
15    +--------------------------+             |
16                       |                     |
17                       |                     |
18    +--------------------------------------------------+
19            +------------------------------------------+
20            |  +----------------+   +----------------+ |
21Hardware    |  |  IPI Agent     |   |  IPI Buffers   | |
22            |  |  Registers     |   |                | |
23            |  |                |   |                | |
24            |  +----------------+   +----------------+ |
25            |                                          |
26            | Xilinx IPI Agent Block                   |
27            +------------------------------------------+
28
29
30Controller Device Node:
31===========================
32Required properties:
33--------------------
34IPI agent node:
35- compatible:		Shall be: "xlnx,zynqmp-ipi-mailbox"
36- interrupt-parent:	Phandle for the interrupt controller
37- interrupts:		Interrupt information corresponding to the
38			interrupt-names property.
39- xlnx,ipi-id:		local Xilinx IPI agent ID
40- #address-cells:	number of address cells of internal IPI mailbox nodes
41- #size-cells:		number of size cells of internal IPI mailbox nodes
42
43Internal IPI mailbox node:
44- reg:			IPI buffers address ranges
45- reg-names:		Names of the reg resources. It should have:
46			* local_request_region
47			  - IPI request msg buffer written by local and read
48			    by remote
49			* local_response_region
50			  - IPI response msg buffer written by local and read
51			    by remote
52			* remote_request_region
53			  - IPI request msg buffer written by remote and read
54			    by local
55			* remote_response_region
56			  - IPI response msg buffer written by remote and read
57			    by local
58- #mbox-cells:		Shall be 1. It contains:
59			* tx(0) or rx(1) channel
60- xlnx,ipi-id:		remote Xilinx IPI agent ID of which the mailbox is
61			connected to.
62
63Optional properties:
64--------------------
65- method:              The method of accessing the IPI agent registers.
66                       Permitted values are: "smc" and "hvc". Default is
67                       "smc".
68
69Client Device Node:
70===========================
71Required properties:
72--------------------
73- mboxes:		Standard property to specify a mailbox
74			(See ./mailbox.txt)
75- mbox-names:		List of identifier  strings for each mailbox
76			channel.
77
78Example:
79===========================
80	zynqmp_ipi {
81		compatible = "xlnx,zynqmp-ipi-mailbox";
82		interrupt-parent = <&gic>;
83		interrupts = <0 29 4>;
84		xlnx,ipi-id = <0>;
85		#address-cells = <1>;
86		#size-cells = <1>;
87		ranges;
88
89		/* APU<->RPU0 IPI mailbox controller */
90		ipi_mailbox_rpu0: mailbox@ff990400 {
91			reg = <0xff990400 0x20>,
92			      <0xff990420 0x20>,
93			      <0xff990080 0x20>,
94			      <0xff9900a0 0x20>;
95			reg-names = "local_request_region",
96				    "local_response_region",
97				    "remote_request_region",
98				    "remote_response_region";
99			#mbox-cells = <1>;
100			xlnx,ipi-id = <1>;
101		};
102		/* APU<->RPU1 IPI mailbox controller */
103		ipi_mailbox_rpu1: mailbox@ff990440 {
104			reg = <0xff990440 0x20>,
105			      <0xff990460 0x20>,
106			      <0xff990280 0x20>,
107			      <0xff9902a0 0x20>;
108			reg-names = "local_request_region",
109				    "local_response_region",
110				    "remote_request_region",
111				    "remote_response_region";
112			#mbox-cells = <1>;
113			xlnx,ipi-id = <2>;
114		};
115	};
116	rpu0 {
117		...
118		mboxes = <&ipi_mailbox_rpu0 0>,
119			 <&ipi_mailbox_rpu0 1>;
120		mbox-names = "tx", "rx";
121	};
122	rpu1 {
123		...
124		mboxes = <&ipi_mailbox_rpu1 0>,
125			 <&ipi_mailbox_rpu1 1>;
126		mbox-names = "tx", "rx";
127	};
128