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