/*
 * Copyright (c) 2018-2021 Linaro Limited
 * Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <arm/armv8.1-m.dtsi>
#include <zephyr/dt-bindings/i2c/i2c.h>
#include <mem.h>

/ {
	compatible = "arm,mps3-an547";
	#address-cells = <1>;
	#size-cells = <1>;

	aliases {
		led0 = &led_0;
		led1 = &led_1;
		sw0 = &user_button_0;
		sw1 = &user_button_1;
	};

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,sram = &dtcm;
		zephyr,flash = &itcm;
	};

	leds {
		compatible = "gpio-leds";
		led_0: led_0 {
			gpios = <&gpio_led0 0>;
			label = "USERLED0";
		};
		led_1: led_1 {
			gpios = <&gpio_led0 1>;
			label = "USERLED1";
		};
		led_2: led_2 {
			gpios = <&gpio_led0 2>;
			label = "USERLED2";
		};
		led_3: led_3 {
			gpios = <&gpio_led0 3>;
			label = "USERLED3";
		};
		led_4: led_4 {
			gpios = <&gpio_led0 4>;
			label = "USERLED4";
		};
		led_5: led_5 {
			gpios = <&gpio_led0 5>;
			label = "USERLED5";
		};
		led_6: led_6 {
			gpios = <&gpio_led0 6>;
			label = "USERLED6";
		};
		led_7: led_7 {
			gpios = <&gpio_led0 7>;
			label = "USERLED7";
		};
		led_8: led_8 {
			gpios = <&gpio_led0 8>;
			label = "PB1LED";
		};
		led_9: led_9 {
			gpios = <&gpio_led0 9>;
			label = "PB2LED";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button_0: button_0 {
			label = "USERPB0";
			gpios = <&gpio_button 0>;
		};
		user_button_1: button_1 {
			label = "USERPB1";
			gpios = <&gpio_button 1>;
		};
	};

	ethosu {
		#address-cells = <1>;
		#size-cells = <0>;
		interrupt-parent = <&nvic>;

		ethosu0: ethosu@48102000 {
			compatible = "arm,ethos-u";
			reg = <0x48102000>;
			interrupts = <56 3>;
			secure-enable;
			privilege-enable;
			status = "okay";
		};
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-m55";
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <1>;

			mpu: mpu@e000ed90 {
				compatible = "arm,armv8.1m-mpu";
				reg = <0xe000ed90 0x40>;
				arm,num-mpu-regions = <16>;
			};
		};
	};

	/* We utilize the secure addresses, if you subtract 0x10000000
	 * you'll get the non-secure alias
	 */
	itcm: itcm@10000000 {	/* alias @ 0x0 */
		compatible = "zephyr,memory-region";
		reg = <0x10000000 DT_SIZE_K(512)>;
		zephyr,memory-region = "ITCM";
	};

	sram: sram@11000000 {	/* alias @ 0x01000000 */
		compatible = "mmio-sram";
		reg = <0x11000000 DT_SIZE_M(2)>;
	};

	dtcm: dtcm@30000000 {	/* alias @ 0x20000000 */
		compatible = "zephyr,memory-region";
		reg = <0x30000000 DT_SIZE_K(512)>;
		zephyr,memory-region = "DTCM";
	};

	isram: sram@31000000 {/* alias @ 0x21000000 */
		compatible = "mmio-sram";
		reg = <0x31000000 DT_SIZE_M(4)>;
	};

	/* DDR4 - 2G, alternates non-secure/secure every 256M */
	ddr4: memory@60000000 {
		device_type = "memory";
		compatible = "zephyr,memory-region";
		reg = <0x60000000 DT_SIZE_M(256)
		       0x70000000 DT_SIZE_M(256)
		       0x80000000 DT_SIZE_M(256)
		       0x90000000 DT_SIZE_M(256)
		       0xa0000000 DT_SIZE_M(256)
		       0xb0000000 DT_SIZE_M(256)
		       0xc0000000 DT_SIZE_M(256)
		       0xd0000000 DT_SIZE_M(256)>;
		zephyr,memory-region = "DDR4";
	};

	soc {
		peripheral@50000000 {
			#address-cells = <1>;
			#size-cells = <1>;
			ranges = <0x0 0x50000000 0x10000000>;

			#include "mps3_an547-common.dtsi"
		};
	};
};

&nvic {
	arm,num-irq-priority-bits = <3>;
};
