1// SPDX-License-Identifier: GPL-2.0+ OR MIT
2/*
3 * Copyright (C) 2019 Kontron Electronics GmbH
4 */
5
6#include "imx8mm.dtsi"
7
8/ {
9	model = "Kontron SL i.MX8MM (N801X SOM)";
10	compatible = "kontron,imx8mm-sl", "fsl,imx8mm";
11
12	memory@40000000 {
13		device_type = "memory";
14		/*
15		 * There are multiple SoM flavors with different DDR sizes.
16		 * The smallest is 1GB. For larger sizes the bootloader will
17		 * update the reg property.
18		 */
19		reg = <0x0 0x40000000 0 0x80000000>;
20	};
21
22	chosen {
23		stdout-path = &uart3;
24	};
25};
26
27&A53_0 {
28	cpu-supply = <&reg_vdd_arm>;
29};
30
31&A53_1 {
32	cpu-supply = <&reg_vdd_arm>;
33};
34
35&A53_2 {
36	cpu-supply = <&reg_vdd_arm>;
37};
38
39&A53_3 {
40	cpu-supply = <&reg_vdd_arm>;
41};
42
43&ddrc {
44	operating-points-v2 = <&ddrc_opp_table>;
45
46	ddrc_opp_table: opp-table {
47		compatible = "operating-points-v2";
48
49		opp-100000000 {
50			opp-hz = /bits/ 64 <100000000>;
51		};
52
53		opp-750000000 {
54			opp-hz = /bits/ 64 <750000000>;
55		};
56	};
57};
58
59&ecspi1 {
60	pinctrl-names = "default";
61	pinctrl-0 = <&pinctrl_ecspi1>;
62	cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
63	status = "okay";
64
65	flash@0 {
66		compatible = "mxicy,mx25r1635f", "jedec,spi-nor";
67		spi-max-frequency = <80000000>;
68		reg = <0>;
69
70		partitions {
71			compatible = "fixed-partitions";
72			#address-cells = <1>;
73			#size-cells = <1>;
74
75			partition@0 {
76				label = "u-boot";
77				reg = <0x0 0x1e0000>;
78			};
79
80			partition@1e0000 {
81				label = "env";
82				reg = <0x1e0000 0x10000>;
83			};
84
85			partition@1f0000 {
86				label = "env_redundant";
87				reg = <0x1f0000 0x10000>;
88			};
89		};
90	};
91};
92
93&i2c1 {
94	clock-frequency = <400000>;
95	pinctrl-names = "default";
96	pinctrl-0 = <&pinctrl_i2c1>;
97	status = "okay";
98
99	pca9450: pmic@25 {
100		compatible = "nxp,pca9450a";
101		reg = <0x25>;
102		pinctrl-names = "default";
103		pinctrl-0 = <&pinctrl_pmic>;
104		interrupt-parent = <&gpio1>;
105		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
106
107		regulators {
108			reg_vdd_soc: BUCK1 {
109				regulator-name = "+0V8_VDD_SOC (BUCK1)";
110				regulator-min-microvolt = <800000>;
111				regulator-max-microvolt = <850000>;
112				regulator-boot-on;
113				regulator-always-on;
114				regulator-ramp-delay = <3125>;
115				nxp,dvs-run-voltage = <850000>;
116				nxp,dvs-standby-voltage = <800000>;
117			};
118
119			reg_vdd_arm: BUCK2 {
120				regulator-name = "+0V9_VDD_ARM (BUCK2)";
121				regulator-min-microvolt = <850000>;
122				regulator-max-microvolt = <950000>;
123				regulator-boot-on;
124				regulator-always-on;
125				regulator-ramp-delay = <3125>;
126				nxp,dvs-run-voltage = <950000>;
127				nxp,dvs-standby-voltage = <850000>;
128			};
129
130			reg_vdd_dram: BUCK3 {
131				regulator-name = "+0V9_VDD_DRAM&PU (BUCK3)";
132				regulator-min-microvolt = <850000>;
133				regulator-max-microvolt = <950000>;
134				regulator-boot-on;
135				regulator-always-on;
136			};
137
138			reg_vdd_3v3: BUCK4 {
139				regulator-name = "+3V3 (BUCK4)";
140				regulator-min-microvolt = <3300000>;
141				regulator-max-microvolt = <3300000>;
142				regulator-boot-on;
143				regulator-always-on;
144			};
145
146			reg_vdd_1v8: BUCK5 {
147				regulator-name = "+1V8 (BUCK5)";
148				regulator-min-microvolt = <1800000>;
149				regulator-max-microvolt = <1800000>;
150				regulator-boot-on;
151				regulator-always-on;
152			};
153
154			reg_nvcc_dram: BUCK6 {
155				regulator-name = "+1V1_NVCC_DRAM (BUCK6)";
156				regulator-min-microvolt = <1100000>;
157				regulator-max-microvolt = <1100000>;
158				regulator-boot-on;
159				regulator-always-on;
160			};
161
162			reg_nvcc_snvs: LDO1 {
163				regulator-name = "+1V8_NVCC_SNVS (LDO1)";
164				regulator-min-microvolt = <1800000>;
165				regulator-max-microvolt = <1800000>;
166				regulator-boot-on;
167				regulator-always-on;
168			};
169
170			reg_vdd_snvs: LDO2 {
171				regulator-name = "+0V8_VDD_SNVS (LDO2)";
172				regulator-min-microvolt = <800000>;
173				regulator-max-microvolt = <900000>;
174				regulator-boot-on;
175				regulator-always-on;
176			};
177
178			reg_vdda: LDO3 {
179				regulator-name = "+1V8_VDDA (LDO3)";
180				regulator-min-microvolt = <1800000>;
181				regulator-max-microvolt = <1800000>;
182				regulator-boot-on;
183				regulator-always-on;
184			};
185
186			reg_vdd_phy: LDO4 {
187				regulator-name = "+0V9_VDD_PHY (LDO4)";
188				regulator-min-microvolt = <900000>;
189				regulator-max-microvolt = <900000>;
190				regulator-boot-on;
191				regulator-always-on;
192			};
193
194			reg_nvcc_sd: LDO5 {
195				regulator-name = "NVCC_SD (LDO5)";
196				regulator-min-microvolt = <1800000>;
197				regulator-max-microvolt = <3300000>;
198			};
199		};
200	};
201};
202
203&uart3 { /* console */
204	pinctrl-names = "default";
205	pinctrl-0 = <&pinctrl_uart3>;
206	status = "okay";
207};
208
209&usdhc1 {
210	pinctrl-names = "default", "state_100mhz", "state_200mhz";
211	pinctrl-0 = <&pinctrl_usdhc1>;
212	pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
213	pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
214	vmmc-supply = <&reg_vdd_3v3>;
215	vqmmc-supply = <&reg_vdd_1v8>;
216	bus-width = <8>;
217	non-removable;
218	status = "okay";
219};
220
221&wdog1 {
222	pinctrl-names = "default";
223	pinctrl-0 = <&pinctrl_wdog>;
224	fsl,ext-reset-output;
225	status = "okay";
226};
227
228&iomuxc {
229	pinctrl_ecspi1: ecspi1grp {
230		fsl,pins = <
231			MX8MM_IOMUXC_ECSPI1_MISO_ECSPI1_MISO		0x82
232			MX8MM_IOMUXC_ECSPI1_MOSI_ECSPI1_MOSI		0x82
233			MX8MM_IOMUXC_ECSPI1_SCLK_ECSPI1_SCLK		0x82
234			MX8MM_IOMUXC_ECSPI1_SS0_GPIO5_IO9		0x19
235		>;
236	};
237
238	pinctrl_i2c1: i2c1grp {
239		fsl,pins = <
240			MX8MM_IOMUXC_I2C1_SCL_I2C1_SCL			0x40000083
241			MX8MM_IOMUXC_I2C1_SDA_I2C1_SDA			0x40000083
242		>;
243	};
244
245	pinctrl_pmic: pmicgrp {
246		fsl,pins = <
247			MX8MM_IOMUXC_GPIO1_IO00_GPIO1_IO0		0x141
248		>;
249	};
250
251	pinctrl_uart3: uart3grp {
252		fsl,pins = <
253			MX8MM_IOMUXC_UART3_RXD_UART3_DCE_RX		0x140
254			MX8MM_IOMUXC_UART3_TXD_UART3_DCE_TX		0x140
255		>;
256	};
257
258	pinctrl_usdhc1: usdhc1grp {
259		fsl,pins = <
260			MX8MM_IOMUXC_SD1_CLK_USDHC1_CLK			0x190
261			MX8MM_IOMUXC_SD1_CMD_USDHC1_CMD			0x1d0
262			MX8MM_IOMUXC_SD1_DATA0_USDHC1_DATA0		0x1d0
263			MX8MM_IOMUXC_SD1_DATA1_USDHC1_DATA1		0x1d0
264			MX8MM_IOMUXC_SD1_DATA2_USDHC1_DATA2		0x1d0
265			MX8MM_IOMUXC_SD1_DATA3_USDHC1_DATA3		0x1d0
266			MX8MM_IOMUXC_SD1_DATA4_USDHC1_DATA4		0x1d0
267			MX8MM_IOMUXC_SD1_DATA5_USDHC1_DATA5		0x1d0
268			MX8MM_IOMUXC_SD1_DATA6_USDHC1_DATA6		0x1d0
269			MX8MM_IOMUXC_SD1_DATA7_USDHC1_DATA7		0x1d0
270			MX8MM_IOMUXC_SD1_RESET_B_USDHC1_RESET_B		0x019
271			MX8MM_IOMUXC_SD1_STROBE_USDHC1_STROBE		0x190
272		>;
273	};
274
275	pinctrl_usdhc1_100mhz: usdhc1-100mhzgrp {
276		fsl,pins = <
277			MX8MM_IOMUXC_SD1_CLK_USDHC1_CLK			0x194
278			MX8MM_IOMUXC_SD1_CMD_USDHC1_CMD			0x1d4
279			MX8MM_IOMUXC_SD1_DATA0_USDHC1_DATA0		0x1d4
280			MX8MM_IOMUXC_SD1_DATA1_USDHC1_DATA1		0x1d4
281			MX8MM_IOMUXC_SD1_DATA2_USDHC1_DATA2		0x1d4
282			MX8MM_IOMUXC_SD1_DATA3_USDHC1_DATA3		0x1d4
283			MX8MM_IOMUXC_SD1_DATA4_USDHC1_DATA4		0x1d4
284			MX8MM_IOMUXC_SD1_DATA5_USDHC1_DATA5		0x1d4
285			MX8MM_IOMUXC_SD1_DATA6_USDHC1_DATA6		0x1d4
286			MX8MM_IOMUXC_SD1_DATA7_USDHC1_DATA7		0x1d4
287			MX8MM_IOMUXC_SD1_RESET_B_USDHC1_RESET_B		0x019
288			MX8MM_IOMUXC_SD1_STROBE_USDHC1_STROBE		0x194
289		>;
290	};
291
292	pinctrl_usdhc1_200mhz: usdhc1-200mhzgrp {
293		fsl,pins = <
294			MX8MM_IOMUXC_SD1_CLK_USDHC1_CLK			0x196
295			MX8MM_IOMUXC_SD1_CMD_USDHC1_CMD			0x1d6
296			MX8MM_IOMUXC_SD1_DATA0_USDHC1_DATA0		0x1d6
297			MX8MM_IOMUXC_SD1_DATA1_USDHC1_DATA1		0x1d6
298			MX8MM_IOMUXC_SD1_DATA2_USDHC1_DATA2		0x1d6
299			MX8MM_IOMUXC_SD1_DATA3_USDHC1_DATA3		0x1d6
300			MX8MM_IOMUXC_SD1_DATA4_USDHC1_DATA4		0x1d6
301			MX8MM_IOMUXC_SD1_DATA5_USDHC1_DATA5		0x1d6
302			MX8MM_IOMUXC_SD1_DATA6_USDHC1_DATA6		0x1d6
303			MX8MM_IOMUXC_SD1_DATA7_USDHC1_DATA7		0x1d6
304			MX8MM_IOMUXC_SD1_RESET_B_USDHC1_RESET_B		0x019
305			MX8MM_IOMUXC_SD1_STROBE_USDHC1_STROBE		0x196
306		>;
307	};
308
309	pinctrl_wdog: wdoggrp {
310		fsl,pins = <
311			MX8MM_IOMUXC_GPIO1_IO02_WDOG1_WDOG_B		0xc6
312		>;
313	};
314};
315