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