/*
 * 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;
		uart-1 = &uart1;
		watchdog0 = &wdog0;
	};

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;

		/*
		 * These SRAM and flash settings give the entire available
		 * code and data memories to this secure firmware image.
		 * This may conflict with mps2_an521_remote firmware. Use
		 * caution when using both targets simultaneously.
		 */
		zephyr,sram = &ssram2_3;
		zephyr,flash = &ssram1;
	};

	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@10000000 {
		/* Table 3-2, row 6. */
		compatible = "zephyr,memory-region", "mmio-sram";
		reg = <0x10000000 DT_SIZE_M(4)>;
		zephyr,memory-region = "SSRAM1";
	};

	ssram2_3: memory@38000000 {
		/* Table 3-4, rows 16 and 17. */
		compatible = "zephyr,memory-region", "mmio-sram";
		reg = <0x38000000 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)>;
	};

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

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

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

&uart1 {
	status = "okay";
};
