/*
 * Copyright (c) 2020 Gerson Fernando Budke <nandojve@gmail.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <arm/armv7-m.dtsi>
#include <dt-bindings/i2c/i2c.h>
#include <dt-bindings/gpio/gpio.h>

#include "sam4l-pinctrl.dtsi"

/ {
	chosen {
		zephyr,flash-controller = &flashcalw;
		zephyr,entropy = &trng;
	};

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

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

			mpu: mpu@e000ed90 {
				compatible = "arm,armv7m-mpu";
				reg = <0xe000ed90 0x40>;
				arm,num-mpu-regions = <8>;
			};
		};
	};

	sram0: memory@20000000 {
		compatible = "mmio-sram";
	};

	/**
	 * HRAM1 are 4k SRAM that can be used by PicoCache or just extra
	 * memory available.  The PicoCache will be keep disable to ensures
	 * deterministic behaviour.  That way the extra memory can be
	 * exclusive for USB descriptors
	 */
	sram1: memory@21000000 {
		compatible = "mmio-sram";
		reg = <0x21000000 DT_SIZE_K(4)>;
		zephyr,memory-region = "SRAM1";
	};

	soc {
		flashcalw: flash-controller@400a0000 {
			compatible = "atmel,sam-flash-controller";
			label = "FLASH_CTRL";
			reg = <0x400a0000 0x400>;
			interrupts = <0 0>;
			peripheral-id = <32>;
			#address-cells = <1>;
			#size-cells = <1>;

			flash0: flash@0 {
				compatible = "soc-nv-flash";
				label = "FLASH_0";

				write-block-size = <16>;
			};
		};

		twim0: twim@40018000 {
			compatible = "atmel,sam-i2c-twim";
			clock-frequency = <I2C_BITRATE_STANDARD>;
			reg = <0x40018000 0x4000>;
			interrupts = <61 0>;
			peripheral-id = <4>;
			label = "TWIM_0";
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
			pinctrl-0 = <&pa23b_twi0_twd0 &pa24b_twi0_twck0>;
		};
		twim1: twim@4001c000 {
			compatible = "atmel,sam-i2c-twim";
			clock-frequency = <I2C_BITRATE_STANDARD>;
			reg = <0x4001c000 0x4000>;
			interrupts = <63 0>;
			peripheral-id = <6>;
			label = "TWIM_1";
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
			pinctrl-0 = <&pb0a_twi1_twd1 &pb1a_twi1_twck1>;
		};
		twim2: twim@40078000 {
			compatible = "atmel,sam-i2c-twim";
			clock-frequency = <I2C_BITRATE_STANDARD>;
			reg = <0x40078000 0x4000>;
			interrupts = <77 0>;
			peripheral-id = <21>;
			label = "TWIM_2";
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
			pinctrl-0 = <&pa21e_twi2_twd2 &pa22e_twi2_twck2>;
		};
		twim3: twim@4007c000 {
			compatible = "atmel,sam-i2c-twim";
			clock-frequency = <I2C_BITRATE_STANDARD>;
			reg = <0x4007c000 0x4000>;
			interrupts = <78 0>;
			peripheral-id = <22>;
			label = "TWIM_3";
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
			pinctrl-0 = <&pb14c_twi3_twd3 &pb15c_twi3_twck3>;
		};

		spi0: spi@40008000 {
			compatible = "atmel,sam-spi";
			reg = <0x40008000 0x4000>;
			interrupts = <54 0>;
			peripheral-id = <1>;
			label = "SPI_0";
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

		usart0: usart@40024000 {
			compatible = "atmel,sam-usart";
			reg = <0x40024000 0x4000>;
			interrupts = <65 1>;
			peripheral-id = <8>;
			status = "disabled";
			label = "USART_0";
		};
		usart1: usart@40028000 {
			compatible = "atmel,sam-usart";
			reg = <0x40028000 0x4000>;
			interrupts = <66 1>;
			peripheral-id = <9>;
			status = "disabled";
			label = "USART_1";
		};
		usart2: usart@4002c000 {
			compatible = "atmel,sam-usart";
			reg = <0x4002c000 0x4000>;
			interrupts = <67 1>;
			peripheral-id = <10>;
			status = "disabled";
			label = "USART_2";
		};
		usart3: usart@40030000 {
			compatible = "atmel,sam-usart";
			reg = <0x40030000 0x4000>;
			interrupts = <68 1>;
			peripheral-id = <11>;
			status = "disabled";
			label = "USART_3";
		};

		usbc: usbd@400a5000 {
			compatible = "atmel,sam-usbc";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x400a5000 0x1000>;
			interrupts = <18 5>;
			interrupt-names = "usbc";
			maximum-speed = "full-speed";
			num-bidir-endpoints = <8>;
			peripheral-id = <101>;
			status = "disabled";
			label = "USBC";
			pinctrl-0 = <&pa25a_usbc_dm &pa26a_usbc_dp>;
		};

		pinctrl@400e1000 {
			compatible = "atmel,sam-pinctrl";
			#address-cells = <1>;
			#size-cells = <1>;
			ranges = <0x400e1000 0x400e1000 0x800>;

			gpioa: gpio@400e1000 {
				compatible = "atmel,sam4l-gpio";
				reg = <0x400e1000 0x200>;
				interrupts = <25 1>, <26 1>, <27 1>, <28 1>;
				peripheral-id = <68>;
				label = "GPIO_A";
				gpio-controller;
				#gpio-cells = <2>;
				#atmel,pin-cells = <2>;
			};
			gpiob: gpio@400e1200 {
				compatible = "atmel,sam4l-gpio";
				reg = <0x400e1200 0x200>;
				interrupts = <29 1>, <30 1>, <31 1>, <32 1>;
				peripheral-id = <68>;
				label = "GPIO_B";
				gpio-controller;
				#gpio-cells = <2>;
				#atmel,pin-cells = <2>;
			};
			gpioc: gpio@400e1400 {
				compatible = "atmel,sam4l-gpio";
				reg = <0x400e1400 0x200>;
				interrupts = <33 1>, <34 1>, <35 1>, <36 1>;
				peripheral-id = <68>;
				label = "GPIO_C";
				gpio-controller;
				#gpio-cells = <2>;
				#atmel,pin-cells = <2>;
			};
		};

		tc0: tc@40010000 {
			compatible = "atmel,sam-tc";
			reg = <0x40010000 0x100>;
			interrupts = <55 0
				      56 0
				      57 0>;
			peripheral-id = <2>;
			status = "disabled";
			label = "TC0";
			pinctrl-0 = <>;
		};

		tc1: tc@40014000 {
			compatible = "atmel,sam-tc";
			reg = <0x40014000 0x100>;
			interrupts = <58 0
				      59 0
				      60 0>;
			peripheral-id = <3>;
			status = "disabled";
			label = "TC1";
			pinctrl-0 = <>;
		};

		trng: random@40068000 {
			compatible = "atmel,sam-trng";
			reg = <0x40068000 0x4000>;
			interrupts = <73 0>;
			peripheral-id = <17>;
			status = "okay";
			label = "TRNG";
		};

		uid: device_uid@80020c {
			compatible = "atmel,sam4l-uid";
			reg = <0x80020c 0xf>;
			status = "okay";
		};
	};
};

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