xref: /openbmc/linux/arch/arm/boot/dts/st/stm32mp15xx-dhcom-som.dtsi (revision 060f35a317ef09101b128f399dce7ed13d019461)
1// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2/*
3 * Copyright (C) 2019-2020 Marek Vasut <marex@denx.de>
4 */
5
6#include "stm32mp15-pinctrl.dtsi"
7#include "stm32mp15xxaa-pinctrl.dtsi"
8#include <dt-bindings/gpio/gpio.h>
9#include <dt-bindings/mfd/st,stpmic1.h>
10
11/ {
12	aliases {
13		ethernet0 = &ethernet0;
14		ethernet1 = &ksz8851;
15		rtc0 = &hwrtc;
16		rtc1 = &rtc;
17		serial0 = &uart4;
18		serial1 = &uart8;
19		serial2 = &usart3;
20	};
21
22	chosen {
23		stdout-path = "serial0:115200n8";
24	};
25
26	memory@c0000000 {
27		device_type = "memory";
28		reg = <0xC0000000 0x40000000>;
29	};
30
31	reserved-memory {
32		#address-cells = <1>;
33		#size-cells = <1>;
34		ranges;
35
36		mcuram2: mcuram2@10000000 {
37			compatible = "shared-dma-pool";
38			reg = <0x10000000 0x40000>;
39			no-map;
40		};
41
42		vdev0vring0: vdev0vring0@10040000 {
43			compatible = "shared-dma-pool";
44			reg = <0x10040000 0x1000>;
45			no-map;
46		};
47
48		vdev0vring1: vdev0vring1@10041000 {
49			compatible = "shared-dma-pool";
50			reg = <0x10041000 0x1000>;
51			no-map;
52		};
53
54		vdev0buffer: vdev0buffer@10042000 {
55			compatible = "shared-dma-pool";
56			reg = <0x10042000 0x4000>;
57			no-map;
58		};
59
60		mcuram: mcuram@30000000 {
61			compatible = "shared-dma-pool";
62			reg = <0x30000000 0x40000>;
63			no-map;
64		};
65
66		retram: retram@38000000 {
67			compatible = "shared-dma-pool";
68			reg = <0x38000000 0x10000>;
69			no-map;
70		};
71	};
72
73	ethernet_vio: vioregulator {
74		compatible = "regulator-fixed";
75		regulator-name = "vio";
76		regulator-min-microvolt = <3300000>;
77		regulator-max-microvolt = <3300000>;
78		gpio = <&gpiog 3 GPIO_ACTIVE_LOW>;
79		regulator-always-on;
80		regulator-boot-on;
81		vin-supply = <&vdd>;
82	};
83};
84
85&adc {
86	vdd-supply = <&vdd>;
87	vdda-supply = <&vdda>;
88	vref-supply = <&vdda>;
89	status = "okay";
90};
91
92&adc1 {
93	channel@0 {
94		reg = <0>;
95		st,min-sample-time-ns = <5000>;
96	};
97};
98
99&adc2 {
100	channel@1 {
101		reg = <1>;
102		st,min-sample-time-ns = <5000>;
103	};
104};
105
106&crc1 {
107	status = "okay";
108};
109
110&dac {
111	pinctrl-names = "default";
112	pinctrl-0 = <&dac_ch1_pins_a &dac_ch2_pins_a>;
113	vref-supply = <&vdda>;
114	status = "okay";
115
116	dac1: dac@1 {
117		status = "okay";
118	};
119	dac2: dac@2 {
120		status = "okay";
121	};
122};
123
124&dts {
125	status = "okay";
126};
127
128&ethernet0 {
129	status = "okay";
130	pinctrl-0 = <&ethernet0_rmii_pins_c &mco2_pins_a>;
131	pinctrl-1 = <&ethernet0_rmii_sleep_pins_c &mco2_sleep_pins_a>;
132	pinctrl-names = "default", "sleep";
133	phy-mode = "rmii";
134	max-speed = <100>;
135	phy-handle = <&phy0>;
136
137	mdio {
138		#address-cells = <1>;
139		#size-cells = <0>;
140		compatible = "snps,dwmac-mdio";
141
142		phy0: ethernet-phy@1 {
143			reg = <1>;
144			/* LAN8710Ai */
145			compatible = "ethernet-phy-id0007.c0f0",
146				     "ethernet-phy-ieee802.3-c22";
147			clocks = <&rcc CK_MCO2>;
148			reset-gpios = <&gpioh 3 GPIO_ACTIVE_LOW>;
149			reset-assert-us = <500>;
150			reset-deassert-us = <500>;
151			smsc,disable-energy-detect;
152			interrupt-parent = <&gpioi>;
153			interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
154		};
155	};
156};
157
158&fmc {
159	pinctrl-names = "default", "sleep";
160	pinctrl-0 = <&fmc_pins_b>;
161	pinctrl-1 = <&fmc_sleep_pins_b>;
162	status = "okay";
163
164	ksz8851: ethernet@1,0 {
165		compatible = "micrel,ks8851-mll";
166		reg = <1 0x0 0x2>, <1 0x2 0x20000>;
167		interrupt-parent = <&gpioc>;
168		interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
169		bank-width = <2>;
170
171		/* Timing values are in nS */
172		st,fmc2-ebi-cs-mux-enable;
173		st,fmc2-ebi-cs-transaction-type = <4>;
174		st,fmc2-ebi-cs-buswidth = <16>;
175		st,fmc2-ebi-cs-address-setup-ns = <5>;
176		st,fmc2-ebi-cs-address-hold-ns = <5>;
177		st,fmc2-ebi-cs-bus-turnaround-ns = <5>;
178		st,fmc2-ebi-cs-data-setup-ns = <45>;
179		st,fmc2-ebi-cs-data-hold-ns = <1>;
180		st,fmc2-ebi-cs-write-address-setup-ns = <5>;
181		st,fmc2-ebi-cs-write-address-hold-ns = <5>;
182		st,fmc2-ebi-cs-write-bus-turnaround-ns = <5>;
183		st,fmc2-ebi-cs-write-data-setup-ns = <45>;
184		st,fmc2-ebi-cs-write-data-hold-ns = <1>;
185	};
186};
187
188&gpioa {
189	gpio-line-names = "", "", "", "",
190			  "", "", "DHCOM-K", "",
191			  "", "", "", "",
192			  "", "", "", "";
193};
194
195&gpiob {
196	gpio-line-names = "", "", "", "",
197			  "", "", "", "",
198			  "DHCOM-Q", "", "", "",
199			  "", "", "", "";
200};
201
202&gpioc {
203	gpio-line-names = "", "", "", "",
204			  "", "", "DHCOM-E", "",
205			  "", "", "", "",
206			  "", "", "", "";
207};
208
209&gpiod {
210	gpio-line-names = "", "", "", "",
211			  "", "", "DHCOM-B", "",
212			  "", "", "", "DHCOM-F",
213			  "DHCOM-D", "", "", "";
214};
215
216&gpioe {
217	gpio-line-names = "", "", "", "",
218			  "", "", "DHCOM-P", "",
219			  "", "", "", "",
220			  "", "", "", "";
221};
222
223&gpiof {
224	gpio-line-names = "", "", "", "DHCOM-A",
225			  "", "", "", "",
226			  "", "", "", "",
227			  "", "", "", "";
228};
229
230&gpiog {
231	gpio-line-names = "DHCOM-C", "", "", "",
232			  "", "", "", "",
233			  "DHCOM-L", "", "", "",
234			  "", "", "", "";
235};
236
237&gpioh {
238	gpio-line-names = "", "", "", "",
239			  "", "", "", "DHCOM-N",
240			  "DHCOM-J", "DHCOM-W", "DHCOM-V", "DHCOM-U",
241			  "DHCOM-T", "", "DHCOM-S", "";
242};
243
244&gpioi {
245	gpio-line-names = "DHCOM-G", "DHCOM-O", "DHCOM-H", "DHCOM-I",
246			  "DHCOM-R", "DHCOM-M", "", "",
247			  "", "", "", "",
248			  "", "", "", "";
249};
250
251&i2c4 {
252	pinctrl-names = "default";
253	pinctrl-0 = <&i2c4_pins_a>;
254	i2c-scl-rising-time-ns = <185>;
255	i2c-scl-falling-time-ns = <20>;
256	status = "okay";
257	/* spare dmas for other usage */
258	/delete-property/dmas;
259	/delete-property/dma-names;
260
261	hwrtc: rtc@32 {
262		compatible = "microcrystal,rv8803";
263		reg = <0x32>;
264	};
265
266	pmic: stpmic@33 {
267		compatible = "st,stpmic1";
268		reg = <0x33>;
269		interrupts-extended = <&gpioa 0 IRQ_TYPE_EDGE_FALLING>;
270		interrupt-controller;
271		#interrupt-cells = <2>;
272		status = "okay";
273
274		regulators {
275			compatible = "st,stpmic1-regulators";
276			ldo1-supply = <&v3v3>;
277			ldo2-supply = <&v3v3>;
278			ldo3-supply = <&vdd_ddr>;
279			ldo5-supply = <&v3v3>;
280			ldo6-supply = <&v3v3>;
281			pwr_sw1-supply = <&bst_out>;
282			pwr_sw2-supply = <&bst_out>;
283
284			vddcore: buck1 {
285				regulator-name = "vddcore";
286				regulator-min-microvolt = <800000>;
287				regulator-max-microvolt = <1350000>;
288				regulator-always-on;
289				regulator-initial-mode = <0>;
290				regulator-over-current-protection;
291			};
292
293			vdd_ddr: buck2 {
294				regulator-name = "vdd_ddr";
295				regulator-min-microvolt = <1350000>;
296				regulator-max-microvolt = <1350000>;
297				regulator-always-on;
298				regulator-initial-mode = <0>;
299				regulator-over-current-protection;
300			};
301
302			vdd: buck3 {
303				regulator-name = "vdd";
304				regulator-min-microvolt = <3300000>;
305				regulator-max-microvolt = <3300000>;
306				regulator-always-on;
307				st,mask-reset;
308				regulator-initial-mode = <0>;
309				regulator-over-current-protection;
310			};
311
312			v3v3: buck4 {
313				regulator-name = "v3v3";
314				regulator-min-microvolt = <3300000>;
315				regulator-max-microvolt = <3300000>;
316				regulator-always-on;
317				regulator-over-current-protection;
318				regulator-initial-mode = <0>;
319			};
320
321			vdda: ldo1 {
322				regulator-name = "vdda";
323				regulator-always-on;
324				regulator-min-microvolt = <2900000>;
325				regulator-max-microvolt = <2900000>;
326				interrupts = <IT_CURLIM_LDO1 0>;
327			};
328
329			v2v8: ldo2 {
330				regulator-name = "v2v8";
331				regulator-min-microvolt = <2800000>;
332				regulator-max-microvolt = <2800000>;
333				interrupts = <IT_CURLIM_LDO2 0>;
334			};
335
336			vtt_ddr: ldo3 {
337				regulator-name = "vtt_ddr";
338				regulator-min-microvolt = <500000>;
339				regulator-max-microvolt = <750000>;
340				regulator-always-on;
341				regulator-over-current-protection;
342			};
343
344			vdd_usb: ldo4 {
345				regulator-name = "vdd_usb";
346				interrupts = <IT_CURLIM_LDO4 0>;
347			};
348
349			vdd_sd: ldo5 {
350				regulator-name = "vdd_sd";
351				regulator-min-microvolt = <2900000>;
352				regulator-max-microvolt = <2900000>;
353				interrupts = <IT_CURLIM_LDO5 0>;
354				regulator-boot-on;
355			};
356
357			v1v8: ldo6 {
358				regulator-name = "v1v8";
359				regulator-min-microvolt = <1800000>;
360				regulator-max-microvolt = <1800000>;
361				interrupts = <IT_CURLIM_LDO6 0>;
362			};
363
364			vref_ddr: vref_ddr {
365				regulator-name = "vref_ddr";
366				regulator-always-on;
367			};
368
369			bst_out: boost {
370				regulator-name = "bst_out";
371				interrupts = <IT_OCP_BOOST 0>;
372			};
373
374			vbus_otg: pwr_sw1 {
375				regulator-name = "vbus_otg";
376				interrupts = <IT_OCP_OTG 0>;
377			};
378
379			vbus_sw: pwr_sw2 {
380				regulator-name = "vbus_sw";
381				interrupts = <IT_OCP_SWOUT 0>;
382				regulator-active-discharge = <1>;
383			};
384		};
385
386		onkey {
387			compatible = "st,stpmic1-onkey";
388			interrupts = <IT_PONKEY_F 0>, <IT_PONKEY_R 0>;
389			interrupt-names = "onkey-falling", "onkey-rising";
390			power-off-time-sec = <10>;
391			status = "okay";
392		};
393
394		watchdog {
395			compatible = "st,stpmic1-wdt";
396			status = "disabled";
397		};
398	};
399
400	touchscreen@49 {
401		compatible = "ti,tsc2004";
402		reg = <0x49>;
403		vio-supply = <&v3v3>;
404		interrupts-extended = <&gpioh 15 IRQ_TYPE_EDGE_FALLING>;
405	};
406
407	eeprom@50 {
408		compatible = "atmel,24c02";
409		reg = <0x50>;
410		pagesize = <16>;
411	};
412};
413
414&ipcc {
415	status = "okay";
416};
417
418&iwdg2 {
419	timeout-sec = <32>;
420	status = "okay";
421};
422
423&m4_rproc {
424	memory-region = <&retram>, <&mcuram>, <&mcuram2>, <&vdev0vring0>,
425			<&vdev0vring1>, <&vdev0buffer>;
426	mboxes = <&ipcc 0>, <&ipcc 1>, <&ipcc 2>, <&ipcc 3>;
427	mbox-names = "vq0", "vq1", "shutdown", "detach";
428	interrupt-parent = <&exti>;
429	interrupts = <68 1>;
430	status = "okay";
431};
432
433&pwr_regulators {
434	vdd-supply = <&vdd>;
435	vdd_3v3_usbfs-supply = <&vdd_usb>;
436};
437
438&qspi {
439	pinctrl-names = "default", "sleep";
440	pinctrl-0 = <&qspi_clk_pins_a
441		     &qspi_bk1_pins_a
442		     &qspi_cs1_pins_a>;
443	pinctrl-1 = <&qspi_clk_sleep_pins_a
444		     &qspi_bk1_sleep_pins_a
445		     &qspi_cs1_sleep_pins_a>;
446	reg = <0x58003000 0x1000>, <0x70000000 0x4000000>;
447	#address-cells = <1>;
448	#size-cells = <0>;
449	status = "okay";
450
451	flash0: flash@0 {
452		compatible = "jedec,spi-nor";
453		reg = <0>;
454		spi-rx-bus-width = <4>;
455		spi-max-frequency = <108000000>;
456		#address-cells = <1>;
457		#size-cells = <1>;
458	};
459};
460
461&rcc {
462	/* Connect MCO2 output to ETH_RX_CLK input via pad-pad connection */
463	clocks = <&rcc CK_MCO2>;
464	clock-names = "ETH_RX_CLK/ETH_REF_CLK";
465
466	/*
467	 * Set PLL4P output to 100 MHz to supply SDMMC with faster clock,
468	 * set MCO2 output to 50 MHz to supply ETHRX clock with PLL4P/2,
469	 * so that MCO2 behaves as a divider for the ETHRX clock here.
470	 */
471	assigned-clocks = <&rcc CK_MCO2>, <&rcc PLL4_P>;
472	assigned-clock-parents = <&rcc PLL4_P>;
473	assigned-clock-rates = <50000000>, <100000000>;
474};
475
476&rng1 {
477	status = "okay";
478};
479
480&rtc {
481	status = "okay";
482};
483
484&sdmmc1 {
485	pinctrl-names = "default", "opendrain", "sleep", "init";
486	pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>;
487	pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_dir_pins_a>;
488	pinctrl-2 = <&sdmmc1_b4_sleep_pins_a &sdmmc1_dir_sleep_pins_a>;
489	pinctrl-3 = <&sdmmc1_b4_init_pins_a &sdmmc1_dir_init_pins_a>;
490	cd-gpios = <&gpiog 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
491	disable-wp;
492	st,sig-dir;
493	st,neg-edge;
494	st,use-ckin;
495	st,cmd-gpios = <&gpiod 2 0>;
496	st,ck-gpios = <&gpioc 12 0>;
497	st,ckin-gpios = <&gpioe 4 0>;
498	bus-width = <4>;
499	vmmc-supply = <&vdd_sd>;
500	status = "okay";
501};
502
503&sdmmc1_b4_pins_a {
504	/*
505	 * SD bus pull-up resistors:
506	 * - optional on SoMs with SD voltage translator
507	 * - mandatory on SoMs without SD voltage translator
508	 */
509	pins1 {
510		bias-pull-up;
511	};
512	pins2 {
513		bias-pull-up;
514	};
515};
516
517&sdmmc2 {
518	pinctrl-names = "default", "opendrain", "sleep";
519	pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>;
520	pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_a>;
521	pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_a>;
522	non-removable;
523	no-sd;
524	no-sdio;
525	st,neg-edge;
526	bus-width = <8>;
527	vmmc-supply = <&v3v3>;
528	vqmmc-supply = <&v3v3>;
529	mmc-ddr-3_3v;
530	status = "okay";
531};
532
533&sdmmc3 {
534	pinctrl-names = "default", "opendrain", "sleep";
535	pinctrl-0 = <&sdmmc3_b4_pins_a>;
536	pinctrl-1 = <&sdmmc3_b4_od_pins_a>;
537	pinctrl-2 = <&sdmmc3_b4_sleep_pins_a>;
538	broken-cd;
539	st,neg-edge;
540	bus-width = <4>;
541	vmmc-supply = <&v3v3>;
542	vqmmc-supply = <&v3v3>;
543	mmc-ddr-3_3v;
544	status = "okay";
545};
546
547&uart4 {
548	pinctrl-names = "default";
549	pinctrl-0 = <&uart4_pins_a>;
550	/delete-property/dmas;
551	/delete-property/dma-names;
552	status = "okay";
553};
554