1/*
2 * Copyright 2015 - Maxime Coquelin <mcoquelin.stm32@gmail.com>
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 *  a) This file is free software; you can redistribute it and/or
10 *     modify it under the terms of the GNU General Public License as
11 *     published by the Free Software Foundation; either version 2 of the
12 *     License, or (at your option) any later version.
13 *
14 *     This file is distributed in the hope that it will be useful,
15 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *     GNU General Public License for more details.
18 *
19 * Or, alternatively,
20 *
21 *  b) Permission is hereby granted, free of charge, to any person
22 *     obtaining a copy of this software and associated documentation
23 *     files (the "Software"), to deal in the Software without
24 *     restriction, including without limitation the rights to use,
25 *     copy, modify, merge, publish, distribute, sublicense, and/or
26 *     sell copies of the Software, and to permit persons to whom the
27 *     Software is furnished to do so, subject to the following
28 *     conditions:
29 *
30 *     The above copyright notice and this permission notice shall be
31 *     included in all copies or substantial portions of the Software.
32 *
33 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
38 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 *     OTHER DEALINGS IN THE SOFTWARE.
41 */
42
43#include "armv7-m.dtsi"
44#include <dt-bindings/clock/stm32fx-clock.h>
45#include <dt-bindings/mfd/stm32f7-rcc.h>
46
47/ {
48	#address-cells = <1>;
49	#size-cells = <1>;
50
51	clocks {
52		clk_hse: clk-hse {
53			#clock-cells = <0>;
54			compatible = "fixed-clock";
55			clock-frequency = <0>;
56		};
57
58		clk-lse {
59			#clock-cells = <0>;
60			compatible = "fixed-clock";
61			clock-frequency = <32768>;
62		};
63
64		clk-lsi {
65			#clock-cells = <0>;
66			compatible = "fixed-clock";
67			clock-frequency = <32000>;
68		};
69
70		clk_i2s_ckin: clk-i2s-ckin {
71			#clock-cells = <0>;
72			compatible = "fixed-clock";
73			clock-frequency = <48000000>;
74		};
75	};
76
77	soc {
78		timer2: timer@40000000 {
79			compatible = "st,stm32-timer";
80			reg = <0x40000000 0x400>;
81			interrupts = <28>;
82			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM2)>;
83			status = "disabled";
84		};
85
86		timers2: timers@40000000 {
87			#address-cells = <1>;
88			#size-cells = <0>;
89			compatible = "st,stm32-timers";
90			reg = <0x40000000 0x400>;
91			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM2)>;
92			clock-names = "int";
93			status = "disabled";
94
95			pwm {
96				compatible = "st,stm32-pwm";
97				#pwm-cells = <3>;
98				status = "disabled";
99			};
100
101			timer@1 {
102				compatible = "st,stm32-timer-trigger";
103				reg = <1>;
104				status = "disabled";
105			};
106		};
107
108		timer3: timer@40000400 {
109			compatible = "st,stm32-timer";
110			reg = <0x40000400 0x400>;
111			interrupts = <29>;
112			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM3)>;
113			status = "disabled";
114		};
115
116		timers3: timers@40000400 {
117			#address-cells = <1>;
118			#size-cells = <0>;
119			compatible = "st,stm32-timers";
120			reg = <0x40000400 0x400>;
121			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM3)>;
122			clock-names = "int";
123			status = "disabled";
124
125			pwm {
126				compatible = "st,stm32-pwm";
127				#pwm-cells = <3>;
128				status = "disabled";
129			};
130
131			timer@2 {
132				compatible = "st,stm32-timer-trigger";
133				reg = <2>;
134				status = "disabled";
135			};
136		};
137
138		timer4: timer@40000800 {
139			compatible = "st,stm32-timer";
140			reg = <0x40000800 0x400>;
141			interrupts = <30>;
142			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM4)>;
143			status = "disabled";
144		};
145
146		timers4: timers@40000800 {
147			#address-cells = <1>;
148			#size-cells = <0>;
149			compatible = "st,stm32-timers";
150			reg = <0x40000800 0x400>;
151			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM4)>;
152			clock-names = "int";
153			status = "disabled";
154
155			pwm {
156				compatible = "st,stm32-pwm";
157				#pwm-cells = <3>;
158				status = "disabled";
159			};
160
161			timer@3 {
162				compatible = "st,stm32-timer-trigger";
163				reg = <3>;
164				status = "disabled";
165			};
166		};
167
168		timer5: timer@40000c00 {
169			compatible = "st,stm32-timer";
170			reg = <0x40000c00 0x400>;
171			interrupts = <50>;
172			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM5)>;
173		};
174
175		timers5: timers@40000c00 {
176			#address-cells = <1>;
177			#size-cells = <0>;
178			compatible = "st,stm32-timers";
179			reg = <0x40000C00 0x400>;
180			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM5)>;
181			clock-names = "int";
182			status = "disabled";
183
184			pwm {
185				compatible = "st,stm32-pwm";
186				#pwm-cells = <3>;
187				status = "disabled";
188			};
189
190			timer@4 {
191				compatible = "st,stm32-timer-trigger";
192				reg = <4>;
193				status = "disabled";
194			};
195		};
196
197		timer6: timer@40001000 {
198			compatible = "st,stm32-timer";
199			reg = <0x40001000 0x400>;
200			interrupts = <54>;
201			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM6)>;
202			status = "disabled";
203		};
204
205		timers6: timers@40001000 {
206			#address-cells = <1>;
207			#size-cells = <0>;
208			compatible = "st,stm32-timers";
209			reg = <0x40001000 0x400>;
210			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM6)>;
211			clock-names = "int";
212			status = "disabled";
213
214			timer@5 {
215				compatible = "st,stm32-timer-trigger";
216				reg = <5>;
217				status = "disabled";
218			};
219		};
220
221		timer7: timer@40001400 {
222			compatible = "st,stm32-timer";
223			reg = <0x40001400 0x400>;
224			interrupts = <55>;
225			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM7)>;
226			status = "disabled";
227		};
228
229		timers7: timers@40001400 {
230			#address-cells = <1>;
231			#size-cells = <0>;
232			compatible = "st,stm32-timers";
233			reg = <0x40001400 0x400>;
234			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM7)>;
235			clock-names = "int";
236			status = "disabled";
237
238			timer@6 {
239				compatible = "st,stm32-timer-trigger";
240				reg = <6>;
241				status = "disabled";
242			};
243		};
244
245		timers12: timers@40001800 {
246			#address-cells = <1>;
247			#size-cells = <0>;
248			compatible = "st,stm32-timers";
249			reg = <0x40001800 0x400>;
250			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM12)>;
251			clock-names = "int";
252			status = "disabled";
253
254			pwm {
255				compatible = "st,stm32-pwm";
256				#pwm-cells = <3>;
257				status = "disabled";
258			};
259
260			timer@11 {
261				compatible = "st,stm32-timer-trigger";
262				reg = <11>;
263				status = "disabled";
264			};
265		};
266
267		timers13: timers@40001c00 {
268			compatible = "st,stm32-timers";
269			reg = <0x40001C00 0x400>;
270			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM13)>;
271			clock-names = "int";
272			status = "disabled";
273
274			pwm {
275				compatible = "st,stm32-pwm";
276				#pwm-cells = <3>;
277				status = "disabled";
278			};
279		};
280
281		timers14: timers@40002000 {
282			compatible = "st,stm32-timers";
283			reg = <0x40002000 0x400>;
284			clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM14)>;
285			clock-names = "int";
286			status = "disabled";
287
288			pwm {
289				compatible = "st,stm32-pwm";
290				#pwm-cells = <3>;
291				status = "disabled";
292			};
293		};
294
295		rtc: rtc@40002800 {
296			compatible = "st,stm32-rtc";
297			reg = <0x40002800 0x400>;
298			clocks = <&rcc 1 CLK_RTC>;
299			assigned-clocks = <&rcc 1 CLK_RTC>;
300			assigned-clock-parents = <&rcc 1 CLK_LSE>;
301			interrupt-parent = <&exti>;
302			interrupts = <17 1>;
303			st,syscfg = <&pwrcfg 0x00 0x100>;
304			status = "disabled";
305		};
306
307		usart2: serial@40004400 {
308			compatible = "st,stm32f7-uart";
309			reg = <0x40004400 0x400>;
310			interrupts = <38>;
311			clocks = <&rcc 1 CLK_USART2>;
312			status = "disabled";
313		};
314
315		usart3: serial@40004800 {
316			compatible = "st,stm32f7-uart";
317			reg = <0x40004800 0x400>;
318			interrupts = <39>;
319			clocks = <&rcc 1 CLK_USART3>;
320			status = "disabled";
321		};
322
323		usart4: serial@40004c00 {
324			compatible = "st,stm32f7-uart";
325			reg = <0x40004c00 0x400>;
326			interrupts = <52>;
327			clocks = <&rcc 1 CLK_UART4>;
328			status = "disabled";
329		};
330
331		usart5: serial@40005000 {
332			compatible = "st,stm32f7-uart";
333			reg = <0x40005000 0x400>;
334			interrupts = <53>;
335			clocks = <&rcc 1 CLK_UART5>;
336			status = "disabled";
337		};
338
339		i2c1: i2c@40005400 {
340			compatible = "st,stm32f7-i2c";
341			reg = <0x40005400 0x400>;
342			interrupts = <31>,
343				     <32>;
344			resets = <&rcc STM32F7_APB1_RESET(I2C1)>;
345			clocks = <&rcc 1 CLK_I2C1>;
346			#address-cells = <1>;
347			#size-cells = <0>;
348			status = "disabled";
349		};
350
351		i2c2: i2c@40005800 {
352			compatible = "st,stm32f7-i2c";
353			reg = <0x40005800 0x400>;
354			interrupts = <33>,
355				     <34>;
356			resets = <&rcc STM32F7_APB1_RESET(I2C2)>;
357			clocks = <&rcc 1 CLK_I2C2>;
358			#address-cells = <1>;
359			#size-cells = <0>;
360			status = "disabled";
361		};
362
363		i2c3: i2c@40005c00 {
364			compatible = "st,stm32f7-i2c";
365			reg = <0x40005c00 0x400>;
366			interrupts = <72>,
367				     <73>;
368			resets = <&rcc STM32F7_APB1_RESET(I2C3)>;
369			clocks = <&rcc 1 CLK_I2C3>;
370			#address-cells = <1>;
371			#size-cells = <0>;
372			status = "disabled";
373		};
374
375		i2c4: i2c@40006000 {
376			compatible = "st,stm32f7-i2c";
377			reg = <0x40006000 0x400>;
378			interrupts = <95>,
379				     <96>;
380			resets = <&rcc STM32F7_APB1_RESET(I2C4)>;
381			clocks = <&rcc 1 CLK_I2C4>;
382			#address-cells = <1>;
383			#size-cells = <0>;
384			status = "disabled";
385		};
386
387		cec: cec@40006c00 {
388			compatible = "st,stm32-cec";
389			reg = <0x40006C00 0x400>;
390			interrupts = <94>;
391			clocks = <&rcc 0 STM32F7_APB1_CLOCK(CEC)>, <&rcc 1 CLK_HDMI_CEC>;
392			clock-names = "cec", "hdmi-cec";
393			status = "disabled";
394		};
395
396		usart7: serial@40007800 {
397			compatible = "st,stm32f7-uart";
398			reg = <0x40007800 0x400>;
399			interrupts = <82>;
400			clocks = <&rcc 1 CLK_UART7>;
401			status = "disabled";
402		};
403
404		usart8: serial@40007c00 {
405			compatible = "st,stm32f7-uart";
406			reg = <0x40007c00 0x400>;
407			interrupts = <83>;
408			clocks = <&rcc 1 CLK_UART8>;
409			status = "disabled";
410		};
411
412		timers1: timers@40010000 {
413			#address-cells = <1>;
414			#size-cells = <0>;
415			compatible = "st,stm32-timers";
416			reg = <0x40010000 0x400>;
417			clocks = <&rcc 0 STM32F7_APB2_CLOCK(TIM1)>;
418			clock-names = "int";
419			status = "disabled";
420
421			pwm {
422				compatible = "st,stm32-pwm";
423				#pwm-cells = <3>;
424				status = "disabled";
425			};
426
427			timer@0 {
428				compatible = "st,stm32-timer-trigger";
429				reg = <0>;
430				status = "disabled";
431			};
432		};
433
434		timers8: timers@40010400 {
435			#address-cells = <1>;
436			#size-cells = <0>;
437			compatible = "st,stm32-timers";
438			reg = <0x40010400 0x400>;
439			clocks = <&rcc 0 STM32F7_APB2_CLOCK(TIM8)>;
440			clock-names = "int";
441			status = "disabled";
442
443			pwm {
444				compatible = "st,stm32-pwm";
445				#pwm-cells = <3>;
446				status = "disabled";
447			};
448
449			timer@7 {
450				compatible = "st,stm32-timer-trigger";
451				reg = <7>;
452				status = "disabled";
453			};
454		};
455
456		usart1: serial@40011000 {
457			compatible = "st,stm32f7-uart";
458			reg = <0x40011000 0x400>;
459			interrupts = <37>;
460			clocks = <&rcc 1 CLK_USART1>;
461			status = "disabled";
462		};
463
464		usart6: serial@40011400 {
465			compatible = "st,stm32f7-uart";
466			reg = <0x40011400 0x400>;
467			interrupts = <71>;
468			clocks = <&rcc 1 CLK_USART6>;
469			status = "disabled";
470		};
471
472		sdio2: mmc@40011c00 {
473			compatible = "arm,pl180", "arm,primecell";
474			arm,primecell-periphid = <0x00880180>;
475			reg = <0x40011c00 0x400>;
476			clocks = <&rcc 0 STM32F7_APB2_CLOCK(SDMMC2)>;
477			clock-names = "apb_pclk";
478			interrupts = <103>;
479			max-frequency = <48000000>;
480			status = "disabled";
481		};
482
483		sdio1: mmc@40012c00 {
484			compatible = "arm,pl180", "arm,primecell";
485			arm,primecell-periphid = <0x00880180>;
486			reg = <0x40012c00 0x400>;
487			clocks = <&rcc 0 STM32F7_APB2_CLOCK(SDMMC1)>;
488			clock-names = "apb_pclk";
489			interrupts = <49>;
490			max-frequency = <48000000>;
491			status = "disabled";
492		};
493
494		syscfg: syscon@40013800 {
495			compatible = "st,stm32-syscfg", "syscon";
496			reg = <0x40013800 0x400>;
497		};
498
499		exti: interrupt-controller@40013c00 {
500			compatible = "st,stm32-exti";
501			interrupt-controller;
502			#interrupt-cells = <2>;
503			reg = <0x40013C00 0x400>;
504			interrupts = <1>, <2>, <3>, <6>, <7>, <8>, <9>, <10>, <23>, <40>, <41>, <42>, <62>, <76>;
505		};
506
507		timers9: timers@40014000 {
508			#address-cells = <1>;
509			#size-cells = <0>;
510			compatible = "st,stm32-timers";
511			reg = <0x40014000 0x400>;
512			clocks = <&rcc 0 STM32F7_APB2_CLOCK(TIM9)>;
513			clock-names = "int";
514			status = "disabled";
515
516			pwm {
517				compatible = "st,stm32-pwm";
518				#pwm-cells = <3>;
519				status = "disabled";
520			};
521
522			timer@8 {
523				compatible = "st,stm32-timer-trigger";
524				reg = <8>;
525				status = "disabled";
526			};
527		};
528
529		timers10: timers@40014400 {
530			compatible = "st,stm32-timers";
531			reg = <0x40014400 0x400>;
532			clocks = <&rcc 0 STM32F7_APB2_CLOCK(TIM10)>;
533			clock-names = "int";
534			status = "disabled";
535
536			pwm {
537				compatible = "st,stm32-pwm";
538				#pwm-cells = <3>;
539				status = "disabled";
540			};
541		};
542
543		timers11: timers@40014800 {
544			compatible = "st,stm32-timers";
545			reg = <0x40014800 0x400>;
546			clocks = <&rcc 0 STM32F7_APB2_CLOCK(TIM11)>;
547			clock-names = "int";
548			status = "disabled";
549
550			pwm {
551				compatible = "st,stm32-pwm";
552				#pwm-cells = <3>;
553				status = "disabled";
554			};
555		};
556
557		pwrcfg: power-config@40007000 {
558			compatible = "st,stm32-power-config", "syscon";
559			reg = <0x40007000 0x400>;
560		};
561
562		crc: crc@40023000 {
563			compatible = "st,stm32f7-crc";
564			reg = <0x40023000 0x400>;
565			clocks = <&rcc 0 12>;
566			status = "disabled";
567		};
568
569		rcc: rcc@40023800 {
570			#reset-cells = <1>;
571			#clock-cells = <2>;
572			compatible = "st,stm32f746-rcc", "st,stm32-rcc";
573			reg = <0x40023800 0x400>;
574			clocks = <&clk_hse>, <&clk_i2s_ckin>;
575			st,syscfg = <&pwrcfg>;
576			assigned-clocks = <&rcc 1 CLK_HSE_RTC>;
577			assigned-clock-rates = <1000000>;
578		};
579
580		dma1: dma-controller@40026000 {
581			compatible = "st,stm32-dma";
582			reg = <0x40026000 0x400>;
583			interrupts = <11>,
584				     <12>,
585				     <13>,
586				     <14>,
587				     <15>,
588				     <16>,
589				     <17>,
590				     <47>;
591			clocks = <&rcc 0 STM32F7_AHB1_CLOCK(DMA1)>;
592			#dma-cells = <4>;
593			status = "disabled";
594		};
595
596		dma2: dma-controller@40026400 {
597			compatible = "st,stm32-dma";
598			reg = <0x40026400 0x400>;
599			interrupts = <56>,
600				     <57>,
601				     <58>,
602				     <59>,
603				     <60>,
604				     <68>,
605				     <69>,
606				     <70>;
607			clocks = <&rcc 0 STM32F7_AHB1_CLOCK(DMA2)>;
608			#dma-cells = <4>;
609			st,mem2mem;
610			status = "disabled";
611		};
612
613		usbotg_hs: usb@40040000 {
614			compatible = "st,stm32f7-hsotg";
615			reg = <0x40040000 0x40000>;
616			interrupts = <77>;
617			clocks = <&rcc 0 STM32F7_AHB1_CLOCK(OTGHS)>;
618			clock-names = "otg";
619			g-rx-fifo-size = <256>;
620			g-np-tx-fifo-size = <32>;
621			g-tx-fifo-size = <128 128 64 64 64 64 32 32>;
622			status = "disabled";
623		};
624
625		usbotg_fs: usb@50000000 {
626			compatible = "st,stm32f4x9-fsotg";
627			reg = <0x50000000 0x40000>;
628			interrupts = <67>;
629			clocks = <&rcc 0 STM32F7_AHB2_CLOCK(OTGFS)>;
630			clock-names = "otg";
631			status = "disabled";
632		};
633	};
634};
635
636&systick {
637	clocks = <&rcc 1 0>;
638	status = "okay";
639};
640