1// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2/*
3 * Copyright (C) STMicroelectronics 2022 - All Rights Reserved
4 * Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
5 */
6#include <dt-bindings/clock/stm32mp13-clks.h>
7#include <dt-bindings/interrupt-controller/arm-gic.h>
8#include <dt-bindings/reset/stm32mp13-resets.h>
9
10/ {
11	#address-cells = <1>;
12	#size-cells = <1>;
13
14	cpus {
15		#address-cells = <1>;
16		#size-cells = <0>;
17
18		cpu0: cpu@0 {
19			compatible = "arm,cortex-a7";
20			device_type = "cpu";
21			reg = <0>;
22			clocks = <&rcc CK_MPU>;
23			clock-names = "cpu";
24			nvmem-cells = <&part_number_otp>;
25			nvmem-cell-names = "part_number";
26		};
27	};
28
29	clocks {
30		clk_csi: clk-csi {
31			#clock-cells = <0>;
32			compatible = "fixed-clock";
33			clock-frequency = <4000000>;
34		};
35
36		clk_hse: clk-hse {
37			#clock-cells = <0>;
38			compatible = "fixed-clock";
39			clock-frequency = <24000000>;
40		};
41
42		clk_hsi: clk-hsi {
43			#clock-cells = <0>;
44			compatible = "fixed-clock";
45			clock-frequency = <64000000>;
46		};
47
48		clk_lse: clk-lse {
49			#clock-cells = <0>;
50			compatible = "fixed-clock";
51			clock-frequency = <32768>;
52		};
53
54		clk_lsi: clk-lsi {
55			#clock-cells = <0>;
56			compatible = "fixed-clock";
57			clock-frequency = <32000>;
58		};
59	};
60
61	intc: interrupt-controller@a0021000 {
62		compatible = "arm,cortex-a7-gic";
63		#interrupt-cells = <3>;
64		interrupt-controller;
65		reg = <0xa0021000 0x1000>,
66		      <0xa0022000 0x2000>;
67	};
68
69	psci {
70		compatible = "arm,psci-1.0";
71		method = "smc";
72	};
73
74	soc {
75		compatible = "simple-bus";
76		#address-cells = <1>;
77		#size-cells = <1>;
78		interrupt-parent = <&intc>;
79		ranges;
80
81		usart3: serial@4000f000 {
82			compatible = "st,stm32h7-uart";
83			reg = <0x4000f000 0x400>;
84			interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
85			clocks = <&rcc USART3_K>;
86			resets = <&rcc USART3_R>;
87			status = "disabled";
88		};
89
90		uart4: serial@40010000 {
91			compatible = "st,stm32h7-uart";
92			reg = <0x40010000 0x400>;
93			interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
94			clocks = <&rcc UART4_K>;
95			resets = <&rcc UART4_R>;
96			status = "disabled";
97		};
98
99		uart5: serial@40011000 {
100			compatible = "st,stm32h7-uart";
101			reg = <0x40011000 0x400>;
102			interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
103			clocks = <&rcc UART5_K>;
104			resets = <&rcc UART5_R>;
105			status = "disabled";
106		};
107
108		uart7: serial@40018000 {
109			compatible = "st,stm32h7-uart";
110			reg = <0x40018000 0x400>;
111			interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
112			clocks = <&rcc UART7_K>;
113			resets = <&rcc UART7_R>;
114			status = "disabled";
115		};
116
117		uart8: serial@40019000 {
118			compatible = "st,stm32h7-uart";
119			reg = <0x40019000 0x400>;
120			interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
121			clocks = <&rcc UART8_K>;
122			resets = <&rcc UART8_R>;
123			status = "disabled";
124		};
125
126		usart6: serial@44003000 {
127			compatible = "st,stm32h7-uart";
128			reg = <0x44003000 0x400>;
129			interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
130			clocks = <&rcc USART6_K>;
131			resets = <&rcc USART6_R>;
132			status = "disabled";
133		};
134
135		usbotg_hs: usb-otg@49000000 {
136			compatible = "st,stm32mp15-hsotg", "snps,dwc2";
137			reg = <0x49000000 0x40000>;
138			clocks = <&rcc USBO_K>;
139			clock-names = "otg";
140			resets = <&rcc USBO_R>;
141			reset-names = "dwc2";
142			interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
143			g-rx-fifo-size = <512>;
144			g-np-tx-fifo-size = <32>;
145			g-tx-fifo-size = <256 16 16 16 16 16 16 16>;
146			dr_mode = "otg";
147			usb33d-supply = <&usb33>;
148			status = "disabled";
149		};
150
151		usart1: serial@4c000000 {
152			compatible = "st,stm32h7-uart";
153			reg = <0x4c000000 0x400>;
154			interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
155			clocks = <&rcc USART1_K>;
156			resets = <&rcc USART1_R>;
157			status = "disabled";
158		};
159
160		usart2: serial@4c001000 {
161			compatible = "st,stm32h7-uart";
162			reg = <0x4c001000 0x400>;
163			interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
164			clocks = <&rcc USART2_K>;
165			resets = <&rcc USART2_R>;
166			status = "disabled";
167		};
168
169		i2c3: i2c@4c004000 {
170			compatible = "st,stm32mp13-i2c";
171			reg = <0x4c004000 0x400>;
172			interrupt-names = "event", "error";
173			interrupts-extended = <&exti 23 IRQ_TYPE_LEVEL_HIGH>,
174					      <&intc GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
175			clocks = <&rcc I2C3_K>;
176			resets = <&rcc I2C3_R>;
177			#address-cells = <1>;
178			#size-cells = <0>;
179			st,syscfg-fmp = <&syscfg 0x4 0x4>;
180			i2c-analog-filter;
181			status = "disabled";
182		};
183
184		i2c4: i2c@4c005000 {
185			compatible = "st,stm32mp13-i2c";
186			reg = <0x4c005000 0x400>;
187			interrupt-names = "event", "error";
188			interrupts-extended = <&exti 24 IRQ_TYPE_LEVEL_HIGH>,
189					      <&intc GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
190			clocks = <&rcc I2C4_K>;
191			resets = <&rcc I2C4_R>;
192			#address-cells = <1>;
193			#size-cells = <0>;
194			st,syscfg-fmp = <&syscfg 0x4 0x8>;
195			i2c-analog-filter;
196			status = "disabled";
197		};
198
199		i2c5: i2c@4c006000 {
200			compatible = "st,stm32mp13-i2c";
201			reg = <0x4c006000 0x400>;
202			interrupt-names = "event", "error";
203			interrupts-extended = <&exti 25 IRQ_TYPE_LEVEL_HIGH>,
204					      <&intc GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
205			clocks = <&rcc I2C5_K>;
206			resets = <&rcc I2C5_R>;
207			#address-cells = <1>;
208			#size-cells = <0>;
209			st,syscfg-fmp = <&syscfg 0x4 0x10>;
210			i2c-analog-filter;
211			status = "disabled";
212		};
213
214		rcc: rcc@50000000 {
215			compatible = "st,stm32mp13-rcc", "syscon";
216			reg = <0x50000000 0x1000>;
217			#address-cells = <1>;
218			#size-cells = <0>;
219			#clock-cells = <1>;
220			#reset-cells = <1>;
221			interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
222			secure-interrupts = <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
223			secure-interrupt-names = "wakeup";
224		};
225
226		pwr_regulators: pwr@50001000 {
227			compatible = "st,stm32mp1,pwr-reg";
228			reg = <0x50001000 0x10>;
229
230			reg11: reg11 {
231				regulator-name = "reg11";
232				regulator-min-microvolt = <1100000>;
233				regulator-max-microvolt = <1100000>;
234			};
235
236			reg18: reg18 {
237				regulator-name = "reg18";
238				regulator-min-microvolt = <1800000>;
239				regulator-max-microvolt = <1800000>;
240			};
241
242			usb33: usb33 {
243				regulator-name = "usb33";
244				regulator-min-microvolt = <3300000>;
245				regulator-max-microvolt = <3300000>;
246			};
247		};
248
249		exti: interrupt-controller@5000d000 {
250			compatible = "st,stm32mp13-exti", "syscon";
251			interrupt-controller;
252			#interrupt-cells = <2>;
253			reg = <0x5000d000 0x400>;
254		};
255
256		syscfg: syscon@50020000 {
257			compatible = "st,stm32mp157-syscfg", "syscon";
258			reg = <0x50020000 0x400>;
259			clocks = <&rcc SYSCFG>;
260		};
261
262		hash: hash@54003000 {
263			compatible = "st,stm32mp13-hash";
264			reg = <0x54003000 0x400>;
265			clocks = <&rcc HASH1>;
266			resets = <&rcc HASH1_R>;
267			status = "disabled";
268		};
269
270		rng: rng@54004000 {
271			compatible = "st,stm32mp13-rng";
272			reg = <0x54004000 0x400>;
273			clocks = <&rcc RNG1_K>;
274			resets = <&rcc RNG1_R>;
275			status = "disabled";
276		};
277
278		fmc: memory-controller@58002000 {
279			#address-cells = <2>;
280			#size-cells = <1>;
281			compatible = "st,stm32mp1-fmc2-ebi";
282			reg = <0x58002000 0x1000>;
283			clocks = <&rcc FMC_K>;
284			resets = <&rcc FMC_R>;
285			status = "disabled";
286
287			ranges = <0 0 0x60000000 0x04000000>, /* EBI CS 1 */
288				 <1 0 0x64000000 0x04000000>, /* EBI CS 2 */
289				 <2 0 0x68000000 0x04000000>, /* EBI CS 3 */
290				 <3 0 0x6c000000 0x04000000>, /* EBI CS 4 */
291				 <4 0 0x80000000 0x10000000>; /* NAND */
292
293			nand-controller@4,0 {
294				#address-cells = <1>;
295				#size-cells = <0>;
296				compatible = "st,stm32mp1-fmc2-nfc";
297				reg = <4 0x00000000 0x1000>,
298				      <4 0x08010000 0x1000>,
299				      <4 0x08020000 0x1000>,
300				      <4 0x01000000 0x1000>,
301				      <4 0x09010000 0x1000>,
302				      <4 0x09020000 0x1000>;
303				interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
304				status = "disabled";
305			};
306		};
307
308		qspi: spi@58003000 {
309			compatible = "st,stm32f469-qspi";
310			reg = <0x58003000 0x1000>, <0x70000000 0x10000000>;
311			reg-names = "qspi", "qspi_mm";
312			interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
313			clocks = <&rcc QSPI_K>;
314			resets = <&rcc QSPI_R>;
315			status = "disabled";
316		};
317
318		sdmmc1: mmc@58005000 {
319			compatible = "st,stm32-sdmmc2", "arm,pl18x", "arm,primecell";
320			arm,primecell-periphid = <0x20253180>;
321			reg = <0x58005000 0x1000>, <0x58006000 0x1000>;
322			clocks = <&rcc SDMMC1_K>;
323			clock-names = "apb_pclk";
324			resets = <&rcc SDMMC1_R>;
325			cap-sd-highspeed;
326			cap-mmc-highspeed;
327			max-frequency = <130000000>;
328			status = "disabled";
329		};
330
331		sdmmc2: mmc@58007000 {
332			compatible = "st,stm32-sdmmc2", "arm,pl18x", "arm,primecell";
333			arm,primecell-periphid = <0x20253180>;
334			reg = <0x58007000 0x1000>, <0x58008000 0x1000>;
335			clocks = <&rcc SDMMC2_K>;
336			clock-names = "apb_pclk";
337			resets = <&rcc SDMMC2_R>;
338			cap-sd-highspeed;
339			cap-mmc-highspeed;
340			max-frequency = <130000000>;
341			status = "disabled";
342		};
343
344		usbh_ohci: usbh-ohci@5800c000 {
345			compatible = "generic-ohci";
346			reg = <0x5800c000 0x1000>;
347			clocks = <&rcc USBH>;
348			resets = <&rcc USBH_R>;
349			interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
350			status = "disabled";
351		};
352
353		usbh_ehci: usbh-ehci@5800d000 {
354			compatible = "generic-ehci";
355			reg = <0x5800d000 0x1000>;
356			clocks = <&rcc USBH>;
357			resets = <&rcc USBH_R>;
358			interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
359			companion = <&usbh_ohci>;
360			status = "disabled";
361		};
362
363		iwdg2: watchdog@5a002000 {
364			compatible = "st,stm32mp1-iwdg";
365			reg = <0x5a002000 0x400>;
366			clocks = <&rcc IWDG2>, <&rcc CK_LSI>;
367			clock-names = "pclk", "lsi";
368			status = "disabled";
369		};
370
371		ddr: ddr@5a003000 {
372			compatible = "st,stm32mp13-ddr";
373			reg = <0x5a003000 0x550>, <0x5a004000 0x234>;
374			clocks = <&rcc AXIDCG>,
375				 <&rcc DDRC1>,
376				 <&rcc DDRPHYC>,
377				 <&rcc DDRCAPB>,
378				 <&rcc DDRPHYCAPB>;
379			clock-names = "axidcg",
380				      "ddrc1",
381				      "ddrphyc",
382				      "ddrcapb",
383				      "ddrphycapb";
384		};
385
386		usbphyc: usbphyc@5a006000 {
387			#address-cells = <1>;
388			#size-cells = <0>;
389			#clock-cells = <0>;
390			compatible = "st,stm32mp1-usbphyc";
391			reg = <0x5a006000 0x1000>;
392			clocks = <&rcc USBPHY_K>;
393			resets = <&rcc USBPHY_R>;
394			vdda1v1-supply = <&reg11>;
395			vdda1v8-supply = <&reg18>;
396			status = "disabled";
397
398			usbphyc_port0: usb-phy@0 {
399				#phy-cells = <0>;
400				reg = <0>;
401			};
402
403			usbphyc_port1: usb-phy@1 {
404				#phy-cells = <1>;
405				reg = <1>;
406			};
407		};
408
409		iwdg1: watchdog@5c003000 {
410			compatible = "st,stm32mp1-iwdg";
411			reg = <0x5c003000 0x400>;
412			interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
413			clocks = <&rcc IWDG1>, <&rcc CK_LSI>;
414			clock-names = "pclk", "lsi";
415			status = "disabled";
416		};
417
418		bsec: efuse@5c005000 {
419			compatible = "st,stm32mp15-bsec";
420			reg = <0x5c005000 0x400>;
421			#address-cells = <1>;
422			#size-cells = <1>;
423
424			cfg0_otp: cfg0_otp@0 {
425				reg = <0x0 0x2>;
426			};
427			part_number_otp: part_number_otp@4 {
428				reg = <0x4 0x2>;
429			};
430			monotonic_otp: monotonic_otp@10 {
431				reg = <0x10 0x4>;
432			};
433			nand_otp: cfg9_otp@24 {
434				reg = <0x24 0x4>;
435			};
436			nand2_otp: cfg10_otp@28 {
437				reg = <0x28 0x4>;
438			};
439			uid_otp: uid_otp@34 {
440				reg = <0x34 0xc>;
441			};
442			hw2_otp: hw2_otp@48 {
443				reg = <0x48 0x4>;
444			};
445			ts_cal1: calib@5c {
446				reg = <0x5c 0x2>;
447			};
448			ts_cal2: calib@5e {
449				reg = <0x5e 0x2>;
450			};
451			pkh_otp: pkh_otp@60 {
452				reg = <0x60 0x20>;
453			};
454			mac_addr: mac_addr@e4 {
455				reg = <0xe4 0xc>;
456				st,non-secure-otp;
457			};
458			enckey_otp: enckey_otp@170 {
459				reg = <0x170 0x10>;
460			};
461		};
462		/*
463		 * Break node order to solve dependency probe issue between
464		 * pinctrl and exti.
465		 */
466		pinctrl: pinctrl@50002000 {
467			#address-cells = <1>;
468			#size-cells = <1>;
469			compatible = "st,stm32mp135-pinctrl";
470			ranges = <0 0x50002000 0x8400>;
471			interrupt-parent = <&exti>;
472			st,syscfg = <&exti 0x60 0xff>;
473			pins-are-numbered;
474
475			gpioa: gpio@50002000 {
476				gpio-controller;
477				#gpio-cells = <2>;
478				interrupt-controller;
479				#interrupt-cells = <2>;
480				reg = <0x0 0x400>;
481				clocks = <&rcc GPIOA>;
482				st,bank-name = "GPIOA";
483				ngpios = <16>;
484				gpio-ranges = <&pinctrl 0 0 16>;
485			};
486
487			gpiob: gpio@50003000 {
488				gpio-controller;
489				#gpio-cells = <2>;
490				interrupt-controller;
491				#interrupt-cells = <2>;
492				reg = <0x1000 0x400>;
493				clocks = <&rcc GPIOB>;
494				st,bank-name = "GPIOB";
495				ngpios = <16>;
496				gpio-ranges = <&pinctrl 0 16 16>;
497			};
498
499			gpioc: gpio@50004000 {
500				gpio-controller;
501				#gpio-cells = <2>;
502				interrupt-controller;
503				#interrupt-cells = <2>;
504				reg = <0x2000 0x400>;
505				clocks = <&rcc GPIOC>;
506				st,bank-name = "GPIOC";
507				ngpios = <16>;
508				gpio-ranges = <&pinctrl 0 32 16>;
509			};
510
511			gpiod: gpio@50005000 {
512				gpio-controller;
513				#gpio-cells = <2>;
514				interrupt-controller;
515				#interrupt-cells = <2>;
516				reg = <0x3000 0x400>;
517				clocks = <&rcc GPIOD>;
518				st,bank-name = "GPIOD";
519				ngpios = <16>;
520				gpio-ranges = <&pinctrl 0 48 16>;
521			};
522
523			gpioe: gpio@50006000 {
524				gpio-controller;
525				#gpio-cells = <2>;
526				interrupt-controller;
527				#interrupt-cells = <2>;
528				reg = <0x4000 0x400>;
529				clocks = <&rcc GPIOE>;
530				st,bank-name = "GPIOE";
531				ngpios = <16>;
532				gpio-ranges = <&pinctrl 0 64 16>;
533			};
534
535			gpiof: gpio@50007000 {
536				gpio-controller;
537				#gpio-cells = <2>;
538				interrupt-controller;
539				#interrupt-cells = <2>;
540				reg = <0x5000 0x400>;
541				clocks = <&rcc GPIOF>;
542				st,bank-name = "GPIOF";
543				ngpios = <16>;
544				gpio-ranges = <&pinctrl 0 80 16>;
545			};
546
547			gpiog: gpio@50008000 {
548				gpio-controller;
549				#gpio-cells = <2>;
550				interrupt-controller;
551				#interrupt-cells = <2>;
552				reg = <0x6000 0x400>;
553				clocks = <&rcc GPIOG>;
554				st,bank-name = "GPIOG";
555				ngpios = <16>;
556				gpio-ranges = <&pinctrl 0 96 16>;
557			};
558
559			gpioh: gpio@50009000 {
560				gpio-controller;
561				#gpio-cells = <2>;
562				interrupt-controller;
563				#interrupt-cells = <2>;
564				reg = <0x7000 0x400>;
565				clocks = <&rcc GPIOH>;
566				st,bank-name = "GPIOH";
567				ngpios = <15>;
568				gpio-ranges = <&pinctrl 0 112 15>;
569			};
570
571			gpioi: gpio@5000a000 {
572				gpio-controller;
573				#gpio-cells = <2>;
574				interrupt-controller;
575				#interrupt-cells = <2>;
576				reg = <0x8000 0x400>;
577				clocks = <&rcc GPIOI>;
578				st,bank-name = "GPIOI";
579				ngpios = <8>;
580				gpio-ranges = <&pinctrl 0 128 8>;
581			};
582		};
583	};
584};
585