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