1/*
2 * Copyright (c) 2017 Justin Watson
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include <arm/armv7-m.dtsi>
8#include <zephyr/dt-bindings/i2c/i2c.h>
9#include <zephyr/dt-bindings/clock/atmel_sam_pmc.h>
10
11/ {
12	aliases {
13		watchdog0 = &wdt;
14	};
15
16	chosen {
17		zephyr,flash-controller = &eefc;
18	};
19
20	cpus {
21		#address-cells = <1>;
22		#size-cells = <0>;
23
24		cpu0: cpu@0 {
25			device_type = "cpu";
26			compatible = "arm,cortex-m3";
27			reg = <0>;
28		};
29	};
30
31	soc {
32		pmc: pmc@400e0600 {
33			compatible = "atmel,sam-pmc";
34			reg = <0x400e0600 0x200>;
35			interrupts = <5 0>;
36			#clock-cells = <2>;
37			status = "okay";
38		};
39
40		sram0: memory@20070000 {
41			compatible = "mmio-sram";
42			reg = <0x20070000 0x18000>;
43		};
44
45		/* Only used for HWINFO device ID */
46		eefc: flash-controller@400e0a00 {
47			compatible = "atmel,sam-flash-controller";
48			reg = <0x400e0a00 0x200>;
49			clocks = <&pmc PMC_TYPE_PERIPHERAL 6>;
50
51			#address-cells = <1>;
52			#size-cells = <1>;
53
54			flash0: flash@80000 {
55				compatible = "soc-nv-flash";
56				reg = <0x00080000 0x80000>;
57
58				write-block-size = <16>;
59				erase-block-size = <512>;
60			};
61
62			/*
63			 * SAM3X doesn't support erase pages command and must
64			 * be keeped disabled.
65			 */
66			status = "disabled";
67		};
68
69		wdt: watchdog@400e1a50 {
70			compatible = "atmel,sam-watchdog";
71			reg = <0x400e1a50 0xc>;
72			interrupts = <4 0>;
73			clocks = <&pmc PMC_TYPE_PERIPHERAL 4>;
74			status = "disabled";
75		};
76
77		twi0: i2c@4008c000 {
78			compatible = "atmel,sam-i2c-twi";
79			clock-frequency = <I2C_BITRATE_STANDARD>;
80			reg = <0x4008c000 0x128>;
81			interrupts = <22 0>;
82			clocks = <&pmc PMC_TYPE_PERIPHERAL 22>;
83			status = "disabled";
84			#address-cells = <1>;
85			#size-cells = <0>;
86		};
87
88		twi1: i2c@40090000 {
89			compatible = "atmel,sam-i2c-twi";
90			clock-frequency = <I2C_BITRATE_STANDARD>;
91			reg = <0x40090000 0x128>;
92			interrupts = <23 0>;
93			clocks = <&pmc PMC_TYPE_PERIPHERAL 23>;
94			status = "disabled";
95			#address-cells = <1>;
96			#size-cells = <0>;
97		};
98
99		uart: uart@400e0800 {
100			compatible = "atmel,sam-uart";
101			reg = <0x400e0800 0x124>;
102			interrupts = <8 1>;
103			clocks = <&pmc PMC_TYPE_PERIPHERAL 8>;
104			status = "disabled";
105		};
106
107		usart0: usart@40098000 {
108			compatible = "atmel,sam-usart";
109			reg = <0x40098000 0x130>;
110			interrupts = <17 0>;
111			clocks = <&pmc PMC_TYPE_PERIPHERAL 17>;
112			status = "disabled";
113		};
114
115		usart1: usart@4009c000 {
116			compatible = "atmel,sam-usart";
117			reg = <0x4009c000 0x130>;
118			interrupts = <18 0>;
119			clocks = <&pmc PMC_TYPE_PERIPHERAL 18>;
120			status = "disabled";
121		};
122
123		usart2: usart@400a0000 {
124			compatible = "atmel,sam-usart";
125			reg = <0x400a0000 0x130>;
126			interrupts = <19 0>;
127			clocks = <&pmc PMC_TYPE_PERIPHERAL 19>;
128			status = "disabled";
129		};
130
131		usart3: usart@400a4000 {
132			compatible = "atmel,sam-usart";
133			reg = <0x400a4000 0x130>;
134			interrupts = <20 0>;
135			clocks = <&pmc PMC_TYPE_PERIPHERAL 20>;
136			status = "disabled";
137		};
138
139		pinctrl: pinctrl@400e0e00 {
140			compatible = "atmel,sam-pinctrl";
141			#address-cells = <1>;
142			#size-cells = <1>;
143			ranges = <0x400e0e00 0x400e0e00 0xc00>;
144
145			pioa: pio@400e0e00 {
146				compatible = "atmel,sam-gpio";
147				reg = <0x400e0e00 0x190>;
148				interrupts = <11 1>;
149				clocks = <&pmc PMC_TYPE_PERIPHERAL 11>;
150				gpio-controller;
151				#gpio-cells = <2>;
152				#atmel,pin-cells = <2>;
153			};
154
155			piob: pio@400e1000 {
156				compatible = "atmel,sam-gpio";
157				reg = <0x400e1000 0x190>;
158				interrupts = <12 1>;
159				clocks = <&pmc PMC_TYPE_PERIPHERAL 12>;
160				gpio-controller;
161				#gpio-cells = <2>;
162				#atmel,pin-cells = <2>;
163			};
164
165			pioc: pio@400e1200 {
166				compatible = "atmel,sam-gpio";
167				reg = <0x400e1200 0x190>;
168				interrupts = <13 1>;
169				clocks = <&pmc PMC_TYPE_PERIPHERAL 13>;
170				gpio-controller;
171				#gpio-cells = <2>;
172				#atmel,pin-cells = <2>;
173			};
174
175			piod: pio@400e1400 {
176				compatible = "atmel,sam-gpio";
177				reg = <0x400e1400 0x190>;
178				interrupts = <14 1>;
179				clocks = <&pmc PMC_TYPE_PERIPHERAL 14>;
180				gpio-controller;
181				#gpio-cells = <2>;
182				#atmel,pin-cells = <2>;
183			};
184
185			pioe: pio@400e1600 {
186				compatible = "atmel,sam-gpio";
187				reg = <0x400e1600 0x190>;
188				interrupts = <15 1>;
189				clocks = <&pmc PMC_TYPE_PERIPHERAL 15>;
190				gpio-controller;
191				#gpio-cells = <2>;
192				#atmel,pin-cells = <2>;
193			};
194		};
195
196		tc0: tc@40080000 {
197			compatible = "atmel,sam-tc";
198			reg = <0x40080000 0x100>;
199			interrupts = <27 0
200				      28 0
201				      29 0>;
202			clocks = <&pmc PMC_TYPE_PERIPHERAL 27>,
203				 <&pmc PMC_TYPE_PERIPHERAL 28>,
204				 <&pmc PMC_TYPE_PERIPHERAL 29>;
205			status = "disabled";
206		};
207
208		tc1: tc@40084000 {
209			compatible = "atmel,sam-tc";
210			reg = <0x40084000 0x100>;
211			interrupts = <30 0
212				      31 0
213				      32 0>;
214			clocks = <&pmc PMC_TYPE_PERIPHERAL 30>,
215				 <&pmc PMC_TYPE_PERIPHERAL 31>,
216				 <&pmc PMC_TYPE_PERIPHERAL 32>;
217			status = "disabled";
218		};
219
220		tc2: tc@40088000 {
221			compatible = "atmel,sam-tc";
222			reg = <0x40088000 0x100>;
223			interrupts = <33 0
224				      34 0
225				      35 0>;
226			clocks = <&pmc PMC_TYPE_PERIPHERAL 33>,
227				 <&pmc PMC_TYPE_PERIPHERAL 34>,
228				 <&pmc PMC_TYPE_PERIPHERAL 35>;
229			status = "disabled";
230		};
231
232		pwm0: pwm@40094000 {
233			compatible = "atmel,sam-pwm";
234			reg = <0x40094000 0x4000>;
235			interrupts = <36 1>;
236			clocks = <&pmc PMC_TYPE_PERIPHERAL 36>;
237			prescaler = <10>;
238			divider = <1>;
239			#pwm-cells = <3>;
240			status = "disabled";
241		};
242
243		rstc: rstc@400e1a00 {
244			compatible = "atmel,sam-rstc";
245			reg = <0x400e1a00 0x10>;
246			clocks = <&pmc PMC_TYPE_PERIPHERAL 1>;
247			user-nrst;
248		};
249	};
250};
251
252&nvic {
253	arm,num-irq-priority-bits = <4>;
254};
255