1/*
2 * Copyright (c) 2020 Alexander Kozhinov <ak.alexander.kozhinov@gmail.com>
3 * Copyright (c) 2022 Georgij Cernysiov <geo.cgv@gmail.com>
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#include <mem.h>
9#include <st/h7/stm32h7.dtsi>
10#include <zephyr/dt-bindings/display/panel.h>
11#include <zephyr/dt-bindings/flash_controller/ospi.h>
12
13/ {
14	soc {
15		compatible = "st,stm32h723", "st,stm32h7", "simple-bus";
16
17		flash-controller@52002000 {
18			flash0: flash@8000000 {
19				compatible = "st,stm32-nv-flash", "soc-nv-flash";
20				write-block-size = <32>;
21				erase-block-size = <DT_SIZE_K(128)>;
22				/* maximum erase time for a 128K sector */
23				max-erase-time = <4000>;
24			};
25		};
26
27		uart9: serial@40011800 {
28			compatible = "st,stm32-uart";
29			reg = <0x40011800 0x400>;
30			clocks = <&rcc STM32_CLOCK(APB2, 6U)>;
31			resets = <&rctl STM32_RESET(APB2, 6U)>;
32			interrupts = <155 0>;
33			status = "disabled";
34		};
35
36		usart10: serial@40011c00 {
37			compatible = "st,stm32-usart", "st,stm32-uart";
38			reg = <0x40011c00 0x400>;
39			clocks = <&rcc STM32_CLOCK(APB2, 7U)>;
40			resets = <&rctl STM32_RESET(APB2, 7U)>;
41			interrupts = <156 0>;
42			status = "disabled";
43		};
44
45		/*
46		 * ADC3 on STM32H723, 725, 730, 733 & 735 is a 12-bit resolution
47		 * ADC, so we redefine the resolution for these devices.
48		 */
49		adc3: adc@58026000 {
50			resolutions = <STM32H72X_ADC3_RES(12, 0x00)
51				       STM32H72X_ADC3_RES(10, 0x01)
52				       STM32H72X_ADC3_RES(8, 0x02)
53				       STM32H72X_ADC3_RES(6, 0x03)>;
54			sampling-times = <3 7 13 25 48 93 248 641>;
55			st,adc-sequencer = "FULLY_CONFIGURABLE";
56			st,adc-oversampler = "OVERSAMPLER_MINIMAL";
57		};
58
59		dmamux1: dmamux@40020800 {
60			dma-requests= <129>;
61		};
62
63		dmamux2: dmamux@58025800 {
64			dma-requests= <129>;
65		};
66
67		rng: rng@48021800 {
68			health-test-magic = <0x17590abc>;
69			health-test-config = <0xaa74>;
70		};
71
72		usbotg_hs: usb@40040000 {
73			compatible = "st,stm32-otghs";
74			reg = <0x40040000 0x40000>;
75			interrupts = <77 0>, <74 0>, <75 0>;
76			interrupt-names = "otghs", "ep1_out", "ep1_in";
77			num-bidir-endpoints = <9>;
78			ram-size = <DT_SIZE_K(4)>;
79			maximum-speed = "full-speed";
80			clocks = <&rcc STM32_CLOCK(AHB1, 25U)>,
81				 <&rcc STM32_SRC_HSI48 USB_SEL(3)>;
82			phys = <&otghs_fs_phy>;
83			status = "disabled";
84		};
85
86		ltdc: display-controller@50001000 {
87			compatible = "st,stm32-ltdc";
88			reg = <0x50001000 0x200>;
89			interrupts = <88 0>, <89 0>;
90			interrupt-names = "ltdc", "ltdc_er";
91			clocks = <&rcc STM32_CLOCK(APB3, 3U)>;
92			resets = <&rctl STM32_RESET(APB3, 4U)>;
93			status = "disabled";
94		};
95
96		octospi1: octospi@52005000 {
97			compatible = "st,stm32-ospi";
98			reg = <0x52005000 0x1000>;
99			interrupts = <92 0>;
100			clock-names = "ospix", "ospi-ker";
101			clocks = <&rcc STM32_CLOCK(AHB3, 14U)>,
102				<&rcc STM32_SRC_PLL1_Q OSPI_SEL(1)>;
103			#address-cells = <1>;
104			#size-cells = <0>;
105			status = "disabled";
106		};
107
108		octospi2: octospi@5200a000 {
109			compatible = "st,stm32-ospi";
110			reg = <0x5200a000 0x1000>;
111			interrupts = <150 0>;
112			clock-names = "ospix", "ospi-ker";
113			clocks = <&rcc STM32_CLOCK(AHB3, 19U)>,
114				<&rcc STM32_SRC_PLL1_Q OSPI_SEL(1)>;
115			#address-cells = <1>;
116			#size-cells = <0>;
117			status = "disabled";
118		};
119
120		fdcan3: can@4000d400 {
121			compatible = "st,stm32h7-fdcan";
122			reg = <0x4000d400 0x400>, <0x4000ac00 0x9f0>;
123			reg-names = "m_can", "message_ram";
124			clocks = <&rcc STM32_CLOCK(APB1_2, 8U)>;
125			interrupts = <159 0>, <160 0>, <63 0>;
126			interrupt-names = "int0", "int1", "calib";
127			bosch,mram-cfg = <0x6a0 28 8 3 3 0 3 3>;
128			status = "disabled";
129		};
130
131		rtc@58004000 {
132			bbram: backup_regs {
133				compatible = "st,stm32-bbram";
134				st,backup-regs = <32>;
135				status = "disabled";
136			};
137		};
138
139		timers23: timers@4000e000 {
140			compatible = "st,stm32-timers";
141			reg = <0x4000e000 0x400>;
142			clocks = <&rcc STM32_CLOCK(APB1_2, 24U)>;
143			resets = <&rctl STM32_RESET(APB1H, 24U)>;
144			interrupts = <161 0>;
145			interrupt-names = "global";
146			st,prescaler = <0>;
147			status = "disabled";
148
149			pwm {
150				compatible = "st,stm32-pwm";
151				status = "disabled";
152				#pwm-cells = <3>;
153			};
154
155			counter {
156				compatible = "st,stm32-counter";
157				status = "disabled";
158			};
159		};
160
161		timers24: timers@4000e400 {
162			compatible = "st,stm32-timers";
163			reg = <0x4000e400 0x400>;
164			clocks = <&rcc STM32_CLOCK(APB1_2, 25U)>;
165			resets = <&rctl STM32_RESET(APB1H, 25U)>;
166			interrupts = <162 0>;
167			interrupt-names = "global";
168			st,prescaler = <0>;
169			status = "disabled";
170
171			pwm {
172				compatible = "st,stm32-pwm";
173				status = "disabled";
174				#pwm-cells = <3>;
175			};
176
177			counter {
178				compatible = "st,stm32-counter";
179				status = "disabled";
180			};
181		};
182
183		digi_die_temp: digi_dietemp@58006800 {
184			compatible = "st,stm32-digi-temp";
185			reg = <0x58006800 0x400>;
186			interrupts = <147 0>;
187			interrupt-names = "digi_temp";
188			clocks = <&rcc STM32_CLOCK(APB4, 26U)>;
189			status = "disabled";
190		};
191	};
192
193	/* D1 domain, AXI SRAM (128KB with shared ITCM 192KB as `TCM_AXI_SHARED` is `000`) */
194	sram0: memory@24000000 {
195		reg = <0x24000000 DT_SIZE_K(320)>;
196		compatible = "mmio-sram";
197	};
198
199	/* D2 domain, AHB SRAM */
200	sram1: memory@30000000 {
201		reg = <0x30000000 DT_SIZE_K(16)>;
202		compatible = "zephyr,memory-region", "mmio-sram";
203		zephyr,memory-region = "SRAM1";
204	};
205
206	/* D2 domain, AHB SRAM */
207	sram2: memory@30004000 {
208		reg = <0x30004000 DT_SIZE_K(16)>;
209		compatible = "zephyr,memory-region", "mmio-sram";
210		zephyr,memory-region = "SRAM2";
211	};
212
213	/* D3 domain, AHB SRAM  */
214	sram4: memory@38000000 {
215		reg = <0x38000000 DT_SIZE_K(16)>;
216		compatible = "zephyr,memory-region", "mmio-sram";
217		zephyr,memory-region = "SRAM4";
218	};
219
220	/* Data TCM RAM */
221	dtcm: memory@20000000 {
222		compatible = "zephyr,memory-region", "arm,dtcm";
223		reg = <0x20000000 DT_SIZE_K(128)>;
224		zephyr,memory-region = "DTCM";
225	};
226
227	/* Instruction TCM RAM (64KB as `TCM_AXI_SHARED` is `000`) */
228	itcm: memory@0 {
229		compatible = "zephyr,memory-region", "arm,itcm";
230		reg = <0x00000000 DT_SIZE_K(64)>;
231		zephyr,memory-region = "ITCM";
232	};
233
234	otghs_fs_phy: otghs_fs_phy {
235		compatible = "usb-nop-xceiv";
236		#phy-cells = <0>;
237	};
238
239	die_temp: dietemp {
240		io-channels = <&adc3 17>;
241		ts-cal2-temp = <130>;
242	};
243
244	vref: vref {
245		io-channels = <&adc3 18>;
246	};
247
248	vbat: vbat {
249		io-channels = <&adc3 16>;
250	};
251};
252