18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
28c2ecf20Sopenharmony_ci%YAML 1.2
38c2ecf20Sopenharmony_ci---
48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/mailbox/arm,mhu.yaml#
58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_cititle: ARM MHU Mailbox Controller
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cimaintainers:
108c2ecf20Sopenharmony_ci  - Jassi Brar <jaswinder.singh@linaro.org>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cidescription: |
138c2ecf20Sopenharmony_ci  The ARM's Message-Handling-Unit (MHU) is a mailbox controller that has 3
148c2ecf20Sopenharmony_ci  independent channels/links to communicate with remote processor(s).  MHU links
158c2ecf20Sopenharmony_ci  are hardwired on a platform. A link raises interrupt for any received data.
168c2ecf20Sopenharmony_ci  However, there is no specified way of knowing if the sent data has been read
178c2ecf20Sopenharmony_ci  by the remote. This driver assumes the sender polls STAT register and the
188c2ecf20Sopenharmony_ci  remote clears it after having read the data.  The last channel is specified to
198c2ecf20Sopenharmony_ci  be a 'Secure' resource, hence can't be used by Linux running NS.
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci  The MHU hardware also allows operations in doorbell mode. The MHU drives the
228c2ecf20Sopenharmony_ci  interrupt signal using a 32-bit register, with all 32-bits logically ORed
238c2ecf20Sopenharmony_ci  together. It provides a set of registers to enable software to set, clear and
248c2ecf20Sopenharmony_ci  check the status of each of the bits of this register independently. The use
258c2ecf20Sopenharmony_ci  of 32 bits per interrupt line enables software to provide more information
268c2ecf20Sopenharmony_ci  about the source of the interrupt. For example, each bit of the register can
278c2ecf20Sopenharmony_ci  be associated with a type of event that can contribute to raising the
288c2ecf20Sopenharmony_ci  interrupt. Each of the 32-bits can be used as "doorbell" to alert the remote
298c2ecf20Sopenharmony_ci  processor.
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci# We need a select here so we don't match all nodes with 'arm,primecell'
328c2ecf20Sopenharmony_ciselect:
338c2ecf20Sopenharmony_ci  properties:
348c2ecf20Sopenharmony_ci    compatible:
358c2ecf20Sopenharmony_ci      contains:
368c2ecf20Sopenharmony_ci        enum:
378c2ecf20Sopenharmony_ci          - arm,mhu
388c2ecf20Sopenharmony_ci          - arm,mhu-doorbell
398c2ecf20Sopenharmony_ci  required:
408c2ecf20Sopenharmony_ci    - compatible
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciproperties:
438c2ecf20Sopenharmony_ci  compatible:
448c2ecf20Sopenharmony_ci    oneOf:
458c2ecf20Sopenharmony_ci      - description: Data transfer mode
468c2ecf20Sopenharmony_ci        items:
478c2ecf20Sopenharmony_ci          - const: arm,mhu
488c2ecf20Sopenharmony_ci          - const: arm,primecell
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci      - description: Doorbell mode
518c2ecf20Sopenharmony_ci        items:
528c2ecf20Sopenharmony_ci          - const: arm,mhu-doorbell
538c2ecf20Sopenharmony_ci          - const: arm,primecell
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci  reg:
578c2ecf20Sopenharmony_ci    maxItems: 1
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci  interrupts:
608c2ecf20Sopenharmony_ci    items:
618c2ecf20Sopenharmony_ci      - description: low-priority non-secure
628c2ecf20Sopenharmony_ci      - description: high-priority non-secure
638c2ecf20Sopenharmony_ci      - description: Secure
648c2ecf20Sopenharmony_ci    maxItems: 3
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci  clocks:
678c2ecf20Sopenharmony_ci    maxItems: 1
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci  clock-names:
708c2ecf20Sopenharmony_ci    items:
718c2ecf20Sopenharmony_ci      - const: apb_pclk
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci  '#mbox-cells':
748c2ecf20Sopenharmony_ci    description: |
758c2ecf20Sopenharmony_ci      Set to 1 in data transfer mode and represents index of the channel.
768c2ecf20Sopenharmony_ci      Set to 2 in doorbell mode and represents index of the channel and doorbell
778c2ecf20Sopenharmony_ci      number.
788c2ecf20Sopenharmony_ci    enum: [ 1, 2 ]
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_cirequired:
818c2ecf20Sopenharmony_ci  - compatible
828c2ecf20Sopenharmony_ci  - reg
838c2ecf20Sopenharmony_ci  - interrupts
848c2ecf20Sopenharmony_ci  - '#mbox-cells'
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ciadditionalProperties: false
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ciexamples:
898c2ecf20Sopenharmony_ci  # Data transfer mode.
908c2ecf20Sopenharmony_ci  - |
918c2ecf20Sopenharmony_ci    soc {
928c2ecf20Sopenharmony_ci        #address-cells = <2>;
938c2ecf20Sopenharmony_ci        #size-cells = <2>;
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci        mhuA: mailbox@2b1f0000 {
968c2ecf20Sopenharmony_ci            #mbox-cells = <1>;
978c2ecf20Sopenharmony_ci            compatible = "arm,mhu", "arm,primecell";
988c2ecf20Sopenharmony_ci            reg = <0 0x2b1f0000 0 0x1000>;
998c2ecf20Sopenharmony_ci            interrupts = <0 36 4>, /* LP-NonSecure */
1008c2ecf20Sopenharmony_ci                         <0 35 4>, /* HP-NonSecure */
1018c2ecf20Sopenharmony_ci                         <0 37 4>; /* Secure */
1028c2ecf20Sopenharmony_ci            clocks = <&clock 0 2 1>;
1038c2ecf20Sopenharmony_ci            clock-names = "apb_pclk";
1048c2ecf20Sopenharmony_ci        };
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci        mhu_client_scb: scb@2e000000 {
1078c2ecf20Sopenharmony_ci            compatible = "fujitsu,mb86s70-scb-1.0";
1088c2ecf20Sopenharmony_ci            reg = <0 0x2e000000 0 0x4000>;
1098c2ecf20Sopenharmony_ci            mboxes = <&mhuA 1>; /* HP-NonSecure */
1108c2ecf20Sopenharmony_ci        };
1118c2ecf20Sopenharmony_ci    };
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci  # Doorbell mode.
1148c2ecf20Sopenharmony_ci  - |
1158c2ecf20Sopenharmony_ci    soc {
1168c2ecf20Sopenharmony_ci        #address-cells = <2>;
1178c2ecf20Sopenharmony_ci        #size-cells = <2>;
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci        mhuB: mailbox@2b2f0000 {
1208c2ecf20Sopenharmony_ci            #mbox-cells = <2>;
1218c2ecf20Sopenharmony_ci            compatible = "arm,mhu-doorbell", "arm,primecell";
1228c2ecf20Sopenharmony_ci            reg = <0 0x2b2f0000 0 0x1000>;
1238c2ecf20Sopenharmony_ci            interrupts = <0 36 4>, /* LP-NonSecure */
1248c2ecf20Sopenharmony_ci                         <0 35 4>, /* HP-NonSecure */
1258c2ecf20Sopenharmony_ci                         <0 37 4>; /* Secure */
1268c2ecf20Sopenharmony_ci            clocks = <&clock 0 2 1>;
1278c2ecf20Sopenharmony_ci            clock-names = "apb_pclk";
1288c2ecf20Sopenharmony_ci        };
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ci        mhu_client_scpi: scpi@2f000000 {
1318c2ecf20Sopenharmony_ci            compatible = "arm,scpi";
1328c2ecf20Sopenharmony_ci            reg = <0 0x2f000000 0 0x200>;
1338c2ecf20Sopenharmony_ci            mboxes = <&mhuB 1 4>; /* HP-NonSecure, 5th doorbell */
1348c2ecf20Sopenharmony_ci        };
1358c2ecf20Sopenharmony_ci    };
136