1/*
2 * Copyright (c) 2023 STMicroelectronics
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include <st/h5/stm32h5.dtsi>
8#include <zephyr/dt-bindings/flash_controller/ospi.h>
9/* keep both header files for compatibility */
10#include <zephyr/dt-bindings/flash_controller/xspi.h>
11#include <mem.h>
12
13/ {
14	clocks {
15		/* The pll scheme is similar to stm32u5 */
16		pll3: pll3 {
17			#clock-cells = <0>;
18			compatible = "st,stm32u5-pll-clock";
19			status = "disabled";
20		};
21	};
22
23	soc {
24		compatible = "st,stm32h562", "st,stm32h5", "simple-bus";
25
26		pinctrl: pin-controller@42020000 {
27			gpioe: gpio@42021000 {
28				compatible = "st,stm32-gpio";
29				gpio-controller;
30				#gpio-cells = <2>;
31				reg = <0x42021000 0x400>;
32				clocks = <&rcc STM32_CLOCK(AHB2, 4U)>;
33			};
34
35			gpiof: gpio@42021400 {
36				compatible = "st,stm32-gpio";
37				gpio-controller;
38				#gpio-cells = <2>;
39				reg = <0x42021400 0x400>;
40				clocks = <&rcc STM32_CLOCK(AHB2, 5U)>;
41			};
42
43			gpiog: gpio@42021800 {
44				compatible = "st,stm32-gpio";
45				gpio-controller;
46				#gpio-cells = <2>;
47				reg = <0x42021800 0x400>;
48				clocks = <&rcc STM32_CLOCK(AHB2, 6U)>;
49			};
50
51			gpioi: gpio@42022000 {
52				compatible = "st,stm32-gpio";
53				gpio-controller;
54				#gpio-cells = <2>;
55				reg = <0x42022000 0x400>;
56				clocks = <&rcc STM32_CLOCK(AHB2, 8U)>;
57			};
58		};
59
60		sram1: memory@20000000 {
61			compatible = "zephyr,memory-region", "mmio-sram";
62			reg = <0x20000000 DT_SIZE_K(256)>;
63			zephyr,memory-region = "SRAM1";
64		};
65
66		sram2: memory@20040000 {
67			compatible = "zephyr,memory-region", "mmio-sram";
68			reg = <0x20040000 DT_SIZE_K(64)>;
69			zephyr,memory-region = "SRAM2";
70		};
71
72		sram3: memory@20050000 {
73			compatible = "zephyr,memory-region", "mmio-sram";
74			reg = <0x20050000 DT_SIZE_K(320)>;
75			zephyr,memory-region = "SRAM3";
76		};
77
78		backup_sram: memory@40036400 {
79			reg = <0x40036400 DT_SIZE_K(4)>;
80		};
81
82		lptim3: timers@44004800 {
83			compatible = "st,stm32-lptim";
84			clocks = <&rcc STM32_CLOCK(APB3, 12U)>;
85			#address-cells = <1>;
86			#size-cells = <0>;
87			reg = <0x44004800 0x400>;
88			interrupts = <127 1>;
89			interrupt-names = "wakeup";
90			status = "disabled";
91		};
92
93		lptim4: timers@44004c00 {
94			compatible = "st,stm32-lptim";
95			clocks = <&rcc STM32_CLOCK(APB3, 13U)>;
96			#address-cells = <1>;
97			#size-cells = <0>;
98			reg = <0x44004c00 0x400>;
99			interrupts = <128 1>;
100			interrupt-names = "wakeup";
101			status = "disabled";
102		};
103
104		lptim5: timers@44005000 {
105			compatible = "st,stm32-lptim";
106			clocks = <&rcc STM32_CLOCK(APB3, 14U)>;
107			#address-cells = <1>;
108			#size-cells = <0>;
109			reg = <0x44005000 0x400>;
110			interrupts = <129 1>;
111			interrupt-names = "wakeup";
112			status = "disabled";
113		};
114
115		lptim6: timers@44005400 {
116			compatible = "st,stm32-lptim";
117			clocks = <&rcc STM32_CLOCK(APB3, 15U)>;
118			#address-cells = <1>;
119			#size-cells = <0>;
120			reg = <0x44005400 0x400>;
121			interrupts = <130 1>;
122			interrupt-names = "wakeup";
123			status = "disabled";
124		};
125
126		uart4: serial@40004c00 {
127			compatible = "st,stm32-uart";
128			reg = <0x40004c00 0x400>;
129			clocks = <&rcc STM32_CLOCK(APB1, 19U)>;
130			resets = <&rctl STM32_RESET(APB1L, 19U)>;
131			interrupts = <61 0>;
132			status = "disabled";
133		};
134
135		uart5: serial@40005000 {
136			compatible = "st,stm32-uart";
137			reg = <0x40005000 0x400>;
138			clocks = <&rcc STM32_CLOCK(APB1, 20U)>;
139			resets = <&rctl STM32_RESET(APB1L, 20U)>;
140			interrupts = <62 0>;
141			status = "disabled";
142		};
143
144		uart7: serial@40007800 {
145			compatible = "st,stm32-uart";
146			reg = <0x40007800 0x400>;
147			clocks = <&rcc STM32_CLOCK(APB1, 30U)>;
148			resets = <&rctl STM32_RESET(APB1L, 30U)>;
149			interrupts = <98 0>;
150			status = "disabled";
151		};
152
153		uart8: serial@40007c00 {
154			compatible = "st,stm32-uart";
155			reg = <0x40007c00 0x400>;
156			clocks = <&rcc STM32_CLOCK(APB1, 31U)>;
157			resets = <&rctl STM32_RESET(APB1L, 31U)>;
158			interrupts = <99 0>;
159			status = "disabled";
160		};
161
162		uart9: serial@40008000 {
163			compatible = "st,stm32-uart";
164			reg = <0x40008000 0x400>;
165			clocks = <&rcc STM32_CLOCK(APB1_2, 0U)>;
166			resets = <&rctl STM32_RESET(APB1H, 0U)>;
167			interrupts = <100 0>;
168			status = "disabled";
169		};
170
171		usart6: serial@40006400 {
172			compatible = "st,stm32-usart", "st,stm32-uart";
173			reg = <0x40006400 0x400>;
174			clocks = <&rcc STM32_CLOCK(APB1, 25U)>;
175			resets = <&rctl STM32_RESET(APB1L, 25U)>;
176			interrupts = <85 0>;
177			status = "disabled";
178		};
179
180		usart10: serial@40006800 {
181			compatible = "st,stm32-usart", "st,stm32-uart";
182			reg = <0x40006800 0x400>;
183			clocks = <&rcc STM32_CLOCK(APB1, 26U)>;
184			resets = <&rctl STM32_RESET(APB1L, 26U)>;
185			interrupts = <86 0>;
186			status = "disabled";
187		};
188
189		usart11: serial@40006c00 {
190			compatible = "st,stm32-usart", "st,stm32-uart";
191			reg = <0x40006c00 0x400>;
192			clocks = <&rcc STM32_CLOCK(APB1, 27U)>;
193			resets = <&rctl STM32_RESET(APB1L, 27U)>;
194			interrupts = <87 0>;
195			status = "disabled";
196		};
197
198		uart12: serial@40008400 {
199			compatible = "st,stm32-uart";
200			reg = <0x40008400 0x400>;
201			clocks = <&rcc STM32_CLOCK(APB1_2, 1U)>;
202			resets = <&rctl STM32_RESET(APB1H, 1U)>;
203			interrupts = <101 0>;
204			status = "disabled";
205		};
206
207		i2c3: i2c@44002800 {
208			compatible = "st,stm32-i2c-v2";
209			clock-frequency = <I2C_BITRATE_STANDARD>;
210			#address-cells = <1>;
211			#size-cells = <0>;
212			reg = <0x44002800 0x400>;
213			clocks = <&rcc STM32_CLOCK(APB3, 7U)>;
214			interrupts = <80 0>, <81 0>;
215			interrupt-names = "event", "error";
216			status = "disabled";
217		};
218
219		i2c4: i2c@44002c00 {
220			compatible = "st,stm32-i2c-v2";
221			clock-frequency = <I2C_BITRATE_STANDARD>;
222			#address-cells = <1>;
223			#size-cells = <0>;
224			reg = <0x44002c00 0x400>;
225			clocks = <&rcc STM32_CLOCK(APB3, 8U)>;
226			interrupts = <125 0>, <126 0>;
227			interrupt-names = "event", "error";
228			status = "disabled";
229		};
230
231		spi4: spi@40014c00 {
232			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
233			#address-cells = <1>;
234			#size-cells = <0>;
235			reg = <0x40014c00 0x400>;
236			interrupts = <82 5>;
237			clocks = <&rcc STM32_CLOCK(APB2, 19U)>;
238			status = "disabled";
239		};
240
241		spi5: spi@44002000 {
242			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
243			#address-cells = <1>;
244			#size-cells = <0>;
245			reg = <0x44002000 0x400>;
246			interrupts = <83 5>;
247			clocks = <&rcc STM32_CLOCK(APB3, 5U)>;
248			status = "disabled";
249		};
250
251		spi6: spi@40015000 {
252			compatible = "st,stm32h7-spi", "st,stm32-spi-fifo", "st,stm32-spi";
253			#address-cells = <1>;
254			#size-cells = <0>;
255			reg = <0x40015000 0x400>;
256			interrupts = <84 5>;
257			clocks = <&rcc STM32_CLOCK(APB2, 20U)>;
258			status = "disabled";
259		};
260
261		xspi1: xspi@47001400 {
262			compatible = "st,stm32-xspi";
263			reg = <0x47001400 0x400>;
264			interrupts = <78 0>;
265			clock-names = "xspix", "xspi-ker";
266			clocks = <&rcc STM32_CLOCK(AHB4, 20U)>,
267				<&rcc STM32_SRC_PLL1_Q OCTOSPI1_SEL(1)>;
268			#address-cells = <1>;
269			#size-cells = <0>;
270			status = "disabled";
271		};
272
273		adc2: adc@42028100 {
274			compatible = "st,stm32-adc";
275			reg = <0x42028100 0x400>;
276			clocks = <&rcc STM32_CLOCK(AHB2, 10U)>;
277			interrupts = <69 0>;
278			status = "disabled";
279			vref-mv = <3300>;
280			#io-channel-cells = <1>;
281			resolutions = <STM32_ADC_RES(12, 0x00)
282					STM32_ADC_RES(10, 0x01)
283					STM32_ADC_RES(8, 0x02)
284					STM32_ADC_RES(6, 0x03)>;
285			sampling-times = <3 7 13 25 48 93 248 641>;
286			st,adc-sequencer = "FULLY_CONFIGURABLE";
287			st,adc-oversampler = "OVERSAMPLER_MINIMAL";
288		};
289
290		timers4: timers@40000800 {
291			compatible = "st,stm32-timers";
292			reg = <0x40000800 0x400>;
293			clocks = <&rcc STM32_CLOCK(APB1, 2U)>;
294			resets = <&rctl STM32_RESET(APB1L, 2U)>;
295			interrupts = <47 0>;
296			interrupt-names = "global";
297			status = "disabled";
298
299			pwm {
300				compatible = "st,stm32-pwm";
301				status = "disabled";
302				#pwm-cells = <3>;
303			};
304
305			counter {
306				compatible = "st,stm32-counter";
307				status = "disabled";
308			};
309		};
310
311		timers5: timers@40000c00 {
312			compatible = "st,stm32-timers";
313			reg = <0x40000c00 0x400>;
314			clocks = <&rcc STM32_CLOCK(APB1, 3U)>;
315			resets = <&rctl STM32_RESET(APB1L, 3U)>;
316			interrupts = <48 0>;
317			interrupt-names = "global";
318			status = "disabled";
319
320			pwm {
321				compatible = "st,stm32-pwm";
322				status = "disabled";
323				#pwm-cells = <3>;
324			};
325
326			counter {
327				compatible = "st,stm32-counter";
328				status = "disabled";
329			};
330		};
331
332		timers12: timers@40001800 {
333			compatible = "st,stm32-timers";
334			reg = <0x40001800 0x400>;
335			clocks = <&rcc STM32_CLOCK(APB1, 6U)>;
336			resets = <&rctl STM32_RESET(APB1L, 6U)>;
337			interrupts = <120 0>;
338			interrupt-names = "global";
339			status = "disabled";
340
341			pwm {
342				compatible = "st,stm32-pwm";
343				status = "disabled";
344				#pwm-cells = <3>;
345			};
346
347			counter {
348				compatible = "st,stm32-counter";
349				status = "disabled";
350			};
351		};
352
353		timers13: timers@40001c00 {
354			compatible = "st,stm32-timers";
355			reg = <0x40001c00 0x400>;
356			clocks = <&rcc STM32_CLOCK(APB1, 7U)>;
357			resets = <&rctl STM32_RESET(APB1L, 7U)>;
358			interrupts = <121 0>;
359			interrupt-names = "global";
360			status = "disabled";
361
362			pwm {
363				compatible = "st,stm32-pwm";
364				status = "disabled";
365				#pwm-cells = <3>;
366			};
367
368			counter {
369				compatible = "st,stm32-counter";
370				status = "disabled";
371			};
372		};
373
374		timers14: timers@40002000 {
375			compatible = "st,stm32-timers";
376			reg = <0x40002000 0x400>;
377			clocks = <&rcc STM32_CLOCK(APB1, 8U)>;
378			resets = <&rctl STM32_RESET(APB1L, 8U)>;
379			interrupts = <122 0>;
380			interrupt-names = "global";
381			status = "disabled";
382
383			pwm {
384				compatible = "st,stm32-pwm";
385				status = "disabled";
386				#pwm-cells = <3>;
387			};
388
389			counter {
390				compatible = "st,stm32-counter";
391				status = "disabled";
392			};
393		};
394
395		timers15: timers@40014000 {
396			compatible = "st,stm32-timers";
397			reg = <0x40014000 0x400>;
398			clocks = <&rcc STM32_CLOCK(APB2, 16U)>;
399			resets = <&rctl STM32_RESET(APB2, 16U)>;
400			interrupts = <71 0>;
401			interrupt-names = "global";
402			status = "disabled";
403
404			pwm {
405				compatible = "st,stm32-pwm";
406				status = "disabled";
407				#pwm-cells = <3>;
408			};
409
410			counter {
411				compatible = "st,stm32-counter";
412				status = "disabled";
413			};
414		};
415
416		timers16: timers@40014400 {
417			compatible = "st,stm32-timers";
418			reg = <0x40014400 0x400>;
419			clocks = <&rcc STM32_CLOCK(APB2, 17U)>;
420			resets = <&rctl STM32_RESET(APB2, 17U)>;
421			interrupts = <72 0>;
422			interrupt-names = "global";
423			status = "disabled";
424
425			pwm {
426				compatible = "st,stm32-pwm";
427				status = "disabled";
428				#pwm-cells = <3>;
429			};
430
431			counter {
432				compatible = "st,stm32-counter";
433				status = "disabled";
434			};
435		};
436
437		timers17: timers@40014800 {
438			compatible = "st,stm32-timers";
439			reg = <0x40014800 0x400>;
440			clocks = <&rcc STM32_CLOCK(APB2, 18U)>;
441			resets = <&rctl STM32_RESET(APB2, 18U)>;
442			interrupts = <73 0>;
443			interrupt-names = "global";
444			status = "disabled";
445
446			pwm {
447				compatible = "st,stm32-pwm";
448				status = "disabled";
449				#pwm-cells = <3>;
450			};
451
452			counter {
453				compatible = "st,stm32-counter";
454				status = "disabled";
455			};
456		};
457
458		aes: aes@420c0000 {
459			compatible = "st,stm32-aes";
460			reg = <0x420c0000 0x400>;
461			clocks = <&rcc STM32_CLOCK(AHB2, 16U)>;
462			resets = <&rctl STM32_RESET(AHB2, 16U)>;
463			interrupts = <116 0>;
464			status = "disabled";
465		};
466
467		fdcan2: can@4000a800 {
468			compatible = "st,stm32-fdcan";
469			reg = <0x4000a800 0x400>, <0x4000ac00 0x6a0>;
470			reg-names = "m_can", "message_ram";
471			interrupts = <109 0>, <110 0>;
472			interrupt-names = "int0", "int1";
473			/* common clock FDCAN 1 & 2 */
474			clocks = <&rcc STM32_CLOCK(APB1_2, 9U)>;
475			bosch,mram-cfg = <0x350 28 8 3 3 0 3 3>;
476			status = "disabled";
477		};
478
479		sdmmc1: sdmmc@46008000 {
480			compatible = "st,stm32-sdmmc";
481			reg = <0x46008000 0x400>;
482			clocks = <&rcc STM32_CLOCK(AHB4, 11U)>,
483				 <&rcc STM32_SRC_PLL1_Q SDMMC1_SEL(0)>;
484			resets = <&rctl STM32_RESET(AHB4, 11U)>;
485			interrupts = <79 0>;
486			status = "disabled";
487		};
488
489		fmc: memory-controller@47000400 {
490			compatible = "st,stm32-fmc";
491			reg = <0x47000400 0x400>;
492			clocks = <&rcc STM32_CLOCK(AHB4, 16U)>;
493			status = "disabled";
494		};
495	};
496
497	smbus3: smbus3 {
498		compatible = "st,stm32-smbus";
499		#address-cells = <1>;
500		#size-cells = <0>;
501		i2c = <&i2c3>;
502		status = "disabled";
503	};
504
505	smbus4: smbus4 {
506		compatible = "st,stm32-smbus";
507		#address-cells = <1>;
508		#size-cells = <0>;
509		i2c = <&i2c4>;
510		status = "disabled";
511	};
512};
513