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

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

		supc: supc@400e1810 {
			compatible = "atmel,sam-supc";
			reg = <0x400e1810 0x20>;
			#wakeup-source-id-cells = <1>;
			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>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 44>;
			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";
		};

		rtc: rtc@400e1860 {
			compatible = "atmel,sam-rtc";
			reg = <0x400e1860 0x100>;
			interrupts = <2 0>;
			clocks = <&pmc PMC_TYPE_PERIPHERAL 2>;
			alarms-count = <1>;
			status = "disabled";
		};
	};
};

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