| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) | 
| %YAML 1.2 | 
| --- | 
| $id: http://devicetree.org/schemas/mailbox/arm,mhu.yaml# | 
| $schema: http://devicetree.org/meta-schemas/core.yaml# | 
|   | 
| title: ARM MHU Mailbox Controller | 
|   | 
| maintainers: | 
|   - Jassi Brar <jaswinder.singh@linaro.org> | 
|   | 
| description: | | 
|   The ARM's Message-Handling-Unit (MHU) is a mailbox controller that has 3 | 
|   independent channels/links to communicate with remote processor(s).  MHU links | 
|   are hardwired on a platform. A link raises interrupt for any received data. | 
|   However, there is no specified way of knowing if the sent data has been read | 
|   by the remote. This driver assumes the sender polls STAT register and the | 
|   remote clears it after having read the data.  The last channel is specified to | 
|   be a 'Secure' resource, hence can't be used by Linux running NS. | 
|   | 
|   The MHU hardware also allows operations in doorbell mode. The MHU drives the | 
|   interrupt signal using a 32-bit register, with all 32-bits logically ORed | 
|   together. It provides a set of registers to enable software to set, clear and | 
|   check the status of each of the bits of this register independently. The use | 
|   of 32 bits per interrupt line enables software to provide more information | 
|   about the source of the interrupt. For example, each bit of the register can | 
|   be associated with a type of event that can contribute to raising the | 
|   interrupt. Each of the 32-bits can be used as "doorbell" to alert the remote | 
|   processor. | 
|   | 
| # We need a select here so we don't match all nodes with 'arm,primecell' | 
| select: | 
|   properties: | 
|     compatible: | 
|       contains: | 
|         enum: | 
|           - arm,mhu | 
|           - arm,mhu-doorbell | 
|   required: | 
|     - compatible | 
|   | 
| properties: | 
|   compatible: | 
|     oneOf: | 
|       - description: Data transfer mode | 
|         items: | 
|           - const: arm,mhu | 
|           - const: arm,primecell | 
|   | 
|       - description: Doorbell mode | 
|         items: | 
|           - const: arm,mhu-doorbell | 
|           - const: arm,primecell | 
|   | 
|   | 
|   reg: | 
|     maxItems: 1 | 
|   | 
|   interrupts: | 
|     items: | 
|       - description: low-priority non-secure | 
|       - description: high-priority non-secure | 
|       - description: Secure | 
|     maxItems: 3 | 
|   | 
|   clocks: | 
|     maxItems: 1 | 
|   | 
|   clock-names: | 
|     items: | 
|       - const: apb_pclk | 
|   | 
|   '#mbox-cells': | 
|     description: | | 
|       Set to 1 in data transfer mode and represents index of the channel. | 
|       Set to 2 in doorbell mode and represents index of the channel and doorbell | 
|       number. | 
|     enum: [ 1, 2 ] | 
|   | 
| required: | 
|   - compatible | 
|   - reg | 
|   - interrupts | 
|   - '#mbox-cells' | 
|   | 
| additionalProperties: false | 
|   | 
| examples: | 
|   # Data transfer mode. | 
|   - | | 
|     soc { | 
|         #address-cells = <2>; | 
|         #size-cells = <2>; | 
|   | 
|         mhuA: mailbox@2b1f0000 { | 
|             #mbox-cells = <1>; | 
|             compatible = "arm,mhu", "arm,primecell"; | 
|             reg = <0 0x2b1f0000 0 0x1000>; | 
|             interrupts = <0 36 4>, /* LP-NonSecure */ | 
|                          <0 35 4>, /* HP-NonSecure */ | 
|                          <0 37 4>; /* Secure */ | 
|             clocks = <&clock 0 2 1>; | 
|             clock-names = "apb_pclk"; | 
|         }; | 
|   | 
|         mhu_client_scb: scb@2e000000 { | 
|             compatible = "fujitsu,mb86s70-scb-1.0"; | 
|             reg = <0 0x2e000000 0 0x4000>; | 
|             mboxes = <&mhuA 1>; /* HP-NonSecure */ | 
|         }; | 
|     }; | 
|   | 
|   # Doorbell mode. | 
|   - | | 
|     soc { | 
|         #address-cells = <2>; | 
|         #size-cells = <2>; | 
|   | 
|         mhuB: mailbox@2b2f0000 { | 
|             #mbox-cells = <2>; | 
|             compatible = "arm,mhu-doorbell", "arm,primecell"; | 
|             reg = <0 0x2b2f0000 0 0x1000>; | 
|             interrupts = <0 36 4>, /* LP-NonSecure */ | 
|                          <0 35 4>, /* HP-NonSecure */ | 
|                          <0 37 4>; /* Secure */ | 
|             clocks = <&clock 0 2 1>; | 
|             clock-names = "apb_pclk"; | 
|         }; | 
|   | 
|         mhu_client_scpi: scpi@2f000000 { | 
|             compatible = "arm,scpi"; | 
|             reg = <0 0x2f000000 0 0x200>; | 
|             mboxes = <&mhuB 1 4>; /* HP-NonSecure, 5th doorbell */ | 
|         }; | 
|     }; |