/*
 * Copyright (c) 2021-2023, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/*
 * This device tree is only an example and some properties have been omitted.
 *
 * Refer to the Arm(R) Ethos(TM)-N driver stack for complete device tree examples.
 * https://github.com/ARM-software/ethos-n-driver-stack
 */

/ {
	#address-cells = <2>;
	#size-cells = <2>;

	smmu_ethosn0: iommu@6f400000 {
		compatible = "arm,smmu-v3";
		reg = <0 0x6f400000 0 0x80000>;
		status = "okay";
		/* msi-parent omitted */
		#iommu-cells = <0x1>;
	};

	ethosn0: ethosn@6f300000 {
		 compatible = "ethosn";
		 reg = <0 0x6f300000 0 0x00100000>;
		 status = "okay";

		 core0 {
			 compatible = "ethosn-core";
			 status = "okay";

			 main_allocator {
				 compatible = "ethosn-main_allocator";
				 status = "okay";

				 firmware {
					 compatible = "ethosn-memory";
					 iommus = <&smmu_ethosn0 0>;
				 };

				 working_data {
					 compatible = "ethosn-memory";
					 iommus = <&smmu_ethosn0 1>;
				 };
			 };
		 };

		 asset_allocator0 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 4>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 5>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 6>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 7>;
			 };
		 };

		 asset_allocator1 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 8>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 9>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 10>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 11>;
			 };
		 };

		 asset_allocator2 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 12>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 13>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 14>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 15>;
			 };
		 };

		 asset_allocator3 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 16>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 17>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 18>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 19>;
			 };
		 };

		 asset_allocator4 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 20>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 21>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 22>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 23>;
			 };
		 };

		 asset_allocator5 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 24>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 25>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 26>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 27>;
			 };
		 };

		 asset_allocator6 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 28>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 29>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 30>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 31>;
			 };
		 };

		 asset_allocator7 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 32>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 33>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 34>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 35>;
			 };
		 };

		 asset_allocator8 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 36>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 37>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 38>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 39>;
			 };
		 };

		 asset_allocator9 {
			 compatible = "ethosn-asset_allocator";
			 status = "okay";

			 command_stream {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 40>;
			 };

			 weight_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 41>;
			 };

			 buffer_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 42>;
			 };

			 intermediate_data {
				 compatible = "ethosn-memory";
				 iommus = <&smmu_ethosn0 43>;
			 };
		 };
	 };
};
