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
7title: Xilinx IPI(Inter Processor Interrupt) mailbox controller
8
9description: |
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
35maintainers:
36  - Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
37
38properties:
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
79patternProperties:
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
148required:
149  - compatible
150  - interrupts
151  - '#address-cells'
152  - '#size-cells'
153  - xlnx,ipi-id
154
155allOf:
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
183additionalProperties: false
184
185examples:
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...
254