/*
 * Copyright (c) 2019 Gerson Fernando Budke
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

/ {
	aliases {
		watchdog0 = &wdt;
	};

	chosen {
		zephyr,flash-controller = &eefc;
	};

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

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

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

	soc {
		pmc: pmc@400e0400 {
			compatible = "atmel,sam-pmc";
			reg = <0x400e0400 0x200>;
			interrupts = <5 0>;
			#clock-cells = <2>;
			status = "okay";
		};

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

		afec0: adc@400b0000 {
			compatible = "atmel,sam-afec";
			reg = <0x400b0000 0x4000>;
			interrupts = <30 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 30>;
			status = "disabled";
			#io-channel-cells = <1>;
		};

		afec1: adc@400b4000 {
			compatible = "atmel,sam-afec";
			reg = <0x400b4000 0x4000>;
			interrupts = <31 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 31>;
			status = "disabled";
			#io-channel-cells = <1>;
		};

		eefc: flash-controller@400e0a00 {
			compatible = "atmel,sam-flash-controller";
			reg = <0x400e0a00 0x200>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 6>;

			#address-cells = <1>;
			#size-cells = <1>;

			flash0: flash@400000 {
				compatible = "soc-nv-flash";

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

		wdt: watchdog@400e1850 {
			compatible = "atmel,sam-watchdog";
			reg = <0x400e1850 0x10>;
			interrupts = <4 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 4>;
			status = "disabled";
		};

		twi0: i2c@400a8000 {
			compatible = "atmel,sam-i2c-twi";
			clock-frequency = <I2C_BITRATE_STANDARD>;
			reg = <0x400a8000 0x4000>;
			interrupts = <17 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 17>;
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

		twi1: i2c@400ac000 {
			compatible = "atmel,sam-i2c-twi";
			clock-frequency = <I2C_BITRATE_STANDARD>;
			reg = <0x400ac000 0x4000>;
			interrupts = <18 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 18>;
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

		spi0: spi@40088000 {
			compatible = "atmel,sam-spi";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40088000 0x4000>;
			interrupts = <19 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 19>;
			status = "disabled";
		};

		uart0: uart@400e0600 {
			compatible = "atmel,sam-uart";
			reg = <0x400e0600 0x140>;
			interrupts = <7 1>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 7>;
			status = "disabled";
		};

		uart1: uart@40060600 {
			compatible = "atmel,sam-uart";
			reg = <0x40060600 0x200>;
			interrupts = <45 1>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 45>;
			status = "disabled";
		};

		usart0: usart@400a0000 {
			compatible = "atmel,sam-usart";
			reg = <0x400a0000 0x4000>;
			interrupts = <14 1>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 14>;
			status = "disabled";
		};

		usart1: usart@400a4000 {
			compatible = "atmel,sam-usart";
			reg = <0x400a4000 0x4000>;
			interrupts = <15 1>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 15>;
			status = "disabled";
		};

		gmac: ethernet@40034000 {
			compatible = "atmel,sam-gmac";
			reg = <0x40034000 0x4000>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 44>;
			interrupts = <44 0>;
			interrupt-names = "gmac";
			num-queues = <1>;
			phy-connection-type = "mii";
			status = "disabled";
		};

		mdio: mdio@40034000 {
			compatible = "atmel,sam-mdio";
			reg = <0x40034000 0x4000>;
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

		pinctrl: pinctrl@400e0e00 {
			compatible = "atmel,sam-pinctrl";
			#address-cells = <1>;
			#size-cells = <1>;
			ranges = <0x400e0e00 0x400e0e00 0xa00>;
			status = "okay";

			pioa: gpio@400e0e00 {
				compatible = "atmel,sam-gpio";
				reg = <0x400e0e00 0x200>;
				interrupts = <9 1>;
				clocks = <&pmc PMC_TYPE_PERIPHERAL 9>;
				gpio-controller;
				#gpio-cells = <2>;
				#atmel,pin-cells = <2>;
			};

			piob: gpio@400e1000 {
				compatible = "atmel,sam-gpio";
				reg = <0x400e1000 0x200>;
				interrupts = <10 1>;
				clocks = <&pmc PMC_TYPE_PERIPHERAL 10>;
				gpio-controller;
				#gpio-cells = <2>;
				#atmel,pin-cells = <2>;
			};

			pioc: gpio@400e1200 {
				compatible = "atmel,sam-gpio";
				reg = <0x400e1200 0x200>;
				interrupts = <11 1>;
				clocks = <&pmc PMC_TYPE_PERIPHERAL 11>;
				gpio-controller;
				#gpio-cells = <2>;
				#atmel,pin-cells = <2>;
			};

			piod: gpio@400e1400 {
				compatible = "atmel,sam-gpio";
				reg = <0x400e1400 0x200>;
				interrupts = <12 1>;
				clocks = <&pmc PMC_TYPE_PERIPHERAL 12>;
				gpio-controller;
				#gpio-cells = <2>;
				#atmel,pin-cells = <2>;
			};

			pioe: gpio@400e1600 {
				compatible = "atmel,sam-gpio";
				reg = <0x400e1600 0x200>;
				interrupts = <13 1>;
				clocks = <&pmc PMC_TYPE_PERIPHERAL 13>;
				gpio-controller;
				#gpio-cells = <2>;
				#atmel,pin-cells = <2>;
			};
		};

		tc0: tc@40090000 {
			compatible = "atmel,sam-tc";
			reg = <0x40090000 0x100>;
			interrupts = <21 0
				      22 0
				      23 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 21>,
				 <&pmc PMC_TYPE_PERIPHERAL 22>,
				 <&pmc PMC_TYPE_PERIPHERAL 23>;
			status = "disabled";
		};

		tc1: tc@40094000 {
			compatible = "atmel,sam-tc";
			reg = <0x40094000 0x100>;
			interrupts = <24 0
				      25 0
				      26 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 24>,
				 <&pmc PMC_TYPE_PERIPHERAL 25>,
				 <&pmc PMC_TYPE_PERIPHERAL 26>;
			status = "disabled";
		};

		tc2: tc@40098000 {
			compatible = "atmel,sam-tc";
			reg = <0x40098000 0x100>;
			interrupts = <27 0
				      28 0
				      29 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 27>,
				 <&pmc PMC_TYPE_PERIPHERAL 28>,
				 <&pmc PMC_TYPE_PERIPHERAL 29>;
			status = "disabled";
		};

		pwm0: pwm@40000000 {
			compatible = "atmel,sam-pwm";
			reg = <0x40000000 0x4000>;
			interrupts = <36 1>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 36>;
			prescaler = <10>;
			divider = <1>;
			#pwm-cells = <3>;
			status = "disabled";
		};

		rstc: rstc@400e1800 {
			compatible = "atmel,sam-rstc";
			reg = <0x400e1800 0x10>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 1>;
			user-nrst;
		};

		smc: smc@40060000 {
			compatible = "atmel,sam-smc";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40060000 0x200>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 8>;
			status = "disabled";
		};

		hsmci: hsmci@40080000 {
			compatible = "atmel,sam-hsmci";
			reg = <0x40080000 0x1000>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 16>;
			status = "disabled";
		};
	};
};

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