/*
 * (C) COPYRIGHT 2020 Arm Limited. All rights reserved.
 *
 * This program is free software and is provided to you under the terms of the
 * GNU General Public License version 2 as published by the Free Software
 * Foundation, and any use by you of this program is subject to the terms
 * of such GNU licence.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you can access it online at
 * http://www.gnu.org/licenses/gpl-2.0.html.
 *
 * SPDX-License-Identifier: GPL-2.0-only
 */

 /* Example for mailbox driver dts entries for mhuv2 */

/{
      npu_mhuv2_0: mhuv2@50040000 {
              compatible = "arm,primecell";
              reg = <0x0 0x50040000 0x0 0x1000>,
                    <0x0 0x50050000 0x0 0x1000>;
              clocks = <&clk_apb>;
              clock-names = "apb_pclk";
              #mbox-cells = <2>;
              interrupts = <0 195 4>;
              interrupt-names = "mhu_rx";
       };

      ethosu@0x50000000 {
              #address-cells = <2>;
              #size-cells = <2>;
              #interrupt-cells = <3>;
              compatible = "arm,ethosu";
              reg = <0 0x84000000 0 0x00010000>,
                        <0 0x84010000 0 0x00010000>,
                        <0 0x84020000 0 0x00010000>;
              reg-names = "in_queue", "out_queue", "print_queue";
              memory-region = <&ethosu_reserved>;
              ranges = <>;
              mboxes = <&npu_mhuv2_0 0>, <&npu_mhuv2_0 0>;
              mbox-names = "tx", "rx";
              dma-ranges = <0 0x60000000 0 0x80000000 0 0x20000000>;
      };

      mailbox_mhu_test@0x84000000 {
              compatible      = "mailbox-test";
              reg             = <0x0 0x84000000 0x0 0x10000>, <0x0 0x84010000 0x0 0x10000>;
              mboxes          = <&npu_mhuv2_0 0>, <&npu_mhuv2_0 0>;
              mbox-names      = "tx", "rx";
      };
};

