1/*
2 * Copyright (c) 2024 STMicroelectronics
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include <arm/armv8.1-m.dtsi>
8#include <zephyr/dt-bindings/adc/adc.h>
9#include <zephyr/dt-bindings/adc/stm32l4_adc.h>
10#include <zephyr/dt-bindings/clock/stm32n6_clock.h>
11#include <zephyr/dt-bindings/dma/stm32_dma.h>
12#include <zephyr/dt-bindings/i2c/i2c.h>
13#include <zephyr/dt-bindings/reset/stm32n6_reset.h>
14#include <zephyr/dt-bindings/memory-controller/stm32-fmc-nor-psram.h>
15#include <zephyr/dt-bindings/gpio/gpio.h>
16#include <freq.h>
17
18/ {
19	cpus {
20		#address-cells = <1>;
21		#size-cells = <0>;
22
23		cpu0: cpu@0 {
24			device_type = "cpu";
25			compatible = "arm,cortex-m55";
26			reg = <0>;
27			#address-cells = <1>;
28			#size-cells = <1>;
29
30			mpu: mpu@e000ed90 {
31				compatible = "arm,armv8.1m-mpu";
32				reg = <0xe000ed90 0x40>;
33			};
34		};
35	};
36
37	axisram1: memory@34000000 {
38		compatible = "mmio-sram";
39	};
40
41	axisram2: memory@34180400 {
42		compatible = "mmio-sram";
43	};
44
45	clocks {
46		clk_hse: clk-hse {
47			#clock-cells = <0>;
48			compatible = "st,stm32n6-hse-clock";
49			status = "disabled";
50		};
51
52		clk_hsi: clk-hsi {
53			#clock-cells = <0>;
54			compatible = "st,stm32h7-hsi-clock";
55			clock-frequency = <DT_FREQ_M(64)>;
56			status = "disabled";
57		};
58
59		clk_lse: clk-lse {
60			#clock-cells = <0>;
61			compatible = "st,stm32-lse-clock";
62			clock-frequency = <32768>;
63			driving-capability = <2>;
64			status = "disabled";
65		};
66
67		clk_lsi: clk-lsi {
68			#clock-cells = <0>;
69			compatible = "fixed-clock";
70			clock-frequency = <DT_FREQ_K(32)>;
71			status = "disabled";
72		};
73
74		pll1: pll: pll {
75			#clock-cells = <0>;
76			compatible = "st,stm32n6-pll-clock";
77			status = "disabled";
78		};
79
80		pll2: pll2 {
81			#clock-cells = <0>;
82			compatible = "st,stm32n6-pll-clock";
83			status = "disabled";
84		};
85
86		pll3: pll3 {
87			#clock-cells = <0>;
88			compatible = "st,stm32n6-pll-clock";
89			status = "disabled";
90		};
91
92		pll4: pll4 {
93			#clock-cells = <0>;
94			compatible = "st,stm32n6-pll-clock";
95			status = "disabled";
96		};
97
98		cpusw: cpusw {
99			#clock-cells = <0>;
100			compatible = "st,stm32n6-cpu-clock-mux", "st,stm32-clock-mux";
101			status = "disabled";
102		};
103
104		perck: perck {
105			#clock-cells = <0>;
106			compatible = "st,stm32-clock-mux";
107			status = "disabled";
108		};
109
110		ic1: ic1 {
111			#clock-cells = <0>;
112			compatible = "st,stm32n6-ic-clock-mux";
113			status = "disabled";
114		};
115
116		ic2: ic2 {
117			#clock-cells = <0>;
118			compatible = "st,stm32n6-ic-clock-mux";
119			status = "disabled";
120		};
121
122		ic3: ic3 {
123			#clock-cells = <0>;
124			compatible = "st,stm32n6-ic-clock-mux";
125			status = "disabled";
126		};
127
128		ic4: ic4 {
129			#clock-cells = <0>;
130			compatible = "st,stm32n6-ic-clock-mux";
131			status = "disabled";
132		};
133
134		ic5: ic5 {
135			#clock-cells = <0>;
136			compatible = "st,stm32n6-ic-clock-mux";
137			status = "disabled";
138		};
139
140		ic6: ic6 {
141			#clock-cells = <0>;
142			compatible = "st,stm32n6-ic-clock-mux";
143			status = "disabled";
144		};
145
146		ic7: ic7 {
147			#clock-cells = <0>;
148			compatible = "st,stm32n6-ic-clock-mux";
149			status = "disabled";
150		};
151
152		ic8: ic8 {
153			#clock-cells = <0>;
154			compatible = "st,stm32n6-ic-clock-mux";
155			status = "disabled";
156		};
157
158		ic9: ic9 {
159			#clock-cells = <0>;
160			compatible = "st,stm32n6-ic-clock-mux";
161			status = "disabled";
162		};
163
164		ic10: ic10 {
165			#clock-cells = <0>;
166			compatible = "st,stm32n6-ic-clock-mux";
167			status = "disabled";
168		};
169
170		ic11: ic11 {
171			#clock-cells = <0>;
172			compatible = "st,stm32n6-ic-clock-mux";
173			status = "disabled";
174		};
175
176		ic12: ic12 {
177			#clock-cells = <0>;
178			compatible = "st,stm32n6-ic-clock-mux";
179			status = "disabled";
180		};
181
182		ic13: ic13 {
183			#clock-cells = <0>;
184			compatible = "st,stm32n6-ic-clock-mux";
185			status = "disabled";
186		};
187
188		ic14: ic14 {
189			#clock-cells = <0>;
190			compatible = "st,stm32n6-ic-clock-mux";
191			status = "disabled";
192		};
193
194		ic15: ic15 {
195			#clock-cells = <0>;
196			compatible = "st,stm32n6-ic-clock-mux";
197			status = "disabled";
198		};
199
200		ic16: ic16 {
201			#clock-cells = <0>;
202			compatible = "st,stm32n6-ic-clock-mux";
203			status = "disabled";
204		};
205
206		ic17: ic17 {
207			#clock-cells = <0>;
208			compatible = "st,stm32n6-ic-clock-mux";
209			status = "disabled";
210		};
211
212		ic18: ic18 {
213			#clock-cells = <0>;
214			compatible = "st,stm32n6-ic-clock-mux";
215			status = "disabled";
216		};
217
218		ic19: ic19 {
219			#clock-cells = <0>;
220			compatible = "st,stm32n6-ic-clock-mux";
221			status = "disabled";
222		};
223
224		ic20: ic20 {
225			#clock-cells = <0>;
226			compatible = "st,stm32n6-ic-clock-mux";
227			status = "disabled";
228		};
229	};
230
231	soc {
232		rcc: rcc@56028000 {
233			compatible = "st,stm32n6-rcc";
234			clocks-controller;
235			#clock-cells = <2>;
236			reg = <0x56028000 0x2000>;
237
238			rctl: reset-controller {
239				compatible = "st,stm32-rcc-rctl";
240				#reset-cells = <1>;
241			};
242		};
243
244		exti: interrupt-controller@56025000 {
245			compatible = "st,stm32g0-exti", "st,stm32-exti";
246			interrupt-controller;
247			#interrupt-cells = <1>;
248			#address-cells = <1>;
249			reg = <0x56025000 0x400>;
250			num-lines = <16>;
251			interrupts = <20 0>, <21 0>, <22 0>, <23 0>,
252				     <24 0>, <25 0>, <26 0>, <27 0>,
253				     <28 0>, <29 0>, <30 0>, <31 0>,
254				     <32 0>, <33 0>, <34 0>, <35 0>;
255			interrupt-names = "line0", "line1", "line2", "line3",
256					  "line4", "line5", "line6", "line7",
257					  "line8", "line9", "line10", "line11",
258					  "line12", "line13", "line14", "line15";
259			line-ranges = <0 1>, <1 1>, <2 1>, <3 1>,
260				      <4 1>, <5 1>, <6 1>, <7 1>,
261				      <8 1>, <9 1>, <10 1>, <11 1>,
262				      <12 1>, <13 1>, <14 1>, <15 1>;
263		};
264
265		pinctrl: pin-controller@56020000 {
266			compatible = "st,stm32-pinctrl";
267			#address-cells = <1>;
268			#size-cells = <1>;
269			reg = <0x56020000 0x2000>;
270
271			gpioa: gpio@56020000 {
272				compatible = "st,stm32-gpio";
273				gpio-controller;
274				#gpio-cells = <2>;
275				reg = <0x56020000 0x400>;
276				clocks = <&rcc STM32_CLOCK(AHB4, 0)>;
277			};
278
279			gpiob: gpio@56020400 {
280				compatible = "st,stm32-gpio";
281				gpio-controller;
282				#gpio-cells = <2>;
283				reg = <0x56020400 0x400>;
284				clocks = <&rcc STM32_CLOCK(AHB4, 1)>;
285			};
286
287			gpioc: gpio@56020800 {
288				compatible = "st,stm32-gpio";
289				gpio-controller;
290				#gpio-cells = <2>;
291				reg = <0x56020800 0x400>;
292				clocks = <&rcc STM32_CLOCK(AHB4, 2)>;
293			};
294
295			gpiod: gpio@56020c00 {
296				compatible = "st,stm32-gpio";
297				gpio-controller;
298				#gpio-cells = <2>;
299				reg = <0x56020c00 0x400>;
300				clocks = <&rcc STM32_CLOCK(AHB4, 3)>;
301			};
302
303			gpioe: gpio@56021000 {
304				compatible = "st,stm32-gpio";
305				gpio-controller;
306				#gpio-cells = <2>;
307				reg = <0x56021000 0x400>;
308				clocks = <&rcc STM32_CLOCK(AHB4, 4)>;
309			};
310
311			gpiof: gpio@56021400 {
312				compatible = "st,stm32-gpio";
313				gpio-controller;
314				#gpio-cells = <2>;
315				reg = <0x56021400 0x400>;
316				clocks = <&rcc STM32_CLOCK(AHB4, 5)>;
317			};
318
319			gpiog: gpio@56021800 {
320				compatible = "st,stm32-gpio";
321				gpio-controller;
322				#gpio-cells = <2>;
323				reg = <0x56021800 0x400>;
324				clocks = <&rcc STM32_CLOCK(AHB4, 6)>;
325			};
326
327			gpioh: gpio@56021c00 {
328				compatible = "st,stm32-gpio";
329				gpio-controller;
330				#gpio-cells = <2>;
331				reg = <0x56021c00 0x400>;
332				clocks = <&rcc STM32_CLOCK(AHB4, 7)>;
333			};
334
335			gpion: gpio@56023400 {
336				compatible = "st,stm32-gpio";
337				gpio-controller;
338				#gpio-cells = <2>;
339				reg = <0x56023400 0x400>;
340				clocks = <&rcc STM32_CLOCK(AHB4, 13)>;
341			};
342
343			gpioo: gpio@56023800 {
344				compatible = "st,stm32-gpio";
345				gpio-controller;
346				#gpio-cells = <2>;
347				reg = <0x56023800 0x400>;
348				clocks = <&rcc STM32_CLOCK(AHB4, 14)>;
349			};
350
351			gpiop: gpio@56023c00 {
352				compatible = "st,stm32-gpio";
353				gpio-controller;
354				#gpio-cells = <2>;
355				reg = <0x56023C00 0x400>;
356				clocks = <&rcc STM32_CLOCK(AHB4, 15)>;
357			};
358
359			gpioq: gpio@56024000 {
360				compatible = "st,stm32-gpio";
361				gpio-controller;
362				#gpio-cells = <2>;
363				reg = <0x56024000 0x400>;
364				clocks = <&rcc STM32_CLOCK(AHB4, 16)>;
365			};
366		};
367
368		adc1: adc@50022000 {
369			compatible = "st,stm32n6-adc", "st,stm32-adc";
370			reg = <0x50022000 0x400>;
371			clocks = <&rcc STM32_CLOCK(AHB1, 5)>;
372			interrupts = <46 0>;
373			status = "disabled";
374			#io-channel-cells = <1>;
375			resolutions = <STM32_ADC_RES(12, 0x00)
376				       STM32_ADC_RES(10, 0x01)
377				       STM32_ADC_RES(8, 0x02)
378				       STM32_ADC_RES(6, 0x03)>;
379			sampling-times = <2 3 7 12 14 47 247 1500>;
380			st,adc-sequencer = "FULLY_CONFIGURABLE";
381			st,adc-oversampler = "OVERSAMPLER_EXTENDED";
382		};
383
384		adc2: adc@50022100 {
385			compatible = "st,stm32n6-adc", "st,stm32-adc";
386			reg = <0x50022100 0x300>;
387			clocks = <&rcc STM32_CLOCK(AHB1, 5)>;
388			interrupts = <46 0>;
389			status = "disabled";
390			#io-channel-cells = <1>;
391			resolutions = <STM32_ADC_RES(12, 0x00)
392				       STM32_ADC_RES(10, 0x01)
393				       STM32_ADC_RES(8, 0x02)
394				       STM32_ADC_RES(6, 0x03)>;
395			sampling-times = <2 3 7 12 14 47 247 1500>;
396			st,adc-sequencer = "FULLY_CONFIGURABLE";
397			st,adc-oversampler = "OVERSAMPLER_EXTENDED";
398		};
399
400		fdcan1: can@5000a000 {
401			compatible = "st,stm32h7-fdcan";
402			reg = <0x5000A000 0x400>, <0x5000C000 0xd54>;
403			reg-names = "m_can", "message_ram";
404			clocks = <&rcc STM32_CLOCK(APB1_2, 8)>;
405			interrupts = <180 0>, <181 0>, <186 0>;
406			interrupt-names = "int0", "int1", "calib";
407			bosch,mram-cfg = <0x0 28 8 3 3 0 3 3>;
408			status = "disabled";
409		};
410
411		fdcan2: can@5000a400 {
412			compatible = "st,stm32h7-fdcan";
413			reg = <0x5000A400 0x400>, <0x5000C000 0x1aa8>;
414			reg-names = "m_can", "message_ram";
415			clocks = <&rcc STM32_CLOCK(APB1_2, 8)>;
416			interrupts = <182 0>, <183 0>;
417			interrupt-names = "int0", "int1";
418			bosch,mram-cfg = <0xd54 28 8 3 3 0 3 3>;
419			status = "disabled";
420		};
421
422		fdcan3: can@5000e800 {
423			compatible = "st,stm32h7-fdcan";
424			reg = <0x5000E800 0x400>, <0x5000C000 0x2800>;
425			reg-names = "m_can", "message_ram";
426			clocks = <&rcc STM32_CLOCK(APB1_2, 8)>;
427			interrupts = <184 0>, <185 0>;
428			interrupt-names = "int0", "int1";
429			bosch,mram-cfg = <0x1aa8 28 8 3 3 0 3 3>;
430			status = "disabled";
431		};
432
433		usart1: serial@52001000 {
434			compatible = "st,stm32-usart", "st,stm32-uart";
435			reg = <0x52001000 0x400>;
436			clocks = <&rcc STM32_CLOCK(APB2, 4)>;
437			resets = <&rctl STM32_RESET(APB2, 4)>;
438			interrupts = <159 0>;
439			status = "disabled";
440		};
441
442		usart2: serial@50004400 {
443			compatible = "st,stm32-usart", "st,stm32-uart";
444			reg = <0x50004400 0x400>;
445			clocks = <&rcc STM32_CLOCK(APB1, 17)>;
446			resets = <&rctl STM32_RESET(APB1L, 17)>;
447			interrupts = <160 0>;
448			status = "disabled";
449		};
450
451		usart3: serial@50004800 {
452			compatible = "st,stm32-usart", "st,stm32-uart";
453			reg = <0x50004800 0x400>;
454			clocks = <&rcc STM32_CLOCK(APB1, 18)>;
455			resets = <&rctl STM32_RESET(APB1L, 18)>;
456			interrupts = <161 0>;
457			status = "disabled";
458		};
459
460		uart4: serial@50004c00 {
461			compatible = "st,stm32-usart", "st,stm32-uart";
462			reg = <0x50004C00 0x400>;
463			clocks = <&rcc STM32_CLOCK(APB1, 19)>;
464			resets = <&rctl STM32_RESET(APB1L, 19)>;
465			interrupts = <162 0>;
466			status = "disabled";
467		};
468
469		uart5: serial@50005000 {
470			compatible = "st,stm32-usart", "st,stm32-uart";
471			reg = <0x50005000 0x400>;
472			clocks = <&rcc STM32_CLOCK(APB1, 20)>;
473			resets = <&rctl STM32_RESET(APB1L, 20)>;
474			interrupts = <163 0>;
475			status = "disabled";
476		};
477
478		usart6: serial@52001400 {
479			compatible = "st,stm32-usart", "st,stm32-uart";
480			reg = <0x52001400 0x400>;
481			clocks = <&rcc STM32_CLOCK(APB2, 5)>;
482			resets = <&rctl STM32_RESET(APB2, 5)>;
483			interrupts = <164 0>;
484			status = "disabled";
485		};
486
487		uart7: serial@50007800 {
488			compatible = "st,stm32-usart", "st,stm32-uart";
489			reg = <0x50007800 0x400>;
490			clocks = <&rcc STM32_CLOCK(APB1, 30)>;
491			resets = <&rctl STM32_RESET(APB1L, 30)>;
492			interrupts = <165 0>;
493			status = "disabled";
494		};
495
496		uart8: serial@50007c00 {
497			compatible = "st,stm32-usart", "st,stm32-uart";
498			reg = <0x50007C00 0x400>;
499			clocks = <&rcc STM32_CLOCK(APB1, 31)>;
500			resets = <&rctl STM32_RESET(APB1L, 31)>;
501			interrupts = <166 0>;
502			status = "disabled";
503		};
504
505		uart9: serial@52001800 {
506			compatible = "st,stm32-usart", "st,stm32-uart";
507			reg = <0x52001800 0x400>;
508			clocks = <&rcc STM32_CLOCK(APB2, 6)>;
509			resets = <&rctl STM32_RESET(APB2, 6)>;
510			interrupts = <167 0>;
511			status = "disabled";
512		};
513
514		usart10: serial@52001c00 {
515			compatible = "st,stm32-usart", "st,stm32-uart";
516			reg = <0x52001C00 0x400>;
517			clocks = <&rcc STM32_CLOCK(APB2, 7)>;
518			resets = <&rctl STM32_RESET(APB2, 7)>;
519			interrupts = <168 0>;
520			status = "disabled";
521		};
522
523		i2c1: i2c@50005400 {
524			compatible = "st,stm32-i2c-v2";
525			clock-frequency = <I2C_BITRATE_STANDARD>;
526			#address-cells = <1>;
527			#size-cells = <0>;
528			reg = <0x50005400 0x400>;
529			clocks = <&rcc STM32_CLOCK(APB1, 21)>;
530			interrupts = <100 0>, <101 0>;
531			interrupt-names = "event", "error";
532			status = "disabled";
533		};
534
535		i2c2: i2c@50005800 {
536			compatible = "st,stm32-i2c-v2";
537			clock-frequency = <I2C_BITRATE_STANDARD>;
538			#address-cells = <1>;
539			#size-cells = <0>;
540			reg = <0x50005800 0x400>;
541			clocks = <&rcc STM32_CLOCK(APB1, 22)>;
542			interrupts = <102 0>, <103 0>;
543			interrupt-names = "event", "error";
544			status = "disabled";
545		};
546
547		i2c3: i2c@50005c00 {
548			compatible = "st,stm32-i2c-v2";
549			clock-frequency = <I2C_BITRATE_STANDARD>;
550			#address-cells = <1>;
551			#size-cells = <0>;
552			reg = <0x50005C00 0x400>;
553			clocks = <&rcc STM32_CLOCK(APB1, 23)>;
554			interrupts = <104 0>, <105 0>;
555			interrupt-names = "event", "error";
556			status = "disabled";
557		};
558
559		i2c4: i2c@56001c00 {
560			compatible = "st,stm32-i2c-v2";
561			clock-frequency = <I2C_BITRATE_STANDARD>;
562			#address-cells = <1>;
563			#size-cells = <0>;
564			reg = <0x56001C00 0x400>;
565			clocks = <&rcc STM32_CLOCK(APB4, 7)>;
566			interrupts = <106 0>, <107 0>;
567			interrupt-names = "event", "error";
568			status = "disabled";
569		};
570
571		spi1: spi@52003000 {
572			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
573			#address-cells = <1>;
574			#size-cells = <0>;
575			reg = <0x52003000 0x400>;
576			interrupts = <153 0>;
577			clocks = <&rcc STM32_CLOCK(APB2, 12)>;
578			status = "disabled";
579		};
580
581		spi2: spi@50003800 {
582			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
583			#address-cells = <1>;
584			#size-cells = <0>;
585			reg = <0x50003800 0x400>;
586			interrupts = <154 0>;
587			clocks = <&rcc STM32_CLOCK(APB1, 14)>;
588			status = "disabled";
589		};
590
591		spi3: spi@50003c00 {
592			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
593			#address-cells = <1>;
594			#size-cells = <0>;
595			reg = <0x50003C00 0x400>;
596			interrupts = <155 0>;
597			clocks = <&rcc STM32_CLOCK(APB1, 15)>;
598			status = "disabled";
599		};
600
601		spi4: spi@52003400 {
602			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
603			#address-cells = <1>;
604			#size-cells = <0>;
605			reg = <0x52003400 0x400>;
606			interrupts = <156 0>;
607			clocks = <&rcc STM32_CLOCK(APB2, 13)>;
608			status = "disabled";
609		};
610
611		spi5: spi@52005000 {
612			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
613			#address-cells = <1>;
614			#size-cells = <0>;
615			reg = <0x52005000 0x400>;
616			interrupts = <157 0>;
617			clocks = <&rcc STM32_CLOCK(APB2, 20)>;
618			status = "disabled";
619		};
620
621		spi6: spi@56001400 {
622			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
623			#address-cells = <1>;
624			#size-cells = <0>;
625			reg = <0x56001400 0x400>;
626			interrupts = <158 0>;
627			clocks = <&rcc STM32_CLOCK(APB4, 5)>;
628			status = "disabled";
629		};
630
631		gpdma1: dma@50021000 {
632			compatible = "st,stm32u5-dma";
633			#dma-cells = <3>;
634			reg = <0x50021000 0x1000>;
635			clocks = <&rcc STM32_CLOCK(AHB1, 4)>;
636			interrupts = <84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0
637				      92 0 93 0 94 0 95 0 96 0 97 0 98 0 99 0>;
638			dma-channels = <16>;
639			dma-requests = <144>;
640			dma-offset = <0>;
641			status = "disabled";
642		};
643
644		mac: ethernet@58036000 {
645			compatible = "st,stm32n6-ethernet", "st,stm32h7-ethernet",
646				"st,stm32-ethernet";
647			reg = <0x58036000 0x8000>;
648			interrupts = <179 0>;
649			clock-names = "stmmaceth", "mac-clk-tx",
650				"mac-clk-rx";
651			clocks = <&rcc STM32_CLOCK(AHB5, 22)>,
652				 <&rcc STM32_CLOCK(AHB5, 23)>,
653				 <&rcc STM32_CLOCK(AHB5, 24)>;
654			status = "disabled";
655
656			mdio: mdio {
657				compatible = "st,stm32-mdio";
658				#address-cells = <1>;
659				#size-cells = <0>;
660				status = "disabled";
661			};
662		};
663	};
664};
665
666&nvic {
667	arm,num-irq-priority-bits = <4>;
668};
669