xref: /linux/Documentation/devicetree/bindings/mailbox/arm,mhuv3.yaml (revision c771600c6af14749609b49565ffb4cac2959710d)
1cd251970SCristian Marussi# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2cd251970SCristian Marussi%YAML 1.2
3cd251970SCristian Marussi---
4cd251970SCristian Marussi$id: http://devicetree.org/schemas/mailbox/arm,mhuv3.yaml#
5cd251970SCristian Marussi$schema: http://devicetree.org/meta-schemas/core.yaml#
6cd251970SCristian Marussi
7cd251970SCristian Marussititle: ARM MHUv3 Mailbox Controller
8cd251970SCristian Marussi
9cd251970SCristian Marussimaintainers:
10cd251970SCristian Marussi  - Sudeep Holla <sudeep.holla@arm.com>
11cd251970SCristian Marussi  - Cristian Marussi <cristian.marussi@arm.com>
12cd251970SCristian Marussi
13cd251970SCristian Marussidescription: |
14cd251970SCristian Marussi  The Arm Message Handling Unit (MHU) Version 3 is a mailbox controller that
15cd251970SCristian Marussi  enables unidirectional communications with remote processors through various
16cd251970SCristian Marussi  possible transport protocols.
17cd251970SCristian Marussi  The controller can optionally support a varying number of extensions that, in
18cd251970SCristian Marussi  turn, enable different kinds of transport to be used for communication.
19cd251970SCristian Marussi  Number, type and characteristics of each supported extension can be discovered
20cd251970SCristian Marussi  dynamically at runtime.
21cd251970SCristian Marussi
22cd251970SCristian Marussi  Given the unidirectional nature of the controller, an MHUv3 mailbox controller
23cd251970SCristian Marussi  is composed of a MHU Sender (MHUS) containing a PostBox (PBX) block and a MHU
24cd251970SCristian Marussi  Receiver (MHUR) containing a MailBox (MBX) block, where
25cd251970SCristian Marussi
26cd251970SCristian Marussi   PBX is used to
27cd251970SCristian Marussi      - Configure the MHU
28cd251970SCristian Marussi      - Send Transfers to the Receiver
29cd251970SCristian Marussi      - Optionally receive acknowledgment of a Transfer from the Receiver
30cd251970SCristian Marussi
31cd251970SCristian Marussi   MBX is used to
32cd251970SCristian Marussi      - Configure the MHU
33cd251970SCristian Marussi      - Receive Transfers from the Sender
34cd251970SCristian Marussi      - Optionally acknowledge Transfers sent by the Sender
35cd251970SCristian Marussi
36cd251970SCristian Marussi  Both PBX and MBX need to be present and defined in the DT description if you
37cd251970SCristian Marussi  need to establish a bidirectional communication, since you will have to
38cd251970SCristian Marussi  acquire two distinct unidirectional channels, one for each block.
39cd251970SCristian Marussi
40cd251970SCristian Marussi  As a consequence both blocks needs to be represented separately and specified
41cd251970SCristian Marussi  as distinct DT nodes in order to properly describe their resources.
42cd251970SCristian Marussi
43cd251970SCristian Marussi  Note that, though, thanks to the runtime discoverability, there is no need to
44cd251970SCristian Marussi  identify the type of blocks with distinct compatibles.
45cd251970SCristian Marussi
46cd251970SCristian Marussi  Following are the MHUv3 possible extensions.
47cd251970SCristian Marussi
48cd251970SCristian Marussi  - Doorbell Extension (DBE): DBE defines a type of channel called a Doorbell
49cd251970SCristian Marussi    Channel (DBCH). DBCH enables a single bit Transfer to be sent from the
50cd251970SCristian Marussi    Sender to Receiver. The Transfer indicates that an event has occurred.
51cd251970SCristian Marussi    When DBE is implemented, the number of DBCHs that an implementation of the
52cd251970SCristian Marussi    MHU can support is between 1 and 128, numbered starting from 0 in ascending
53cd251970SCristian Marussi    order and discoverable at run-time.
54cd251970SCristian Marussi    Each DBCH contains 32 individual fields, referred to as flags, each of which
55cd251970SCristian Marussi    can be used independently. It is possible for the Sender to send multiple
56cd251970SCristian Marussi    Transfers at once using a single DBCH, so long as each Transfer uses
57cd251970SCristian Marussi    a different flag in the DBCH.
58cd251970SCristian Marussi    Optionally, data may be transmitted through an out-of-band shared memory
59cd251970SCristian Marussi    region, wherein the MHU Doorbell is used strictly as an interrupt generation
60cd251970SCristian Marussi    mechanism, but this is out of the scope of these bindings.
61cd251970SCristian Marussi
62cd251970SCristian Marussi  - FastChannel Extension (FCE): FCE defines a type of channel called a Fast
63cd251970SCristian Marussi    Channel (FCH). FCH is intended for lower overhead communication between
64cd251970SCristian Marussi    Sender and Receiver at the expense of determinism. An FCH allows the Sender
65cd251970SCristian Marussi    to update the channel value at any time, regardless of whether the previous
66cd251970SCristian Marussi    value has been seen by the Receiver. When the Receiver reads the channel's
67cd251970SCristian Marussi    content it gets the last value written to the channel.
68cd251970SCristian Marussi    FCH is considered lossy in nature, and means that the Sender has no way of
69cd251970SCristian Marussi    knowing if, or when, the Receiver will act on the Transfer.
70cd251970SCristian Marussi    FCHs are expected to behave as RAM which generates interrupts when writes
71cd251970SCristian Marussi    occur to the locations within the RAM.
72cd251970SCristian Marussi    When FCE is implemented, the number of FCHs that an implementation of the
73cd251970SCristian Marussi    MHU can support is between 1-1024, if the FastChannel word-size is 32-bits,
74cd251970SCristian Marussi    or between 1-512, when the FastChannel word-size is 64-bits.
75cd251970SCristian Marussi    FCHs are numbered from 0 in ascending order.
76cd251970SCristian Marussi    Note that the number of FCHs and the word-size are implementation defined,
77cd251970SCristian Marussi    not configurable but discoverable at run-time.
78cd251970SCristian Marussi    Optionally, data may be transmitted through an out-of-band shared memory
79cd251970SCristian Marussi    region, wherein the MHU FastChannel is used as an interrupt generation
80cd251970SCristian Marussi    mechanism which carries also a pointer to such out-of-band data, but this
81cd251970SCristian Marussi    is out of the scope of these bindings.
82cd251970SCristian Marussi
83cd251970SCristian Marussi  - FIFO Extension (FE): FE defines a Channel type called a FIFO Channel (FFCH).
84cd251970SCristian Marussi    FFCH allows a Sender to send
85cd251970SCristian Marussi       - Multiple Transfers to the Receiver without having to wait for the
86cd251970SCristian Marussi         previous Transfer to be acknowledged by the Receiver, as long as the
87cd251970SCristian Marussi         FIFO has room for the Transfer.
88cd251970SCristian Marussi       - Transfers which require the Receiver to provide acknowledgment.
89cd251970SCristian Marussi       - Transfers which have in-band payload.
90cd251970SCristian Marussi    In all cases, the data is guaranteed to be observed by the Receiver in the
91cd251970SCristian Marussi    same order which the Sender sent it.
92cd251970SCristian Marussi    When FE is implemented, the number of FFCHs that an implementation of the
93cd251970SCristian Marussi    MHU can support is between 1 and 64, numbered starting from 0 in ascending
94cd251970SCristian Marussi    order. The number of FFCHs, their depth (same for all implemented FFCHs) and
95cd251970SCristian Marussi    the access-granularity are implementation defined, not configurable but
96cd251970SCristian Marussi    discoverable at run-time.
97cd251970SCristian Marussi    Optionally, additional data may be transmitted through an out-of-band shared
98cd251970SCristian Marussi    memory region, wherein the MHU FIFO is used to transmit, in order, a small
99cd251970SCristian Marussi    part of the payload (like a header) and a reference to the shared memory
100cd251970SCristian Marussi    area holding the remaining, bigger, chunk of the payload, but this is out of
101cd251970SCristian Marussi    the scope of these bindings.
102cd251970SCristian Marussi
103cd251970SCristian Marussiproperties:
104cd251970SCristian Marussi  compatible:
105cd251970SCristian Marussi    const: arm,mhuv3
106cd251970SCristian Marussi
107cd251970SCristian Marussi  reg:
108cd251970SCristian Marussi    maxItems: 1
109cd251970SCristian Marussi
110cd251970SCristian Marussi  interrupts:
111cd251970SCristian Marussi    minItems: 1
112cd251970SCristian Marussi    maxItems: 74
113cd251970SCristian Marussi
114cd251970SCristian Marussi  interrupt-names:
115cd251970SCristian Marussi    description: |
116cd251970SCristian Marussi      The MHUv3 controller generates a number of events some of which are used
117cd251970SCristian Marussi      to generate interrupts; as a consequence it can expose a varying number of
118cd251970SCristian Marussi      optional PBX/MBX interrupts, representing the events generated during the
119cd251970SCristian Marussi      operation of the various transport protocols associated with different
120cd251970SCristian Marussi      extensions. All interrupts of the MHU are level-sensitive.
121cd251970SCristian Marussi      Some of these optional interrupts are defined per-channel, where the
122cd251970SCristian Marussi      number of channels effectively available is implementation defined and
123cd251970SCristian Marussi      run-time discoverable.
124cd251970SCristian Marussi      In the following names are enumerated using patterns, with per-channel
125cd251970SCristian Marussi      interrupts implicitly capped at the maximum channels allowed by the
126cd251970SCristian Marussi      specification for each extension type.
127cd251970SCristian Marussi      For the sake of simplicity maxItems is anyway capped to a most plausible
128cd251970SCristian Marussi      number, assuming way less channels would be implemented than actually
129cd251970SCristian Marussi      possible.
130cd251970SCristian Marussi
131cd251970SCristian Marussi      The only mandatory interrupts on the MHU are:
132cd251970SCristian Marussi        - combined
133cd251970SCristian Marussi        - mbx-fch-xfer-<N> but only if mbx-fcgrp-xfer-<N> is not implemented.
134cd251970SCristian Marussi
135cd251970SCristian Marussi    minItems: 1
136cd251970SCristian Marussi    maxItems: 74
137cd251970SCristian Marussi    items:
138cd251970SCristian Marussi      oneOf:
139cd251970SCristian Marussi        - const: combined
140cd251970SCristian Marussi          description: PBX/MBX Combined interrupt
141cd251970SCristian Marussi        - const: combined-ffch
142cd251970SCristian Marussi          description: PBX/MBX FIFO Combined interrupt
143cd251970SCristian Marussi        - pattern: '^ffch-low-tide-[0-9]+$'
144cd251970SCristian Marussi          description: PBX/MBX FIFO Channel <N> Low Tide interrupt
145cd251970SCristian Marussi        - pattern: '^ffch-high-tide-[0-9]+$'
146cd251970SCristian Marussi          description: PBX/MBX FIFO Channel <N> High Tide interrupt
147cd251970SCristian Marussi        - pattern: '^ffch-flush-[0-9]+$'
148cd251970SCristian Marussi          description: PBX/MBX FIFO Channel <N> Flush interrupt
149cd251970SCristian Marussi        - pattern: '^mbx-dbch-xfer-[0-9]+$'
150cd251970SCristian Marussi          description: MBX Doorbell Channel <N> Transfer interrupt
151cd251970SCristian Marussi        - pattern: '^mbx-fch-xfer-[0-9]+$'
152cd251970SCristian Marussi          description: MBX FastChannel <N> Transfer interrupt
153cd251970SCristian Marussi        - pattern: '^mbx-fchgrp-xfer-[0-9]+$'
154cd251970SCristian Marussi          description: MBX FastChannel <N> Group Transfer interrupt
155cd251970SCristian Marussi        - pattern: '^mbx-ffch-xfer-[0-9]+$'
156cd251970SCristian Marussi          description: MBX FIFO Channel <N> Transfer interrupt
157cd251970SCristian Marussi        - pattern: '^pbx-dbch-xfer-ack-[0-9]+$'
158cd251970SCristian Marussi          description: PBX Doorbell Channel <N> Transfer Ack interrupt
159cd251970SCristian Marussi        - pattern: '^pbx-ffch-xfer-ack-[0-9]+$'
160cd251970SCristian Marussi          description: PBX FIFO Channel <N> Transfer Ack interrupt
161cd251970SCristian Marussi
162cd251970SCristian Marussi  '#mbox-cells':
163cd251970SCristian Marussi    description: |
164cd251970SCristian Marussi      The first argument in the consumers 'mboxes' property represents the
165cd251970SCristian Marussi      extension type, the second is for the channel number while the third
166cd251970SCristian Marussi      depends on extension type.
167cd251970SCristian Marussi
168cd251970SCristian Marussi      Extension types constants are defined in <dt-bindings/arm/mhuv3-dt.h>.
169cd251970SCristian Marussi
170cd251970SCristian Marussi      Extension type for DBE is DBE_EXT and the third parameter represents the
171cd251970SCristian Marussi      doorbell flag number to use.
172cd251970SCristian Marussi      Extension type for FCE is FCE_EXT, third parameter unused.
173cd251970SCristian Marussi      Extension type for FE is FE_EXT, third parameter unused.
174cd251970SCristian Marussi
175cd251970SCristian Marussi      mboxes = <&mhu DBE_EXT 0 5>; // DBE, Doorbell Channel Window 0, doorbell 5.
176cd251970SCristian Marussi      mboxes = <&mhu DBE_EXT 7>; // DBE, Doorbell Channel Window 1, doorbell 7.
177cd251970SCristian Marussi      mboxes = <&mhu FCE_EXT 0 0>; // FCE, FastChannel Window 0.
178cd251970SCristian Marussi      mboxes = <&mhu FCE_EXT 3 0>; // FCE, FastChannel Window 3.
179cd251970SCristian Marussi      mboxes = <&mhu FE_EXT 1 0>; // FE, FIFO Channel Window 1.
180cd251970SCristian Marussi      mboxes = <&mhu FE_EXT 7 0>; // FE, FIFO Channel Window 7.
181cd251970SCristian Marussi    const: 3
182cd251970SCristian Marussi
183cd251970SCristian Marussi  clocks:
184cd251970SCristian Marussi    maxItems: 1
185cd251970SCristian Marussi
186cd251970SCristian Marussirequired:
187cd251970SCristian Marussi  - compatible
188cd251970SCristian Marussi  - reg
189cd251970SCristian Marussi  - interrupts
190cd251970SCristian Marussi  - interrupt-names
191cd251970SCristian Marussi  - '#mbox-cells'
192cd251970SCristian Marussi
193cd251970SCristian MarussiadditionalProperties: false
194cd251970SCristian Marussi
195cd251970SCristian Marussiexamples:
196cd251970SCristian Marussi  - |
197cd251970SCristian Marussi    #include <dt-bindings/interrupt-controller/arm-gic.h>
198cd251970SCristian Marussi
199cd251970SCristian Marussi    soc {
200cd251970SCristian Marussi        #address-cells = <2>;
201cd251970SCristian Marussi        #size-cells = <2>;
202cd251970SCristian Marussi
203cd251970SCristian Marussi        mailbox@2aaa0000 {
204cd251970SCristian Marussi            compatible = "arm,mhuv3";
205cd251970SCristian Marussi            #mbox-cells = <3>;
206cd251970SCristian Marussi            reg = <0 0x2aaa0000 0 0x10000>;
207cd251970SCristian Marussi            clocks = <&clock 0>;
208cd251970SCristian Marussi            interrupt-names = "combined", "pbx-dbch-xfer-ack-1",
209cd251970SCristian Marussi                               "ffch-high-tide-0";
210cd251970SCristian Marussi            interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
211cd251970SCristian Marussi                         <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
212cd251970SCristian Marussi        };
213cd251970SCristian Marussi
214cd251970SCristian Marussi        mailbox@2ab00000 {
215cd251970SCristian Marussi            compatible = "arm,mhuv3";
216cd251970SCristian Marussi            #mbox-cells = <3>;
217cd251970SCristian Marussi            reg = <0 0x2aab0000 0 0x10000>;
218cd251970SCristian Marussi            clocks = <&clock 0>;
219cd251970SCristian Marussi            interrupt-names = "combined", "mbx-dbch-xfer-1", "ffch-low-tide-0";
220cd251970SCristian Marussi            interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
221cd251970SCristian Marussi                         <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
222cd251970SCristian Marussi                         <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
223cd251970SCristian Marussi        };
224cd251970SCristian Marussi    };
225