1// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause)
2/*
3 * Copyright (C) 2020 STMicroelectronics - All Rights Reserved
4 * Copyright (C) 2021 Rouven Czerwinski, Pengutronix
5 * Copyright (C) 2023 Leonard Göhrs, Pengutronix
6 */
7
8#include "stm32mp15xc.dtsi"
9#include "stm32mp15xx-osd32.dtsi"
10#include "stm32mp15xxac-pinctrl.dtsi"
11
12#include <dt-bindings/gpio/gpio.h>
13#include <dt-bindings/input/input.h>
14#include <dt-bindings/leds/common.h>
15#include <dt-bindings/pwm/pwm.h>
16
17/ {
18	aliases {
19		ethernet0 = &ethernet0;
20		ethernet1 = &port_uplink;
21		ethernet2 = &port_dut;
22		mmc1 = &sdmmc2;
23		serial0 = &uart4;
24		serial1 = &usart3;
25	};
26
27	chosen {
28		stdout-path = &uart4;
29	};
30
31	led-controller-0 {
32		compatible = "gpio-leds";
33
34		led-0 {
35			label = "tac:green:user1";
36			gpios = <&gpiof 10 GPIO_ACTIVE_HIGH>;
37			linux,default-trigger = "heartbeat";
38		};
39
40		led-1 {
41			label = "tac:green:user2";
42			gpios = <&gpiog 7 GPIO_ACTIVE_HIGH>;
43		};
44
45		led-2 {
46			label = "tac:green:statusdut";
47			gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
48		};
49
50		/* led-3 and led-4 are internally connected antiparallel to one
51		 * another inside the ethernet jack like this:
52		 * GPIOA14 ---+---|led-3|>--+--- GPIOD15
53		 *            +--<|led-4|---+
54		 * E.g. only one of the LEDs can be illuminated at a time while
55		 * the other output must be driven low.
56		 * This should likely be implemented using a multi color LED
57		 * driver for antiparallel LEDs.
58		 */
59		led-3 {
60			label = "tac:green:statuslab";
61			gpios = <&gpioa 14 GPIO_ACTIVE_HIGH>;
62		};
63
64		led-4 {
65			label = "tac:orange:statuslab";
66			gpios = <&gpiod 15 GPIO_ACTIVE_HIGH>;
67		};
68	};
69
70	gpio-keys {
71		compatible = "gpio-keys";
72
73		button-lower {
74			label = "USER_BTN2";
75			linux,code = <KEY_ESC>;
76			gpios = <&gpioe 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
77		};
78
79		button-upper {
80			label = "USER_BTN";
81			linux,code = <KEY_HOME>;
82			gpios = <&gpioi 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
83		};
84	};
85
86	/* supplied by either barrel connector or PoE */
87	reg_12v: regulator-12v {
88		compatible = "regulator-fixed";
89		regulator-name = "12V";
90		regulator-min-microvolt = <12000000>;
91		regulator-max-microvolt = <12000000>;
92		regulator-always-on;
93	};
94
95	reg_5v: regulator-5v {
96		compatible = "regulator-fixed";
97		regulator-name = "5V";
98		regulator-min-microvolt = <5000000>;
99		regulator-max-microvolt = <5000000>;
100		regulator-always-on;
101		vin-supply = <&reg_12v>;
102	};
103
104	reg_1v2: regulator-1v2 {
105		compatible = "regulator-fixed";
106		regulator-name = "1V2";
107		regulator-min-microvolt = <1200000>;
108		regulator-max-microvolt = <1200000>;
109		regulator-always-on;
110		vin-supply = <&reg_5v>;
111	};
112
113	reg_pb_5v: regulator-pb-5v {
114		compatible = "regulator-fixed";
115		regulator-name = "5V_POWERBOARD";
116		regulator-min-microvolt = <5000000>;
117		regulator-max-microvolt = <5000000>;
118		regulator-always-on;
119		vin-supply = <&reg_5v>;
120	};
121
122	reg_pb_3v3: regulator-pb-3v3 {
123		compatible = "regulator-fixed";
124		regulator-name = "3V3_POWERBOARD";
125		regulator-min-microvolt = <3300000>;
126		regulator-max-microvolt = <3300000>;
127		regulator-always-on;
128		vin-supply = <&reg_pb_5v>;
129	};
130
131	output-iobus-12v {
132		compatible = "regulator-output";
133		vout-supply = <&reg_iobus_12v>;
134	};
135
136	output-vuart {
137		compatible = "regulator-output";
138		vout-supply = <&v3v3_hdmi>;
139	};
140};
141
142baseboard_eeprom: &sip_eeprom {
143};
144
145&adc {
146	pinctrl-names = "default";
147	pinctrl-0 = <&adc1_ain_pins_a>;
148	vdd-supply = <&vdd>;
149	vdda-supply = <&vdda>;
150	vref-supply = <&vrefbuf>;
151	status = "okay";
152
153	adc1: adc@0 {
154		st,adc-channels = <0 1 2 5 9 10 13 15>;
155		st,min-sample-time-nsecs = <5000>;
156		#address-cells = <1>;
157		#size-cells = <0>;
158		status = "okay";
159
160		channel@0 {
161			reg = <0>;
162			label = "HOST_2_CURR_FB";
163		};
164
165		channel@1 {
166			reg = <1>;
167			label = "HOST_3_CURR_FB";
168		};
169
170		channel@2 {
171			reg = <2>;
172			label = "OUT_0_FB";
173		};
174
175		channel@5 {
176			reg = <5>;
177			label = "IOBUS_CURR_FB";
178		};
179
180		channel@9 {
181			reg = <9>;
182			label = "IOBUS_VOLT_FB";
183		};
184
185		channel@10 {
186			reg = <10>;
187			label = "OUT_1_FB";
188		};
189
190		channel@13 {
191			reg = <13>;
192			label = "HOST_CURR_FB";
193		};
194
195		channel@15 {
196			reg = <15>;
197			label = "HOST_1_CURR_FB";
198		};
199	};
200
201	adc2: adc@100 {
202		st,adc-channels = <12>;
203		st,min-sample-time-nsecs = <500000>;
204		#address-cells = <1>;
205		#size-cells = <0>;
206		status = "okay";
207
208		channel@12 {
209			reg = <12>;
210			label = "TEMP_INTERNAL";
211		};
212	};
213};
214
215&crc1 {
216	status = "okay";
217};
218
219&cryp1 {
220	status = "okay";
221};
222
223&dts {
224	status = "okay";
225};
226
227&ethernet0 {
228	assigned-clocks = <&rcc ETHCK_K>, <&rcc PLL4_P>;
229	assigned-clock-parents = <&rcc PLL4_P>;
230	assigned-clock-rates = <125000000>; /* Clock PLL4 to 750Mhz in ATF */
231
232	pinctrl-names = "default", "sleep";
233	pinctrl-0 = <&ethernet0_rgmii_pins_e>;
234	pinctrl-1 = <&ethernet0_rgmii_sleep_pins_e>;
235
236	st,eth-clk-sel;
237	phy-mode = "rgmii-id";
238
239	status = "okay";
240
241	fixed-link {
242		speed = <1000>;
243		full-duplex;
244	};
245};
246
247&ethernet0_rgmii_pins_e {
248	pins1 {
249		/* Reduce EMI emission by reducing RGMII drive strength */
250		slew-rate = <1>;
251	};
252};
253
254&gpiob {
255	gpio-line-names = "", "", "", "", "", /*  0 */
256	"", "USB_RESET", "", "", "",          /*  5 */
257	"", "", "", "", "",                   /* 10 */
258	"";                                   /* 15 */
259};
260
261&gpiod {
262	gpio-line-names = "", "", "", "", "TP38", /*  0 */
263	"TP39", "", "", "TP41", "TP42",           /*  5 */
264	"OLED_DC", "", "", "ETH_CS", "",          /* 10 */
265	"ETH_LAB_LEDRN";                          /* 15 */
266};
267
268&gpioe {
269	gpio-line-names = "TP35", "", "", "", "CAN_1_120R", /*  0 */
270	"", "", "USER_BTN2", "TP48", "UART_TX_EN",          /*  5 */
271	"UART_RX_EN", "TP24", "", "TP25", "TP26",           /* 10 */
272	"TP27";                                             /* 15 */
273};
274
275&gpiof {
276	gpio-line-names = "TP36", "TP37", "", "", "OLED_CS", /*  0 */
277	"", "", "", "", "",                                  /*  5 */
278	"USER_LED1", "", "STACK_CS0", "", "",                /* 10 */
279	"";                                                  /* 15 */
280};
281
282&gpiog {
283	gpio-line-names = "ETH_RESET", "", "", "", "",               /*  0 */
284	"IOBUS_FLT_FB", "", "USER_LED2", "ETH1_PPS_A", "CAN_0_120R", /*  5 */
285	"TP49", "", "", "", "",                                      /* 10 */
286	"";                                                          /* 15 */
287};
288
289&gpioh {
290	gpio-line-names = "", "", "OUT_1", "OUT_0", "OLED_RESET", /*  0 */
291	"", "", "", "", "",                                       /*  5 */
292	"ETH1_PPS_B", "ETH_GPIO2", "", "IOBUS_PWR_EN", "",        /* 10 */
293	"TP33";                                                   /* 15 */
294};
295
296&gpioi {
297	gpio-line-names = "TIM_RTS", "", "", "", "DEVICE_DATA_EN", /*  0 */
298	"", "", "", "ETH_WOL", "TP43",                             /*  5 */
299	"", "USER_BTN";                                            /* 10 */
300};
301
302&gpioz {
303	gpio-line-names = "HWID0", "HWID1", "HWID2", "HWID3", "", /*  0 */
304	"", "HWID4", "HWID5";                                     /*  5 */
305};
306
307&hash1 {
308	status = "okay";
309};
310
311&i2c1 {
312	pinctrl-names = "default", "sleep";
313	pinctrl-0 = <&i2c1_pins_b>;
314	pinctrl-1 = <&i2c1_sleep_pins_b>;
315	status = "okay";
316
317	powerboard_eeprom: eeprom@50 {
318		compatible = "atmel,24c02";
319		reg = <0x50>;
320		vcc-supply = <&v3v3>;
321	};
322
323	temperature-sensor@48 {
324		compatible = "national,lm75a";
325		reg = <0x48>;
326		status = "disabled";
327	};
328};
329
330&i2c5 {
331	/delete-property/dmas;
332	/delete-property/dma-names;
333
334	pinctrl-names = "default", "sleep";
335	pinctrl-0 = <&i2c5_pins_b>;
336	pinctrl-1 = <&i2c5_sleep_pins_b>;
337
338	status = "okay";
339
340	usbhub: usbhub@2c {
341		compatible ="microchip,usb2514b";
342		reg = <0x2c>;
343		vdd-supply = <&v3v3>;
344		reset-gpios = <&gpiob 6 GPIO_ACTIVE_LOW>;
345	};
346};
347
348&iwdg2 {
349	timeout-sec = <8>;
350	status = "okay";
351};
352
353&m_can1 {
354	pinctrl-names = "default", "sleep";
355	pinctrl-0 = <&m_can1_pins_b>;
356	pinctrl-1 = <&m_can1_sleep_pins_b>;
357	status = "okay";
358};
359
360&m_can2 {
361	pinctrl-names = "default", "sleep";
362	pinctrl-0 = <&m_can2_pins_a>;
363	pinctrl-1 = <&m_can2_sleep_pins_a>;
364	status = "okay";
365};
366
367&pmic {
368	regulators {
369		buck1-supply = <&reg_5v>;	/* VIN */
370		buck2-supply = <&reg_5v>;	/* VIN */
371		buck3-supply = <&reg_5v>;	/* VIN */
372		buck4-supply = <&reg_5v>;	/* VIN */
373		ldo2-supply = <&reg_5v>;	/* PMIC_LDO25IN */
374		ldo4-supply = <&reg_5v>;	/* VIN */
375		ldo5-supply = <&reg_5v>;	/* PMIC_LDO25IN */
376		vref_ddr-supply = <&reg_5v>;	/* VIN */
377		boost-supply = <&reg_5v>;	/* PMIC_BSTIN */
378		pwr_sw2-supply = <&bst_out>;	/* PMIC_SWIN */
379	};
380};
381
382&pwr_regulators {
383	vdd-supply = <&vdd>;
384	vdd_3v3_usbfs-supply = <&vdd_usb>;
385};
386
387&rtc {
388	status = "okay";
389};
390
391&sdmmc2 {
392	pinctrl-names = "default", "opendrain", "sleep";
393	pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_b>;
394	pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_b>;
395	pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_b>;
396	vmmc-supply = <&v3v3>;
397
398	bus-width = <8>;
399	mmc-ddr-3_3v;
400	no-1-8-v;
401	non-removable;
402	no-sd;
403	no-sdio;
404	st,neg-edge;
405
406	status = "okay";
407};
408
409&spi2 {
410	pinctrl-names = "default";
411	pinctrl-0 = <&spi2_pins_c>;
412	cs-gpios = <&gpiof 12 GPIO_ACTIVE_LOW>;
413	status = "okay";
414};
415
416&spi4 {
417	pinctrl-names = "default";
418	pinctrl-0 = <&spi4_pins_a>;
419	cs-gpios = <&gpiof 4 GPIO_ACTIVE_LOW>;
420	status = "okay";
421
422	lcd: display@0 {
423		compatible = "shineworld,lh133k", "panel-mipi-dbi-spi";
424		reg = <0>;
425		power-supply = <&v3v3>;
426		io-supply = <&v3v3>;
427		backlight = <&backlight>;
428		dc-gpios = <&gpiod 10 GPIO_ACTIVE_HIGH>;
429		reset-gpios = <&gpioh 4 GPIO_ACTIVE_HIGH>;
430		spi-3wire;
431		spi-max-frequency = <32000000>;
432
433		width-mm = <23>;
434		height-mm = <23>;
435		rotation = <180>;
436
437		panel-timing {
438			hactive = <240>;
439			vactive = <240>;
440			hback-porch = <0>;
441			vback-porch = <0>;
442
443			clock-frequency = <0>;
444			hfront-porch = <0>;
445			hsync-len = <0>;
446			vfront-porch = <0>;
447			vsync-len = <0>;
448		};
449	};
450};
451
452&spi5 {
453	pinctrl-names = "default";
454	pinctrl-0 = <&spi5_pins_a>;
455
456	/* spare dmas for other usage */
457	/delete-property/dmas;
458	/delete-property/dma-names;
459
460	cs-gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;
461
462	status = "okay";
463
464	switch: switch@0 {
465		compatible = "microchip,ksz9563";
466		reg = <0>;
467
468		reset-gpios = <&gpiog 0 GPIO_ACTIVE_LOW>;
469		spi-max-frequency = <44000000>;
470
471		interrupt-parent = <&gpioa>;
472		interrupts = <6 IRQ_TYPE_EDGE_RISING>;
473
474		ports {
475			#address-cells = <1>;
476			#size-cells = <0>;
477			port_dut: port@0 {
478				reg = <0>;
479				label = "dut";
480			};
481
482			port_uplink: port@1 {
483				reg = <1>;
484				label = "uplink";
485			};
486
487			port_cpu: port@2 {
488				reg = <2>;
489				label = "cpu";
490
491				ethernet = <&ethernet0>;
492
493				phy-mode = "rgmii-id";
494				rx-internal-delay-ps = <2000>;
495				tx-internal-delay-ps = <2000>;
496
497				fixed-link {
498					speed = <1000>;
499					full-duplex;
500				};
501			};
502		};
503	};
504};
505
506&timers2 {
507	/* spare dmas for other usage */
508	/delete-property/dmas;
509	/delete-property/dma-names;
510
511	status = "okay";
512
513	timer@1 {
514		status = "okay";
515	};
516};
517
518&timers3 {
519	/* spare dmas for other usage */
520	/delete-property/dmas;
521	/delete-property/dma-names;
522
523	status = "okay";
524
525	timer@2 {
526		status = "okay";
527	};
528};
529
530&timers4 {
531	/* spare dmas for other usage */
532	/delete-property/dmas;
533	/delete-property/dma-names;
534
535	status = "okay";
536
537	timer@3 {
538		status = "okay";
539	};
540};
541
542&uart4 {
543	label = "debug";
544
545	pinctrl-names = "default";
546	pinctrl-0 = <&uart4_pins_a>;
547
548	/* spare dmas for other usage */
549	/delete-property/dmas;
550	/delete-property/dma-names;
551
552	status = "okay";
553};
554
555&usart3 {
556	label = "dut";
557	uart-has-rtscts;
558
559	pinctrl-names = "default";
560	pinctrl-0 = <&usart3_pins_f>;
561
562	/* spare dmas for other usage */
563	/delete-property/dmas;
564	/delete-property/dma-names;
565
566	status = "okay";
567};
568
569&usbh_ehci {
570	phys = <&usbphyc_port0>;
571	phy-names = "usb";
572
573	status = "okay";
574};
575
576&usbotg_hs {
577	phys = <&usbphyc_port1 0>;
578	phy-names = "usb2-phy";
579
580	vusb_d-supply = <&vdd_usb>;
581	vusb_a-supply = <&reg18>;
582
583	dr_mode = "peripheral";
584
585	status = "okay";
586};
587
588&usbphyc {
589	status = "okay";
590};
591
592&usbphyc_port0 {
593	phy-supply = <&vdd_usb>;
594};
595
596&usbphyc_port1 {
597	phy-supply = <&vdd_usb>;
598};
599
600&v3v3_hdmi {
601	/delete-property/regulator-always-on;
602};
603
604&vrefbuf {
605	regulator-min-microvolt = <2500000>;
606	regulator-max-microvolt = <2500000>;
607	vdda-supply = <&vdda>;
608
609	status = "okay";
610};
611