# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mailbox/thead,th1520-mbox.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: T-head TH1520 Mailbox Controller

description:
  The T-head mailbox controller enables communication and coordination between
  cores within the SoC by passing messages (e.g., data, status, and control)
  through mailbox channels. It also allows one core to signal another processor
  using interrupts via the Interrupt Controller Unit (ICU).

maintainers:
  - Michal Wilczynski <m.wilczynski@samsung.com>

properties:
  compatible:
    const: thead,th1520-mbox

  clocks:
    items:
      - description: Clock for the local mailbox
      - description: Clock for remote ICU 0
      - description: Clock for remote ICU 1
      - description: Clock for remote ICU 2

  clock-names:
    items:
      - const: clk-local
      - const: clk-remote-icu0
      - const: clk-remote-icu1
      - const: clk-remote-icu2

  reg:
    items:
      - description: Mailbox local base address
      - description: Remote ICU 0 base address
      - description: Remote ICU 1 base address
      - description: Remote ICU 2 base address

  reg-names:
    items:
      - const: local
      - const: remote-icu0
      - const: remote-icu1
      - const: remote-icu2

  interrupts:
    maxItems: 1

  '#mbox-cells':
    const: 1
    description:
      The one and only cell describes destination CPU ID.

required:
  - compatible
  - clocks
  - clock-names
  - reg
  - reg-names
  - interrupts
  - '#mbox-cells'

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/thead,th1520-clk-ap.h>
    soc {
      #address-cells = <2>;
      #size-cells = <2>;
      mailbox@ffffc38000 {
        compatible = "thead,th1520-mbox";
        reg = <0xff 0xffc38000 0x0 0x4000>,
              <0xff 0xffc44000 0x0 0x1000>,
              <0xff 0xffc4c000 0x0 0x1000>,
              <0xff 0xffc54000 0x0 0x1000>;
        reg-names = "local", "remote-icu0", "remote-icu1", "remote-icu2";
        clocks = <&clk CLK_MBOX0>, <&clk CLK_MBOX1>, <&clk CLK_MBOX2>,
                 <&clk CLK_MBOX3>;
        clock-names = "clk-local", "clk-remote-icu0", "clk-remote-icu1",
                      "clk-remote-icu2";
        interrupts = <28>;
        #mbox-cells = <1>;
      };
    };
