stm32f429.dtsi 23.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
/*
 * Copyright 2015 - Maxime Coquelin <mcoquelin.stm32@gmail.com>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This file is free software; you can redistribute it and/or
 *     modify it under the terms of the GNU General Public License as
 *     published by the Free Software Foundation; either version 2 of the
 *     License, or (at your option) any later version.
 *
 *     This file is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 *     You should have received a copy of the GNU General Public
 *     License along with this file; if not, write to the Free
 *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
 *     MA 02110-1301 USA
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

48
#include "skeleton.dtsi"
49
#include "armv7-m.dtsi"
50
#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
51
#include <dt-bindings/clock/stm32fx-clock.h>
52
#include <dt-bindings/mfd/stm32f4-rcc.h>
53 54 55

/ {
	clocks {
56
		clk_hse: clk-hse {
57 58
			#clock-cells = <0>;
			compatible = "fixed-clock";
59
			clock-frequency = <0>;
60
		};
61 62 63 64 65 66 67

		clk-lse {
			#clock-cells = <0>;
			compatible = "fixed-clock";
			clock-frequency = <32768>;
		};

68
		clk_lsi: clk-lsi {
69 70 71 72
			#clock-cells = <0>;
			compatible = "fixed-clock";
			clock-frequency = <32000>;
		};
73 74 75 76 77 78

		clk_i2s_ckin: i2s-ckin {
			#clock-cells = <0>;
			compatible = "fixed-clock";
			clock-frequency = <0>;
		};
79 80 81 82 83 84 85
	};

	soc {
		timer2: timer@40000000 {
			compatible = "st,stm32-timer";
			reg = <0x40000000 0x400>;
			interrupts = <28>;
86
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM2)>;
87 88 89
			status = "disabled";
		};

90 91 92 93 94
		timers2: timers@40000000 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40000000 0x400>;
95
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM2)>;
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};

			timer@1 {
				compatible = "st,stm32-timer-trigger";
				reg = <1>;
				status = "disabled";
			};
		};

111 112 113 114
		timer3: timer@40000400 {
			compatible = "st,stm32-timer";
			reg = <0x40000400 0x400>;
			interrupts = <29>;
115
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM3)>;
116 117 118
			status = "disabled";
		};

119 120 121 122 123
		timers3: timers@40000400 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40000400 0x400>;
124
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM3)>;
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};

			timer@2 {
				compatible = "st,stm32-timer-trigger";
				reg = <2>;
				status = "disabled";
			};
		};

140 141 142 143
		timer4: timer@40000800 {
			compatible = "st,stm32-timer";
			reg = <0x40000800 0x400>;
			interrupts = <30>;
144
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM4)>;
145 146 147
			status = "disabled";
		};

148 149 150 151 152
		timers4: timers@40000800 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40000800 0x400>;
153
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM4)>;
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};

			timer@3 {
				compatible = "st,stm32-timer-trigger";
				reg = <3>;
				status = "disabled";
			};
		};

169 170 171 172
		timer5: timer@40000c00 {
			compatible = "st,stm32-timer";
			reg = <0x40000c00 0x400>;
			interrupts = <50>;
173
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM5)>;
174 175
		};

176 177 178 179 180
		timers5: timers@40000c00 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40000C00 0x400>;
181
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM5)>;
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};

			timer@4 {
				compatible = "st,stm32-timer-trigger";
				reg = <4>;
				status = "disabled";
			};
		};

197 198 199 200
		timer6: timer@40001000 {
			compatible = "st,stm32-timer";
			reg = <0x40001000 0x400>;
			interrupts = <54>;
201
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM6)>;
202 203 204
			status = "disabled";
		};

205 206 207 208 209
		timers6: timers@40001000 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40001000 0x400>;
210
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM6)>;
211 212 213 214 215 216 217 218 219 220
			clock-names = "int";
			status = "disabled";

			timer@5 {
				compatible = "st,stm32-timer-trigger";
				reg = <5>;
				status = "disabled";
			};
		};

221 222 223 224
		timer7: timer@40001400 {
			compatible = "st,stm32-timer";
			reg = <0x40001400 0x400>;
			interrupts = <55>;
225
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM7)>;
226 227 228
			status = "disabled";
		};

229 230 231 232 233
		timers7: timers@40001400 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40001400 0x400>;
234
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM7)>;
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
			clock-names = "int";
			status = "disabled";

			timer@6 {
				compatible = "st,stm32-timer-trigger";
				reg = <6>;
				status = "disabled";
			};
		};

		timers12: timers@40001800 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40001800 0x400>;
250
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM12)>;
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};

			timer@11 {
				compatible = "st,stm32-timer-trigger";
				reg = <11>;
				status = "disabled";
			};
		};

		timers13: timers@40001c00 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40001C00 0x400>;
271
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM13)>;
272 273 274 275 276 277 278 279 280 281 282 283 284 285
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};
		};

		timers14: timers@40002000 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40002000 0x400>;
286
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM14)>;
287 288 289 290 291 292 293 294 295
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};
		};

296 297 298 299 300 301 302 303 304 305 306 307 308 309
		rtc: rtc@40002800 {
			compatible = "st,stm32-rtc";
			reg = <0x40002800 0x400>;
			clocks = <&rcc 1 CLK_RTC>;
			clock-names = "ck_rtc";
			assigned-clocks = <&rcc 1 CLK_RTC>;
			assigned-clock-parents = <&rcc 1 CLK_LSE>;
			interrupt-parent = <&exti>;
			interrupts = <17 1>;
			interrupt-names = "alarm";
			st,syscfg = <&pwrcfg>;
			status = "disabled";
		};

310 311 312 313 314 315 316
		iwdg: watchdog@40003000 {
			compatible = "st,stm32-iwdg";
			reg = <0x40003000 0x400>;
			clocks = <&clk_lsi>;
			status = "disabled";
		};

317 318 319 320
		usart2: serial@40004400 {
			compatible = "st,stm32-usart", "st,stm32-uart";
			reg = <0x40004400 0x400>;
			interrupts = <38>;
321
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART2)>;
322 323 324 325 326 327 328
			status = "disabled";
		};

		usart3: serial@40004800 {
			compatible = "st,stm32-usart", "st,stm32-uart";
			reg = <0x40004800 0x400>;
			interrupts = <39>;
329
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART3)>;
330
			status = "disabled";
331 332 333
			dmas = <&dma1 1 4 0x400 0x0>,
			       <&dma1 3 4 0x400 0x0>;
			dma-names = "rx", "tx";
334 335 336 337 338 339
		};

		usart4: serial@40004c00 {
			compatible = "st,stm32-uart";
			reg = <0x40004c00 0x400>;
			interrupts = <52>;
340
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART4)>;
341 342 343 344 345 346 347
			status = "disabled";
		};

		usart5: serial@40005000 {
			compatible = "st,stm32-uart";
			reg = <0x40005000 0x400>;
			interrupts = <53>;
348
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART5)>;
349 350 351
			status = "disabled";
		};

352 353 354 355 356 357 358 359 360 361 362 363
		i2c1: i2c@40005400 {
			compatible = "st,stm32f4-i2c";
			reg = <0x40005400 0x400>;
			interrupts = <31>,
				     <32>;
			resets = <&rcc STM32F4_APB1_RESET(I2C1)>;
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(I2C1)>;
			#address-cells = <1>;
			#size-cells = <0>;
			status = "disabled";
		};

364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
		dac: dac@40007400 {
			compatible = "st,stm32f4-dac-core";
			reg = <0x40007400 0x400>;
			resets = <&rcc STM32F4_APB1_RESET(DAC)>;
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(DAC)>;
			clock-names = "pclk";
			#address-cells = <1>;
			#size-cells = <0>;
			status = "disabled";

			dac1: dac@1 {
				compatible = "st,stm32-dac";
				#io-channels-cells = <1>;
				reg = <1>;
				status = "disabled";
			};

			dac2: dac@2 {
				compatible = "st,stm32-dac";
				#io-channels-cells = <1>;
				reg = <2>;
				status = "disabled";
			};
		};

389 390 391 392
		usart7: serial@40007800 {
			compatible = "st,stm32-usart", "st,stm32-uart";
			reg = <0x40007800 0x400>;
			interrupts = <82>;
393
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART7)>;
394 395 396 397 398 399 400
			status = "disabled";
		};

		usart8: serial@40007c00 {
			compatible = "st,stm32-usart", "st,stm32-uart";
			reg = <0x40007c00 0x400>;
			interrupts = <83>;
401
			clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART8)>;
402 403 404
			status = "disabled";
		};

405 406 407 408 409
		timers1: timers@40010000 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40010000 0x400>;
410
			clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM1)>;
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};

			timer@0 {
				compatible = "st,stm32-timer-trigger";
				reg = <0>;
				status = "disabled";
			};
		};

		timers8: timers@40010400 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40010400 0x400>;
431
			clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM8)>;
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};

			timer@7 {
				compatible = "st,stm32-timer-trigger";
				reg = <7>;
				status = "disabled";
			};
		};

447 448 449 450
		usart1: serial@40011000 {
			compatible = "st,stm32-usart", "st,stm32-uart";
			reg = <0x40011000 0x400>;
			interrupts = <37>;
451
			clocks = <&rcc 0 STM32F4_APB2_CLOCK(USART1)>;
452
			status = "disabled";
453 454 455
			dmas = <&dma2 2 4 0x400 0x0>,
			       <&dma2 7 4 0x400 0x0>;
			dma-names = "rx", "tx";
456 457 458 459 460 461
		};

		usart6: serial@40011400 {
			compatible = "st,stm32-usart", "st,stm32-uart";
			reg = <0x40011400 0x400>;
			interrupts = <71>;
462
			clocks = <&rcc 0 STM32F4_APB2_CLOCK(USART6)>;
463 464
			status = "disabled";
		};
465

466 467 468 469
		adc: adc@40012000 {
			compatible = "st,stm32f4-adc-core";
			reg = <0x40012000 0x400>;
			interrupts = <18>;
470
			clocks = <&rcc 0 STM32F4_APB2_CLOCK(ADC1)>;
471 472 473 474 475 476 477 478 479 480 481
			clock-names = "adc";
			interrupt-controller;
			#interrupt-cells = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			status = "disabled";

			adc1: adc@0 {
				compatible = "st,stm32f4-adc";
				#io-channel-cells = <1>;
				reg = <0x0>;
482
				clocks = <&rcc 0 STM32F4_APB2_CLOCK(ADC1)>;
483 484
				interrupt-parent = <&adc>;
				interrupts = <0>;
485 486
				dmas = <&dma2 0 0 0x400 0x0>;
				dma-names = "rx";
487 488 489 490 491 492 493
				status = "disabled";
			};

			adc2: adc@100 {
				compatible = "st,stm32f4-adc";
				#io-channel-cells = <1>;
				reg = <0x100>;
494
				clocks = <&rcc 0 STM32F4_APB2_CLOCK(ADC2)>;
495 496
				interrupt-parent = <&adc>;
				interrupts = <1>;
497 498
				dmas = <&dma2 3 1 0x400 0x0>;
				dma-names = "rx";
499 500 501 502 503 504 505
				status = "disabled";
			};

			adc3: adc@200 {
				compatible = "st,stm32f4-adc";
				#io-channel-cells = <1>;
				reg = <0x200>;
506
				clocks = <&rcc 0 STM32F4_APB2_CLOCK(ADC3)>;
507 508
				interrupt-parent = <&adc>;
				interrupts = <2>;
509 510
				dmas = <&dma2 1 2 0x400 0x0>;
				dma-names = "rx";
511 512 513 514
				status = "disabled";
			};
		};

515 516 517 518 519
		syscfg: system-config@40013800 {
			compatible = "syscon";
			reg = <0x40013800 0x400>;
		};

520 521 522 523 524 525 526 527
		exti: interrupt-controller@40013c00 {
			compatible = "st,stm32-exti";
			interrupt-controller;
			#interrupt-cells = <2>;
			reg = <0x40013C00 0x400>;
			interrupts = <1>, <2>, <3>, <6>, <7>, <8>, <9>, <10>, <23>, <40>, <41>, <42>, <62>, <76>;
		};

528 529 530 531 532
		timers9: timers@40014000 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40014000 0x400>;
533
			clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM9)>;
534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};

			timer@8 {
				compatible = "st,stm32-timer-trigger";
				reg = <8>;
				status = "disabled";
			};
		};

		timers10: timers@40014400 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40014400 0x400>;
554
			clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM10)>;
555 556 557 558 559 560 561 562 563 564 565 566 567 568
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};
		};

		timers11: timers@40014800 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "st,stm32-timers";
			reg = <0x40014800 0x400>;
569
			clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM11)>;
570 571 572 573 574 575 576 577 578
			clock-names = "int";
			status = "disabled";

			pwm {
				compatible = "st,stm32-pwm";
				status = "disabled";
			};
		};

579 580 581 582 583
		pwrcfg: power-config@40007000 {
			compatible = "syscon";
			reg = <0x40007000 0x400>;
		};

584 585 586 587 588 589 590 591 592 593 594
		ltdc: display-controller@40016800 {
			compatible = "st,stm32-ltdc";
			reg = <0x40016800 0x200>;
			interrupts = <88>, <89>;
			resets = <&rcc STM32F4_APB2_RESET(LTDC)>;
			clocks = <&rcc 1 CLK_LCD>;
			clock-names = "lcd";
			status = "disabled";
		};

		pinctrl: pin-controller {
595 596 597 598
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "st,stm32f429-pinctrl";
			ranges = <0 0x40020000 0x3000>;
599 600
			interrupt-parent = <&exti>;
			st,syscfg = <&syscfg 0x8>;
601 602 603 604 605
			pins-are-numbered;

			gpioa: gpio@40020000 {
				gpio-controller;
				#gpio-cells = <2>;
606 607
				interrupt-controller;
				#interrupt-cells = <2>;
608
				reg = <0x0 0x400>;
609
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
610 611 612 613 614 615
				st,bank-name = "GPIOA";
			};

			gpiob: gpio@40020400 {
				gpio-controller;
				#gpio-cells = <2>;
616 617
				interrupt-controller;
				#interrupt-cells = <2>;
618
				reg = <0x400 0x400>;
619
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
620 621 622 623 624 625
				st,bank-name = "GPIOB";
			};

			gpioc: gpio@40020800 {
				gpio-controller;
				#gpio-cells = <2>;
626 627
				interrupt-controller;
				#interrupt-cells = <2>;
628
				reg = <0x800 0x400>;
629
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
630 631 632 633 634 635
				st,bank-name = "GPIOC";
			};

			gpiod: gpio@40020c00 {
				gpio-controller;
				#gpio-cells = <2>;
636 637
				interrupt-controller;
				#interrupt-cells = <2>;
638
				reg = <0xc00 0x400>;
639
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOD)>;
640 641 642 643 644 645
				st,bank-name = "GPIOD";
			};

			gpioe: gpio@40021000 {
				gpio-controller;
				#gpio-cells = <2>;
646 647
				interrupt-controller;
				#interrupt-cells = <2>;
648
				reg = <0x1000 0x400>;
649
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOE)>;
650 651 652 653 654 655
				st,bank-name = "GPIOE";
			};

			gpiof: gpio@40021400 {
				gpio-controller;
				#gpio-cells = <2>;
656 657
				interrupt-controller;
				#interrupt-cells = <2>;
658
				reg = <0x1400 0x400>;
659
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOF)>;
660 661 662 663 664 665
				st,bank-name = "GPIOF";
			};

			gpiog: gpio@40021800 {
				gpio-controller;
				#gpio-cells = <2>;
666 667
				interrupt-controller;
				#interrupt-cells = <2>;
668
				reg = <0x1800 0x400>;
669
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOG)>;
670 671 672 673 674 675
				st,bank-name = "GPIOG";
			};

			gpioh: gpio@40021c00 {
				gpio-controller;
				#gpio-cells = <2>;
676 677
				interrupt-controller;
				#interrupt-cells = <2>;
678
				reg = <0x1c00 0x400>;
679
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOH)>;
680 681 682 683 684 685
				st,bank-name = "GPIOH";
			};

			gpioi: gpio@40022000 {
				gpio-controller;
				#gpio-cells = <2>;
686 687
				interrupt-controller;
				#interrupt-cells = <2>;
688
				reg = <0x2000 0x400>;
689
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOI)>;
690 691 692 693 694 695
				st,bank-name = "GPIOI";
			};

			gpioj: gpio@40022400 {
				gpio-controller;
				#gpio-cells = <2>;
696 697
				interrupt-controller;
				#interrupt-cells = <2>;
698
				reg = <0x2400 0x400>;
699
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOJ)>;
700 701 702 703 704 705
				st,bank-name = "GPIOJ";
			};

			gpiok: gpio@40022800 {
				gpio-controller;
				#gpio-cells = <2>;
706 707
				interrupt-controller;
				#interrupt-cells = <2>;
708
				reg = <0x2800 0x400>;
709
				clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOK)>;
710 711
				st,bank-name = "GPIOK";
			};
712 713 714 715 716 717 718 719 720 721 722 723 724

			usart1_pins_a: usart1@0 {
				pins1 {
					pinmux = <STM32F429_PA9_FUNC_USART1_TX>;
					bias-disable;
					drive-push-pull;
					slew-rate = <0>;
				};
				pins2 {
					pinmux = <STM32F429_PA10_FUNC_USART1_RX>;
					bias-disable;
				};
			};
725

726 727 728 729 730 731 732 733 734 735 736 737 738
			usart3_pins_a: usart3@0 {
				pins1 {
					pinmux = <STM32F429_PB10_FUNC_USART3_TX>;
					bias-disable;
					drive-push-pull;
					slew-rate = <0>;
				};
				pins2 {
					pinmux = <STM32F429_PB11_FUNC_USART3_RX>;
					bias-disable;
				};
			};

739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760
			usbotg_fs_pins_a: usbotg_fs@0 {
				pins {
					pinmux = <STM32F429_PA10_FUNC_OTG_FS_ID>,
						 <STM32F429_PA11_FUNC_OTG_FS_DM>,
						 <STM32F429_PA12_FUNC_OTG_FS_DP>;
					bias-disable;
					drive-push-pull;
					slew-rate = <2>;
				};
			};

			usbotg_fs_pins_b: usbotg_fs@1 {
				pins {
					pinmux = <STM32F429_PB12_FUNC_OTG_HS_ID>,
						 <STM32F429_PB14_FUNC_OTG_HS_DM>,
						 <STM32F429_PB15_FUNC_OTG_HS_DP>;
					bias-disable;
					drive-push-pull;
					slew-rate = <2>;
				};
			};

761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779
			usbotg_hs_pins_a: usbotg_hs@0 {
				pins {
					pinmux = <STM32F429_PH4_FUNC_OTG_HS_ULPI_NXT>,
						 <STM32F429_PI11_FUNC_OTG_HS_ULPI_DIR>,
						 <STM32F429_PC0_FUNC_OTG_HS_ULPI_STP>,
						 <STM32F429_PA5_FUNC_OTG_HS_ULPI_CK>,
						 <STM32F429_PA3_FUNC_OTG_HS_ULPI_D0>,
						 <STM32F429_PB0_FUNC_OTG_HS_ULPI_D1>,
						 <STM32F429_PB1_FUNC_OTG_HS_ULPI_D2>,
						 <STM32F429_PB10_FUNC_OTG_HS_ULPI_D3>,
						 <STM32F429_PB11_FUNC_OTG_HS_ULPI_D4>,
						 <STM32F429_PB12_FUNC_OTG_HS_ULPI_D5>,
						 <STM32F429_PB13_FUNC_OTG_HS_ULPI_D6>,
						 <STM32F429_PB5_FUNC_OTG_HS_ULPI_D7>;
					bias-disable;
					drive-push-pull;
					slew-rate = <2>;
				};
			};
780

781
			ethernet_mii: mii@0 {
782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799
				pins {
					pinmux = <STM32F429_PG13_FUNC_ETH_MII_TXD0_ETH_RMII_TXD0>,
						 <STM32F429_PG14_FUNC_ETH_MII_TXD1_ETH_RMII_TXD1>,
						 <STM32F429_PC2_FUNC_ETH_MII_TXD2>,
						 <STM32F429_PB8_FUNC_ETH_MII_TXD3>,
						 <STM32F429_PC3_FUNC_ETH_MII_TX_CLK>,
						 <STM32F429_PG11_FUNC_ETH_MII_TX_EN_ETH_RMII_TX_EN>,
						 <STM32F429_PA2_FUNC_ETH_MDIO>,
						 <STM32F429_PC1_FUNC_ETH_MDC>,
						 <STM32F429_PA1_FUNC_ETH_MII_RX_CLK_ETH_RMII_REF_CLK>,
						 <STM32F429_PA7_FUNC_ETH_MII_RX_DV_ETH_RMII_CRS_DV>,
						 <STM32F429_PC4_FUNC_ETH_MII_RXD0_ETH_RMII_RXD0>,
						 <STM32F429_PC5_FUNC_ETH_MII_RXD1_ETH_RMII_RXD1>,
						 <STM32F429_PH6_FUNC_ETH_MII_RXD2>,
						 <STM32F429_PH7_FUNC_ETH_MII_RXD3>;
					slew-rate = <2>;
				};
			};
800 801 802 803 804 805

			adc3_in8_pin: adc@200 {
				pins {
					pinmux = <STM32F429_PF10_FUNC_ANALOG>;
				};
			};
806 807 808 809 810 811 812 813 814 815 816 817 818 819 820

			pwm1_pins: pwm@1 {
				pins {
					pinmux = <STM32F429_PA8_FUNC_TIM1_CH1>,
						 <STM32F429_PB13_FUNC_TIM1_CH1N>,
						 <STM32F429_PB12_FUNC_TIM1_BKIN>;
				};
			};

			pwm3_pins: pwm@3 {
				pins {
					pinmux = <STM32F429_PB4_FUNC_TIM3_CH1>,
						 <STM32F429_PB5_FUNC_TIM3_CH2>;
				};
			};
821 822 823 824 825 826 827 828 829

			i2c1_pins: i2c1@0 {
				pins {
					pinmux = <STM32F429_PB9_FUNC_I2C1_SDA>,
						 <STM32F429_PB6_FUNC_I2C1_SCL>;
					bias-disable;
					drive-open-drain;
					slew-rate = <3>;
				};
830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863
			};

			ltdc_pins: ltdc@0 {
				pins {
					pinmux = <STM32F429_PI12_FUNC_LCD_HSYNC>,
						 <STM32F429_PI13_FUNC_LCD_VSYNC>,
						 <STM32F429_PI14_FUNC_LCD_CLK>,
						 <STM32F429_PI15_FUNC_LCD_R0>,
						 <STM32F429_PJ0_FUNC_LCD_R1>,
						 <STM32F429_PJ1_FUNC_LCD_R2>,
						 <STM32F429_PJ2_FUNC_LCD_R3>,
						 <STM32F429_PJ3_FUNC_LCD_R4>,
						 <STM32F429_PJ4_FUNC_LCD_R5>,
						 <STM32F429_PJ5_FUNC_LCD_R6>,
						 <STM32F429_PJ6_FUNC_LCD_R7>,
						 <STM32F429_PJ7_FUNC_LCD_G0>,
						 <STM32F429_PJ8_FUNC_LCD_G1>,
						 <STM32F429_PJ9_FUNC_LCD_G2>,
						 <STM32F429_PJ10_FUNC_LCD_G3>,
						 <STM32F429_PJ11_FUNC_LCD_G4>,
						 <STM32F429_PJ12_FUNC_LCD_B0>,
						 <STM32F429_PJ13_FUNC_LCD_B1>,
						 <STM32F429_PJ14_FUNC_LCD_B2>,
						 <STM32F429_PJ15_FUNC_LCD_B3>,
						 <STM32F429_PK0_FUNC_LCD_G5>,
						 <STM32F429_PK1_FUNC_LCD_G6>,
						 <STM32F429_PK2_FUNC_LCD_G7>,
						 <STM32F429_PK3_FUNC_LCD_B4>,
						 <STM32F429_PK4_FUNC_LCD_B5>,
						 <STM32F429_PK5_FUNC_LCD_B6>,
						 <STM32F429_PK6_FUNC_LCD_B7>,
						 <STM32F429_PK7_FUNC_LCD_DE>;
					slew-rate = <2>;
				};
864
			};
865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887

			dcmi_pins: dcmi@0 {
				pins {
					pinmux = <STM32F429_PA4_FUNC_DCMI_HSYNC>,
						 <STM32F429_PB7_FUNC_DCMI_VSYNC>,
						 <STM32F429_PA6_FUNC_DCMI_PIXCLK>,
						 <STM32F429_PC6_FUNC_DCMI_D0>,
						 <STM32F429_PC7_FUNC_DCMI_D1>,
						 <STM32F429_PC8_FUNC_DCMI_D2>,
						 <STM32F429_PC9_FUNC_DCMI_D3>,
						 <STM32F429_PC11_FUNC_DCMI_D4>,
						 <STM32F429_PD3_FUNC_DCMI_D5>,
						 <STM32F429_PB8_FUNC_DCMI_D6>,
						 <STM32F429_PE6_FUNC_DCMI_D7>,
						 <STM32F429_PC10_FUNC_DCMI_D8>,
						 <STM32F429_PC12_FUNC_DCMI_D9>,
						 <STM32F429_PD6_FUNC_DCMI_D10>,
						 <STM32F429_PD2_FUNC_DCMI_D11>;
					bias-disable;
					drive-push-pull;
					slew-rate = <3>;
				};
			};
888 889
		};

890 891 892 893 894 895 896
		crc: crc@40023000 {
			compatible = "st,stm32f4-crc";
			reg = <0x40023000 0x400>;
			clocks = <&rcc 0 STM32F4_AHB1_CLOCK(CRC)>;
			status = "disabled";
		};

897
		rcc: rcc@40023810 {
898
			#reset-cells = <1>;
899 900 901
			#clock-cells = <2>;
			compatible = "st,stm32f42xx-rcc", "st,stm32-rcc";
			reg = <0x40023800 0x400>;
902
			clocks = <&clk_hse>, <&clk_i2s_ckin>;
903
			st,syscfg = <&pwrcfg>;
904 905
			assigned-clocks = <&rcc 1 CLK_HSE_RTC>;
			assigned-clock-rates = <1000000>;
906
		};
907

908 909 910 911 912 913 914 915 916 917 918
		dma1: dma-controller@40026000 {
			compatible = "st,stm32-dma";
			reg = <0x40026000 0x400>;
			interrupts = <11>,
				     <12>,
				     <13>,
				     <14>,
				     <15>,
				     <16>,
				     <17>,
				     <47>;
919
			clocks = <&rcc 0 STM32F4_AHB1_CLOCK(DMA1)>;
920 921 922 923 924 925 926 927 928 929 930 931 932 933
			#dma-cells = <4>;
		};

		dma2: dma-controller@40026400 {
			compatible = "st,stm32-dma";
			reg = <0x40026400 0x400>;
			interrupts = <56>,
				     <57>,
				     <58>,
				     <59>,
				     <60>,
				     <68>,
				     <69>,
				     <70>;
934
			clocks = <&rcc 0 STM32F4_AHB1_CLOCK(DMA2)>;
935 936 937 938
			#dma-cells = <4>;
			st,mem2mem;
		};

939
		mac: ethernet@40028000 {
940 941 942
			compatible = "st,stm32-dwmac", "snps,dwmac-3.50a";
			reg = <0x40028000 0x8000>;
			reg-names = "stmmaceth";
943 944
			interrupts = <61>;
			interrupt-names = "macirq";
945
			clock-names = "stmmaceth", "mac-clk-tx", "mac-clk-rx";
946 947 948
			clocks = <&rcc 0 STM32F4_AHB1_CLOCK(ETHMAC)>,
					<&rcc 0 STM32F4_AHB1_CLOCK(ETHMACTX)>,
					<&rcc 0 STM32F4_AHB1_CLOCK(ETHMACRX)>;
949 950 951 952 953 954
			st,syscon = <&syscfg 0x4>;
			snps,pbl = <8>;
			snps,mixed-burst;
			status = "disabled";
		};

955 956 957 958
		usbotg_hs: usb@40040000 {
			compatible = "snps,dwc2";
			reg = <0x40040000 0x40000>;
			interrupts = <77>;
959
			clocks = <&rcc 0 STM32F4_AHB1_CLOCK(OTGHS)>;
960 961 962 963
			clock-names = "otg";
			status = "disabled";
		};

964 965 966 967 968 969 970 971 972
		usbotg_fs: usb@50000000 {
			compatible = "st,stm32f4x9-fsotg";
			reg = <0x50000000 0x40000>;
			interrupts = <67>;
			clocks = <&rcc 0 39>;
			clock-names = "otg";
			status = "disabled";
		};

973 974 975 976 977 978 979 980 981 982 983 984 985 986
		dcmi: dcmi@50050000 {
			compatible = "st,stm32-dcmi";
			reg = <0x50050000 0x400>;
			interrupts = <78>;
			resets = <&rcc STM32F4_AHB2_RESET(DCMI)>;
			clocks = <&rcc 0 STM32F4_AHB2_CLOCK(DCMI)>;
			clock-names = "mclk";
			pinctrl-names = "default";
			pinctrl-0 = <&dcmi_pins>;
			dmas = <&dma2 1 1 0x414 0x3>;
			dma-names = "tx";
			status = "disabled";
		};

987 988 989 990
		rng: rng@50060800 {
			compatible = "st,stm32-rng";
			reg = <0x50060800 0x400>;
			interrupts = <80>;
991 992
			clocks = <&rcc 0 STM32F4_AHB2_CLOCK(RNG)>;

993
		};
994 995 996 997
	};
};

&systick {
998
	clocks = <&rcc 1 SYSTICK>;
999 1000
	status = "okay";
};