| From cdda49168d42c897574388356555f8130c021bb5 Mon Sep 17 00:00:00 2001 |
| From: Viresh Kumar <viresh.kumar@linaro.org> |
| Date: Tue, 17 Nov 2020 15:32:05 +0530 |
| Subject: [PATCH 03/22] dt-bindings: mailbox : arm,mhuv2: Add bindings |
| |
| This patch adds device tree binding for ARM Message Handling Unit (MHU) |
| controller version 2. |
| |
| Based on earlier work by Morten Borup Petersen. |
| |
| Reviewed-by: Rob Herring <robh@kernel.org> |
| Co-developed-by: Tushar Khandelwal <tushar.khandelwal@arm.com> |
| Signed-off-by: Tushar Khandelwal <tushar.khandelwal@arm.com> |
| Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> |
| Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org> |
| |
| Upstream-Status: Backport [https://lkml.org/lkml/2020/11/17/234] |
| Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> |
| --- |
| .../bindings/mailbox/arm,mhuv2.yaml | 209 ++++++++++++++++++ |
| 1 file changed, 209 insertions(+) |
| create mode 100644 Documentation/devicetree/bindings/mailbox/arm,mhuv2.yaml |
| |
| diff --git a/Documentation/devicetree/bindings/mailbox/arm,mhuv2.yaml b/Documentation/devicetree/bindings/mailbox/arm,mhuv2.yaml |
| new file mode 100644 |
| index 000000000000..6608545ea66f |
| --- /dev/null |
| +++ b/Documentation/devicetree/bindings/mailbox/arm,mhuv2.yaml |
| @@ -0,0 +1,209 @@ |
| +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| +%YAML 1.2 |
| +--- |
| +$id: http://devicetree.org/schemas/mailbox/arm,mhuv2.yaml# |
| +$schema: http://devicetree.org/meta-schemas/core.yaml# |
| + |
| +title: ARM MHUv2 Mailbox Controller |
| + |
| +maintainers: |
| + - Tushar Khandelwal <tushar.khandelwal@arm.com> |
| + - Viresh Kumar <viresh.kumar@linaro.org> |
| + |
| +description: | |
| + The Arm Message Handling Unit (MHU) Version 2 is a mailbox controller that has |
| + between 1 and 124 channel windows (each 32-bit wide) to provide unidirectional |
| + communication with remote processor(s), where the number of channel windows |
| + are implementation dependent. |
| + |
| + Given the unidirectional nature of the controller, an MHUv2 mailbox may only |
| + be written to or read from. If a pair of MHU controllers is implemented |
| + between two processing elements to provide bidirectional communication, these |
| + must be specified as two separate mailboxes. |
| + |
| + If the interrupts property is present in device tree node, then its treated as |
| + a "receiver" mailbox, otherwise a "sender". |
| + |
| + An MHU controller must be specified along with the supported transport |
| + protocols. The transport protocols determine the method of data transmission |
| + as well as the number of provided mailbox channels. |
| + |
| + Following are the possible transport protocols. |
| + |
| + - Data-transfer: Each transfer is made of one or more words, using one or more |
| + channel windows. |
| + |
| + - Doorbell: Each transfer is made up of single bit flag, using any one of the |
| + bits in a channel window. A channel window can support up to 32 doorbells |
| + and the entire window shall be used in doorbell protocol. Optionally, data |
| + may be transmitted through a shared memory region, wherein the MHU is used |
| + strictly as an interrupt generation mechanism but that is out of the scope |
| + of these bindings. |
| + |
| +# We need a select here so we don't match all nodes with 'arm,primecell' |
| +select: |
| + properties: |
| + compatible: |
| + contains: |
| + enum: |
| + - arm,mhuv2-tx |
| + - arm,mhuv2-rx |
| + required: |
| + - compatible |
| + |
| +properties: |
| + compatible: |
| + oneOf: |
| + - description: Sender mode |
| + items: |
| + - const: arm,mhuv2-tx |
| + - const: arm,primecell |
| + |
| + - description: Receiver-mode |
| + items: |
| + - const: arm,mhuv2-rx |
| + - const: arm,primecell |
| + |
| + reg: |
| + maxItems: 1 |
| + |
| + interrupts: |
| + description: | |
| + The MHUv2 controller always implements an interrupt in the "receiver" |
| + mode, while the interrupt in the "sender" mode was not available in the |
| + version MHUv2.0, but the later versions do have it. |
| + maxItems: 1 |
| + |
| + clocks: |
| + maxItems: 1 |
| + |
| + clock-names: |
| + maxItems: 1 |
| + |
| + arm,mhuv2-protocols: |
| + $ref: /schemas/types.yaml#/definitions/uint32-matrix |
| + description: | |
| + The MHUv2 controller may contain up to 124 channel windows (each 32-bit |
| + wide). The hardware and the DT bindings allows any combination of those to |
| + be used for various transport protocols. |
| + |
| + This property allows a platform to describe how these channel windows are |
| + used in various transport protocols. The entries in this property shall be |
| + present as an array of tuples, where each tuple describes details about |
| + one of the transport protocol being implemented over some channel |
| + window(s). |
| + |
| + The first field of a tuple signifies the transfer protocol, 0 is reserved |
| + for doorbell protocol, and 1 is reserved for data-transfer protocol. |
| + Using any other value in the first field of a tuple makes it invalid. |
| + |
| + The second field of a tuple signifies the number of channel windows where |
| + the protocol would be used and should be set to a non zero value. For |
| + doorbell protocol this field signifies the number of 32-bit channel |
| + windows that implement the doorbell protocol. For data-transfer protocol, |
| + this field signifies the number of 32-bit channel windows that implement |
| + the data-transfer protocol. |
| + |
| + The total number of channel windows specified here shouldn't be more than |
| + the ones implemented by the platform, though one can specify lesser number |
| + of windows here than what the platform implements. |
| + |
| + mhu: mailbox@2b1f0000 { |
| + ... |
| + |
| + arm,mhuv2-protocols = <0 2>, <1 1>, <1 5>, <1 7>; |
| + } |
| + |
| + The above example defines the protocols of an ARM MHUv2 mailbox |
| + controller, where a total of 15 channel windows are used. The first two |
| + windows are used in doorbell protocol (64 doorbells), followed by 1, 5 and |
| + 7 windows (separately) used in data-transfer protocol. |
| + |
| + minItems: 1 |
| + maxItems: 124 |
| + items: |
| + items: |
| + - enum: [ 0, 1 ] |
| + - minimum: 0 |
| + maximum: 124 |
| + |
| + |
| + '#mbox-cells': |
| + description: | |
| + It is always set to 2. The first argument in the consumers 'mboxes' |
| + property represents the channel window group, which may be used in |
| + doorbell, or data-transfer protocol, and the second argument (only |
| + relevant in doorbell protocol, should be 0 otherwise) represents the |
| + doorbell number within the 32 bit wide channel window. |
| + |
| + From the example given above for arm,mhuv2-protocols, here is how a client |
| + node can reference them. |
| + |
| + mboxes = <&mhu 0 5>; // Channel Window Group 0, doorbell 5. |
| + mboxes = <&mhu 1 7>; // Channel Window Group 1, doorbell 7. |
| + mboxes = <&mhu 2 0>; // Channel Window Group 2, data transfer protocol with 1 window. |
| + mboxes = <&mhu 3 0>; // Channel Window Group 3, data transfer protocol with 5 windows. |
| + mboxes = <&mhu 4 0>; // Channel Window Group 4, data transfer protocol with 7 windows. |
| + |
| + const: 2 |
| + |
| +if: |
| + # Interrupt is compulsory for receiver |
| + properties: |
| + compatible: |
| + contains: |
| + const: arm,mhuv2-rx |
| +then: |
| + required: |
| + - interrupts |
| + |
| +required: |
| + - compatible |
| + - reg |
| + - '#mbox-cells' |
| + - arm,mhuv2-protocols |
| + |
| +additionalProperties: false |
| + |
| +examples: |
| + # Multiple transport protocols implemented by the mailbox controllers |
| + - | |
| + soc { |
| + #address-cells = <2>; |
| + #size-cells = <2>; |
| + |
| + mhu_tx: mailbox@2b1f0000 { |
| + #mbox-cells = <2>; |
| + compatible = "arm,mhuv2-tx", "arm,primecell"; |
| + reg = <0 0x2b1f0000 0 0x1000>; |
| + clocks = <&clock 0>; |
| + clock-names = "apb_pclk"; |
| + interrupts = <0 45 4>; |
| + arm,mhuv2-protocols = <1 5>, <1 2>, <1 5>, <1 7>, <0 2>; |
| + }; |
| + |
| + mhu_rx: mailbox@2b1f1000 { |
| + #mbox-cells = <2>; |
| + compatible = "arm,mhuv2-rx", "arm,primecell"; |
| + reg = <0 0x2b1f1000 0 0x1000>; |
| + clocks = <&clock 0>; |
| + clock-names = "apb_pclk"; |
| + interrupts = <0 46 4>; |
| + arm,mhuv2-protocols = <1 1>, <1 7>, <0 2>; |
| + }; |
| + |
| + mhu_client: scb@2e000000 { |
| + compatible = "fujitsu,mb86s70-scb-1.0"; |
| + reg = <0 0x2e000000 0 0x4000>; |
| + |
| + mboxes = |
| + //data-transfer protocol with 5 windows, mhu-tx |
| + <&mhu_tx 2 0>, |
| + //data-transfer protocol with 7 windows, mhu-tx |
| + <&mhu_tx 3 0>, |
| + //doorbell protocol channel 4, doorbell 27, mhu-tx |
| + <&mhu_tx 4 27>, |
| + //data-transfer protocol with 1 window, mhu-rx |
| + <&mhu_rx 0 0>; |
| + }; |
| + }; |
| -- |
| 2.17.1 |
| |