/*
 * 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 <zephyr/dt-bindings/input/input-event-codes.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>;
			zephyr,code = <INPUT_KEY_0>;
		};
		user_button_1: button_1 {
			label = "USERPB1";
			gpios = <&gpio_button 1>;
			zephyr,code = <INPUT_KEY_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>;
};
