/*
 * Copyright (c) 2018-2019 Linaro Limited
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

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

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

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

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,sram = &ram;
		zephyr,flash = &code;
	};

	leds {
		compatible = "gpio-leds";
		led_0: led_0 {
			gpios = <&gpio_led0 0>;
			label = "USERLED0";
		};
		led_1: led_1 {
			gpios = <&gpio_led0 1>;
			label = "USERLED1";
		};
	};

	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>;
		};
	};

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

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

			mpu: mpu@e000ed90 {
				compatible = "arm,armv8m-mpu";
				reg = <0xe000ed90 0x40>;
			};
		};
	};

	/*
	 * The memory regions defined below are according to AN521:
	 * https://documentation-service.arm.com/static/5fa12fe9b1a7c5445f29017f
	 *
	 * Please see tables mentioned in individual comments below for details.
	 */

	ssram1: memory@0 {
		/* Table 3-2, row 1. */
		compatible = "zephyr,memory-region", "mmio-sram";
		reg = <0x0 DT_SIZE_M(4)>;
		zephyr,memory-region = "SSRAM1";
	};

	ssram2_3: memory@28000000 {
		/* Table 3-4, rows 8 and 9. */
		compatible = "zephyr,memory-region", "mmio-sram";
		reg = <0x28000000 DT_SIZE_M(4)>;
		zephyr,memory-region = "SSRAM2_3";
	};

	psram: memory@80000000 {
		/* Table 3-6, row 1. */
		device_type = "memory";
		reg = <0x80000000 DT_SIZE_M(16)>;
	};

	reserved-memory {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		/* The code memory region defined below is selected to remain
		 * compatible with what TF-M has defined for a single boot image,
		 * where 468 KB memory at the bottom of the 4 MB code region is
		 * marked as 'Unused'. Please see the memory layout in:
		 *
		 * https://github.com/zephyrproject-rtos/trusted-firmware-m/blob/master/platform/ext/target/arm/mps2/an521/partition/flash_layout.h
		 */

		code: memory@38B000 {
			reg = <0x0038B000 DT_SIZE_K(468)>;
		};

		/* This ram memory region's base address is chosen to avoid
		 * conflict with the mps2_an521_ns board's RAM region.
		 *
		 * Its available address space must be compatible with what
		 * TF-M assigns to NS firmware.
		 */
		ram: memory@28180000 {
			reg = <0x28180000 DT_SIZE_K(512)>;
		};
	};

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

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

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