GNU Linux-libre 6.8.9-gnu
[releases.git] / Documentation / devicetree / bindings / mailbox / xlnx,zynqmp-ipi-mailbox.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/mailbox/xlnx,zynqmp-ipi-mailbox.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Xilinx IPI(Inter Processor Interrupt) mailbox controller
8
9 description: |
10   The Xilinx IPI(Inter Processor Interrupt) mailbox controller is to manage
11   messaging between two Xilinx Zynq UltraScale+ MPSoC IPI agents. Each IPI
12   agent owns registers used for notification and buffers for message.
13
14                +-------------------------------------+
15                | Xilinx ZynqMP IPI Controller        |
16                +-------------------------------------+
17     +--------------------------------------------------+
18   TF-A                   |                     |
19                          |                     |
20                          |                     |
21     +--------------------------+               |
22                          |                     |
23                          |                     |
24     +--------------------------------------------------+
25               +------------------------------------------+
26               |  +----------------+   +----------------+ |
27   Hardware    |  |  IPI Agent     |   |  IPI Buffers   | |
28               |  |  Registers     |   |                | |
29               |  |                |   |                | |
30               |  +----------------+   +----------------+ |
31               |                                          |
32               | Xilinx IPI Agent Block                   |
33               +------------------------------------------+
34
35 maintainers:
36   - Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
37
38 properties:
39   compatible:
40     enum:
41       - xlnx,zynqmp-ipi-mailbox
42       - xlnx,versal-ipi-mailbox
43
44   method:
45     description: |
46       The method of calling the PM-API firmware layer.
47       Permitted values are.
48       - "smc" : SMC #0, following the SMCCC
49       - "hvc" : HVC #0, following the SMCCC
50
51     $ref: /schemas/types.yaml#/definitions/string
52     enum:
53       - smc
54       - hvc
55     default: smc
56
57   '#address-cells':
58     const: 2
59
60   '#size-cells':
61     const: 2
62
63   reg:
64     maxItems: 2
65
66   reg-names:
67     maxItems: 2
68
69   xlnx,ipi-id:
70     description: |
71       Remote Xilinx IPI agent ID of which the mailbox is connected to.
72     $ref: /schemas/types.yaml#/definitions/uint32
73
74   interrupts:
75     maxItems: 1
76
77   ranges: true
78
79 patternProperties:
80   '^mailbox@[0-9a-f]+$':
81     description: Internal ipi mailbox node
82     type: object  # DT nodes are json objects
83     additionalProperties: false
84     properties:
85
86       compatible:
87         enum:
88           - xlnx,zynqmp-ipi-dest-mailbox
89           - xlnx,versal-ipi-dest-mailbox
90
91       reg:
92         minItems: 1
93         maxItems: 4
94
95       reg-names:
96         minItems: 1
97         maxItems: 4
98
99       xlnx,ipi-id:
100         description:
101           Remote Xilinx IPI agent ID of which the mailbox is connected to.
102         $ref: /schemas/types.yaml#/definitions/uint32
103
104       '#mbox-cells':
105         const: 1
106         description:
107           It contains tx(0) or rx(1) channel IPI id number.
108
109     allOf:
110       - if:
111           properties:
112             compatible:
113               contains:
114                 enum:
115                   - xlnx,zynqmp-ipi-dest-mailbox
116         then:
117           properties:
118             reg:
119               maxItems: 4
120
121             reg-names:
122               items:
123                 - const: local_request_region
124                 - const: local_response_region
125                 - const: remote_request_region
126                 - const: remote_response_region
127         else:
128           properties:
129             reg:
130               minItems: 1
131               items:
132                 - description: Remote IPI agent control register region
133                 - description: Remote IPI agent optional message buffers
134
135             reg-names:
136               minItems: 1
137               items:
138                 - const: ctrl
139                 - const: msg
140
141     required:
142       - compatible
143       - reg
144       - reg-names
145       - "#mbox-cells"
146       - xlnx,ipi-id
147
148 required:
149   - compatible
150   - interrupts
151   - '#address-cells'
152   - '#size-cells'
153   - xlnx,ipi-id
154
155 allOf:
156   - if:
157       properties:
158         compatible:
159           contains:
160             enum:
161               - xlnx,zynqmp-ipi-mailbox
162     then:
163       properties:
164         reg: false
165         reg-names: false
166
167     else:
168       properties:
169         reg:
170           items:
171             - description: Host IPI agent control register region
172             - description: Host IPI agent optional message buffers
173
174         reg-names:
175           items:
176             - const: ctrl
177             - const: msg
178
179       required:
180         - reg
181         - reg-names
182
183 additionalProperties: false
184
185 examples:
186   - |
187     #include<dt-bindings/interrupt-controller/arm-gic.h>
188
189     amba {
190       #address-cells = <0x2>;
191       #size-cells = <0x2>;
192       zynqmp-mailbox {
193         compatible = "xlnx,zynqmp-ipi-mailbox";
194         interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
195         xlnx,ipi-id = <0>;
196         #address-cells = <2>;
197         #size-cells = <2>;
198         ranges;
199
200         mailbox: mailbox@ff9905c0 {
201           compatible = "xlnx,zynqmp-ipi-dest-mailbox";
202           reg = <0x0 0xff9905c0 0x0 0x20>,
203                 <0x0 0xff9905e0 0x0 0x20>,
204                 <0x0 0xff990e80 0x0 0x20>,
205                 <0x0 0xff990ea0 0x0 0x20>;
206           reg-names = "local_request_region",
207                       "local_response_region",
208                       "remote_request_region",
209                       "remote_response_region";
210           #mbox-cells = <1>;
211           xlnx,ipi-id = <4>;
212         };
213       };
214     };
215
216   - |
217     #include<dt-bindings/interrupt-controller/arm-gic.h>
218
219     bus {
220       #address-cells = <2>;
221       #size-cells = <2>;
222       mailbox@ff300000 {
223         compatible = "xlnx,versal-ipi-mailbox";
224         interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
225         #address-cells = <2>;
226         #size-cells = <2>;
227         reg = <0x0 0xff300000 0x0 0x1000>,
228               <0x0 0xff990000 0x0 0x1ff>;
229         reg-names = "ctrl", "msg";
230         xlnx,ipi-id = <0>;
231         ranges;
232
233         /* buffered IPI */
234         mailbox@ff340000 {
235           compatible = "xlnx,versal-ipi-dest-mailbox";
236           reg = <0x0 0xff340000 0x0 0x1000>,
237                 <0x0 0xff990400 0x0 0x1ff>;
238           reg-names = "ctrl", "msg";
239           #mbox-cells = <1>;
240           xlnx,ipi-id = <4>;
241         };
242
243         /* bufferless IPI */
244         mailbox@ff370000 {
245           compatible = "xlnx,versal-ipi-dest-mailbox";
246           reg = <0x0 0xff370000 0x0 0x1000>;
247           reg-names = "ctrl";
248           #mbox-cells = <1>;
249           xlnx,ipi-id = <7>;
250         };
251       };
252     };
253 ...