1/*
2 * Copyright 2020-2022,2024 NXP
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include <mem.h>
8#include <freq.h>
9#include <arm64/armv8-a.dtsi>
10#include <zephyr/dt-bindings/clock/imx_ccm.h>
11#include <zephyr/dt-bindings/interrupt-controller/arm-gic.h>
12#include <zephyr/dt-bindings/rdc/imx_rdc.h>
13
14/ {
15	#address-cells = <1>;
16	#size-cells = <1>;
17
18	cpus {
19		#address-cells = <1>;
20		#size-cells = <0>;
21
22		cpu@0 {
23			device_type = "cpu";
24			compatible = "arm,cortex-a53";
25			reg = <0>;
26		};
27
28		cpu@1 {
29			device_type = "cpu";
30			compatible = "arm,cortex-a53";
31			reg = <1>;
32		};
33
34		cpu@2 {
35			device_type = "cpu";
36			compatible = "arm,cortex-a53";
37			reg = <2>;
38		};
39
40		cpu@3 {
41			device_type = "cpu";
42			compatible = "arm,cortex-a53";
43			reg = <3>;
44		};
45	};
46
47	arch_timer: timer {
48		compatible = "arm,armv8-timer";
49		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL
50			      IRQ_DEFAULT_PRIORITY>,
51			     <GIC_PPI 14 IRQ_TYPE_LEVEL
52			      IRQ_DEFAULT_PRIORITY>,
53			     <GIC_PPI 11 IRQ_TYPE_LEVEL
54			      IRQ_DEFAULT_PRIORITY>,
55			     <GIC_PPI 10 IRQ_TYPE_LEVEL
56			      IRQ_DEFAULT_PRIORITY>;
57		interrupt-parent = <&gic>;
58	};
59
60	gic: interrupt-controller@38800000 {
61		compatible = "arm,gic-v3", "arm,gic";
62		reg = <0x38800000 0x10000>, /* GIC Dist */
63		      <0x38880000 0xc0000>; /* GICR (RD_base + SGI_base) */
64		interrupt-controller;
65		#interrupt-cells = <4>;
66		status = "okay";
67	};
68
69	soc {
70		ana_pll: ana_pll@30360000 {
71			compatible = "nxp,imx-ana";
72			reg = <0x30360000 DT_SIZE_K(64)>;
73		};
74
75		ccm: ccm@30380000 {
76			compatible = "nxp,imx-ccm";
77			reg = <0x30380000 DT_SIZE_K(64)>;
78			#clock-cells = <3>;
79		};
80
81		gpio1: gpio@30200000 {
82			compatible = "nxp,imx-gpio";
83			reg = <0x30200000 DT_SIZE_K(64)>;
84			interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>,
85				   <GIC_SPI 65 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
86			interrupt-names = "irq_0", "irq_1";
87			interrupt-parent = <&gic>;
88			rdc = <RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)>;
89			gpio-controller;
90			#gpio-cells = <2>;
91			status = "disabled";
92		};
93
94		gpio2: gpio@30210000 {
95			compatible = "nxp,imx-gpio";
96			reg = <0x30210000 DT_SIZE_K(64)>;
97			interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>,
98				   <GIC_SPI 67 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
99			interrupt-names = "irq_0", "irq_1";
100			interrupt-parent = <&gic>;
101			rdc = <RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)>;
102			gpio-controller;
103			#gpio-cells = <2>;
104			status = "disabled";
105		};
106
107		gpio3: gpio@30220000 {
108			compatible = "nxp,imx-gpio";
109			reg = <0x30220000 DT_SIZE_K(64)>;
110			interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>,
111				   <GIC_SPI 69 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
112			interrupt-names = "irq_0", "irq_1";
113			interrupt-parent = <&gic>;
114			rdc = <RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)>;
115			gpio-controller;
116			#gpio-cells = <2>;
117			status = "disabled";
118		};
119
120		gpio4: gpio@30230000 {
121			compatible = "nxp,imx-gpio";
122			reg = <0x30230000 DT_SIZE_K(64)>;
123			interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>,
124				   <GIC_SPI 71 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
125			interrupt-names = "irq_0", "irq_1";
126			interrupt-parent = <&gic>;
127			rdc = <RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)>;
128			gpio-controller;
129			#gpio-cells = <2>;
130			status = "disabled";
131		};
132
133		gpio5: gpio@30240000 {
134			compatible = "nxp,imx-gpio";
135			reg = <0x30240000 DT_SIZE_K(64)>;
136			interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>,
137				   <GIC_SPI 73 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
138			interrupt-names = "irq_0", "irq_1";
139			interrupt-parent = <&gic>;
140			rdc = <RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)>;
141			gpio-controller;
142			#gpio-cells = <2>;
143			status = "disabled";
144		};
145
146		gpt1: gpt@302d0000 {
147			compatible = "nxp,imx-gpt";
148			reg = <0x302d0000 DT_SIZE_K(64)>;
149			interrupt-parent = <&gic>;
150			interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL
151				IRQ_DEFAULT_PRIORITY>;
152			gptfreq = <24000000>;
153			clocks = <&ccm IMX_CCM_GPT_IPG_CLK 0x6C 20>;
154			status = "disabled";
155		};
156
157		gpt2: gpt@302e0000 {
158			compatible = "nxp,imx-gpt";
159			reg = <0x302e0000 DT_SIZE_K(64)>;
160			interrupt-parent = <&gic>;
161			interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL
162				IRQ_DEFAULT_PRIORITY>;
163			gptfreq = <24000000>;
164			clocks = <&ccm IMX_CCM_GPT_IPG_CLK 0x68 24>;
165			status = "disabled";
166		};
167
168		uart2: uart@30890000 {
169			compatible = "nxp,imx-iuart";
170			reg = <0x30890000 DT_SIZE_K(64)>;
171			interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
172			interrupt-names = "irq_0";
173			interrupt-parent = <&gic>;
174			clocks = <&ccm IMX_CCM_UART2_CLK 0x6c 24>;
175			rdc = <(RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)|\
176			       RDC_DOMAIN_PERM(M7_DOMAIN_ID, RDC_DOMAIN_PERM_RW))>;
177			status = "disabled";
178		};
179
180		uart4: uart@30a60000 {
181			compatible = "nxp,imx-iuart";
182			reg = <0x30a60000 DT_SIZE_K(64)>;
183			interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
184			interrupt-names = "irq_0";
185			interrupt-parent = <&gic>;
186			clocks = <&ccm IMX_CCM_UART4_CLK 0x6c 24>;
187			rdc = <(RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)|\
188			       RDC_DOMAIN_PERM(M7_DOMAIN_ID, RDC_DOMAIN_PERM_RW))>;
189			status = "disabled";
190		};
191
192		enet: enet@30be0000 {
193			compatible = "nxp,enet1g";
194			reg = <0x30be0000 DT_SIZE_K(64)>;
195			clocks = <&ccm IMX_CCM_ENET_CLK 0 0>;
196			rdc = <RDC_DOMAIN_PERM(A53_DOMAIN_ID, RDC_DOMAIN_PERM_RW)>;
197			status = "disabled";
198
199			enet_mac: ethernet {
200				compatible = "nxp,enet-mac";
201				interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
202				interrupt-names = "COMMON";
203				interrupt-parent = <&gic>;
204				nxp,mdio = <&enet_mdio>;
205				nxp,ptp-clock = <&enet_ptp_clock>;
206				status = "disabled";
207			};
208			enet_mdio: mdio {
209				compatible = "nxp,enet-mdio";
210				#address-cells = <1>;
211				#size-cells = <0>;
212				status = "disabled";
213			};
214			enet_ptp_clock: ptp_clock {
215				compatible = "nxp,enet-ptp-clock";
216				interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL IRQ_DEFAULT_PRIORITY>;
217				interrupt-parent = <&gic>;
218				clocks = <&ccm IMX_CCM_ENET_PLL 0 0>;
219				status = "disabled";
220			};
221		};
222
223		iomuxc: iomuxc@30330000 {
224			compatible = "nxp,imx-iomuxc";
225			reg = <0x30330000 DT_SIZE_K(64)>;
226			status = "okay";
227			pinctrl: pinctrl {
228				status = "okay";
229				compatible = "nxp,imx8mp-pinctrl";
230			};
231		};
232
233		rdc: rdc@303d0000 {
234			compatible = "nxp,rdc";
235			reg = <0x303d0000 DT_SIZE_K(64)>;
236		};
237	};
238};
239
240/*
241 * GPIO pinmux options. These options define the pinmux settings
242 * for GPIO ports on the package, so that the GPIO driver can
243 * select GPIO mux options during GPIO configuration.
244 */
245
246&gpio1{
247	pinmux = <&iomuxc_gpio1_io00_gpio_io_gpio1_io0>,
248		<&iomuxc_gpio1_io01_gpio_io_gpio1_io1>,
249		<&iomuxc_gpio1_io02_gpio_io_gpio1_io2>,
250		<&iomuxc_gpio1_io03_gpio_io_gpio1_io3>,
251		<&iomuxc_gpio1_io04_gpio_io_gpio1_io4>,
252		<&iomuxc_gpio1_io05_gpio_io_gpio1_io5>,
253		<&iomuxc_gpio1_io06_gpio_io_gpio1_io6>,
254		<&iomuxc_gpio1_io07_gpio_io_gpio1_io7>,
255		<&iomuxc_gpio1_io08_gpio_io_gpio1_io8>,
256		<&iomuxc_gpio1_io09_gpio_io_gpio1_io9>,
257		<&iomuxc_gpio1_io10_gpio_io_gpio1_io10>,
258		<&iomuxc_gpio1_io11_gpio_io_gpio1_io11>,
259		<&iomuxc_gpio1_io12_gpio_io_gpio1_io12>,
260		<&iomuxc_gpio1_io13_gpio_io_gpio1_io13>,
261		<&iomuxc_gpio1_io14_gpio_io_gpio1_io14>,
262		<&iomuxc_gpio1_io15_gpio_io_gpio1_io15>,
263		<&iomuxc_enet_mdc_gpio_io_gpio1_io16>,
264		<&iomuxc_enet_mdio_gpio_io_gpio1_io17>,
265		<&iomuxc_enet_td3_gpio_io_gpio1_io18>,
266		<&iomuxc_enet_td2_gpio_io_gpio1_io19>,
267		<&iomuxc_enet_td1_gpio_io_gpio1_io20>,
268		<&iomuxc_enet_td0_gpio_io_gpio1_io21>,
269		<&iomuxc_enet_tx_ctl_gpio_io_gpio1_io22>,
270		<&iomuxc_enet_txc_gpio_io_gpio1_io23>,
271		<&iomuxc_enet_rx_ctl_gpio_io_gpio1_io24>,
272		<&iomuxc_enet_rxc_gpio_io_gpio1_io25>,
273		<&iomuxc_enet_rd0_gpio_io_gpio1_io26>,
274		<&iomuxc_enet_rd1_gpio_io_gpio1_io27>,
275		<&iomuxc_enet_rd2_gpio_io_gpio1_io28>,
276		<&iomuxc_enet_rd3_gpio_io_gpio1_io29>;
277};
278
279&gpio2{
280	pinmux = <&iomuxc_sd1_clk_gpio_io_gpio2_io0>,
281		<&iomuxc_sd1_cmd_gpio_io_gpio2_io1>,
282		<&iomuxc_sd1_data0_gpio_io_gpio2_io2>,
283		<&iomuxc_sd1_data1_gpio_io_gpio2_io3>,
284		<&iomuxc_sd1_data2_gpio_io_gpio2_io4>,
285		<&iomuxc_sd1_data3_gpio_io_gpio2_io5>,
286		<&iomuxc_sd1_data4_gpio_io_gpio2_io6>,
287		<&iomuxc_sd1_data5_gpio_io_gpio2_io7>,
288		<&iomuxc_sd1_data6_gpio_io_gpio2_io8>,
289		<&iomuxc_sd1_data7_gpio_io_gpio2_io9>,
290		<&iomuxc_sd1_reset_b_gpio_io_gpio2_io10>,
291		<&iomuxc_sd1_strobe_gpio_io_gpio2_io11>,
292		<&iomuxc_sd2_cd_b_gpio_io_gpio2_io12>,
293		<&iomuxc_sd2_clk_gpio_io_gpio2_io13>,
294		<&iomuxc_sd2_cmd_gpio_io_gpio2_io14>,
295		<&iomuxc_sd2_data0_gpio_io_gpio2_io15>,
296		<&iomuxc_sd2_data1_gpio_io_gpio2_io16>,
297		<&iomuxc_sd2_data2_gpio_io_gpio2_io17>,
298		<&iomuxc_sd2_data3_gpio_io_gpio2_io18>,
299		<&iomuxc_sd2_reset_b_gpio_io_gpio2_io19>,
300		<&iomuxc_sd2_wp_gpio_io_gpio2_io20>;
301};
302
303&gpio3{
304	pinmux = <&iomuxc_nand_ale_gpio_io_gpio3_io0>,
305		<&iomuxc_nand_ce0_b_gpio_io_gpio3_io1>,
306		<&iomuxc_nand_ce1_b_gpio_io_gpio3_io2>,
307		<&iomuxc_nand_ce2_b_gpio_io_gpio3_io3>,
308		<&iomuxc_nand_ce3_b_gpio_io_gpio3_io4>,
309		<&iomuxc_nand_cle_gpio_io_gpio3_io5>,
310		<&iomuxc_nand_data00_gpio_io_gpio3_io6>,
311		<&iomuxc_nand_data01_gpio_io_gpio3_io7>,
312		<&iomuxc_nand_data02_gpio_io_gpio3_io8>,
313		<&iomuxc_nand_data03_gpio_io_gpio3_io9>,
314		<&iomuxc_nand_data04_gpio_io_gpio3_io10>,
315		<&iomuxc_nand_data05_gpio_io_gpio3_io11>,
316		<&iomuxc_nand_data06_gpio_io_gpio3_io12>,
317		<&iomuxc_nand_data07_gpio_io_gpio3_io13>,
318		<&iomuxc_nand_dqs_gpio_io_gpio3_io14>,
319		<&iomuxc_nand_re_b_gpio_io_gpio3_io15>,
320		<&iomuxc_nand_ready_b_gpio_io_gpio3_io16>,
321		<&iomuxc_nand_we_b_gpio_io_gpio3_io17>,
322		<&iomuxc_nand_wp_b_gpio_io_gpio3_io18>,
323		<&iomuxc_sai5_rxfs_gpio_io_gpio3_io19>,
324		<&iomuxc_sai5_rxc_gpio_io_gpio3_io20>,
325		<&iomuxc_sai5_rxd0_gpio_io_gpio3_io21>,
326		<&iomuxc_sai5_rxd1_gpio_io_gpio3_io22>,
327		<&iomuxc_sai5_rxd2_gpio_io_gpio3_io23>,
328		<&iomuxc_sai5_rxd3_gpio_io_gpio3_io24>,
329		<&iomuxc_sai5_mclk_gpio_io_gpio3_io25>,
330		<&iomuxc_hdmi_ddc_scl_gpio_io_gpio3_io26>,
331		<&iomuxc_hdmi_ddc_sda_gpio_io_gpio3_io27>,
332		<&iomuxc_hdmi_cec_gpio_io_gpio3_io28>,
333		<&iomuxc_hdmi_hpd_gpio_io_gpio3_io29>;
334};
335
336&gpio4{
337	pinmux = <&iomuxc_sai1_rxfs_gpio_io_gpio4_io0>,
338		<&iomuxc_sai1_rxc_gpio_io_gpio4_io1>,
339		<&iomuxc_sai1_rxd0_gpio_io_gpio4_io2>,
340		<&iomuxc_sai1_rxd1_gpio_io_gpio4_io3>,
341		<&iomuxc_sai1_rxd2_gpio_io_gpio4_io4>,
342		<&iomuxc_sai1_rxd3_gpio_io_gpio4_io5>,
343		<&iomuxc_sai1_rxd4_gpio_io_gpio4_io6>,
344		<&iomuxc_sai1_rxd5_gpio_io_gpio4_io7>,
345		<&iomuxc_sai1_rxd6_gpio_io_gpio4_io8>,
346		<&iomuxc_sai1_rxd7_gpio_io_gpio4_io9>,
347		<&iomuxc_sai1_txfs_gpio_io_gpio4_io10>,
348		<&iomuxc_sai1_txc_gpio_io_gpio4_io11>,
349		<&iomuxc_sai1_txd0_gpio_io_gpio4_io12>,
350		<&iomuxc_sai1_txd1_gpio_io_gpio4_io13>,
351		<&iomuxc_sai1_txd2_gpio_io_gpio4_io14>,
352		<&iomuxc_sai1_txd3_gpio_io_gpio4_io15>,
353		<&iomuxc_sai1_txd4_gpio_io_gpio4_io16>,
354		<&iomuxc_sai1_txd5_gpio_io_gpio4_io17>,
355		<&iomuxc_sai1_txd6_gpio_io_gpio4_io18>,
356		<&iomuxc_sai1_txd7_gpio_io_gpio4_io19>,
357		<&iomuxc_sai1_mclk_gpio_io_gpio4_io20>,
358		<&iomuxc_sai2_rxfs_gpio_io_gpio4_io21>,
359		<&iomuxc_sai2_rxc_gpio_io_gpio4_io22>,
360		<&iomuxc_sai2_rxd0_gpio_io_gpio4_io23>,
361		<&iomuxc_sai2_txfs_gpio_io_gpio4_io24>,
362		<&iomuxc_sai2_txc_gpio_io_gpio4_io25>,
363		<&iomuxc_sai2_txd0_gpio_io_gpio4_io26>,
364		<&iomuxc_sai2_mclk_gpio_io_gpio4_io27>,
365		<&iomuxc_sai3_rxfs_gpio_io_gpio4_io28>,
366		<&iomuxc_sai3_rxc_gpio_io_gpio4_io29>,
367		<&iomuxc_sai3_rxd_gpio_io_gpio4_io30>,
368		<&iomuxc_sai3_txfs_gpio_io_gpio4_io31>;
369};
370
371&gpio5{
372	pinmux = <&iomuxc_sai3_txc_gpio_io_gpio5_io0>,
373		<&iomuxc_sai3_txd_gpio_io_gpio5_io1>,
374		<&iomuxc_sai3_mclk_gpio_io_gpio5_io2>,
375		<&iomuxc_spdif_tx_gpio_io_gpio5_io3>,
376		<&iomuxc_spdif_rx_gpio_io_gpio5_io4>,
377		<&iomuxc_spdif_ext_clk_gpio_io_gpio5_io5>,
378		<&iomuxc_ecspi1_sclk_gpio_io_gpio5_io6>,
379		<&iomuxc_ecspi1_mosi_gpio_io_gpio5_io7>,
380		<&iomuxc_ecspi1_miso_gpio_io_gpio5_io8>,
381		<&iomuxc_ecspi1_ss0_gpio_io_gpio5_io9>,
382		<&iomuxc_ecspi2_sclk_gpio_io_gpio5_io10>,
383		<&iomuxc_ecspi2_mosi_gpio_io_gpio5_io11>,
384		<&iomuxc_ecspi2_miso_gpio_io_gpio5_io12>,
385		<&iomuxc_ecspi2_ss0_gpio_io_gpio5_io13>,
386		<&iomuxc_i2c1_scl_gpio_io_gpio5_io14>,
387		<&iomuxc_i2c1_sda_gpio_io_gpio5_io15>,
388		<&iomuxc_i2c2_scl_gpio_io_gpio5_io16>,
389		<&iomuxc_i2c2_sda_gpio_io_gpio5_io17>,
390		<&iomuxc_i2c3_scl_gpio_io_gpio5_io18>,
391		<&iomuxc_i2c3_sda_gpio_io_gpio5_io19>,
392		<&iomuxc_i2c4_scl_gpio_io_gpio5_io20>,
393		<&iomuxc_i2c4_sda_gpio_io_gpio5_io21>,
394		<&iomuxc_uart1_rxd_gpio_io_gpio5_io22>,
395		<&iomuxc_uart1_txd_gpio_io_gpio5_io23>,
396		<&iomuxc_uart2_rxd_gpio_io_gpio5_io24>,
397		<&iomuxc_uart2_txd_gpio_io_gpio5_io25>,
398		<&iomuxc_uart3_rxd_gpio_io_gpio5_io26>,
399		<&iomuxc_uart3_txd_gpio_io_gpio5_io27>,
400		<&iomuxc_uart4_rxd_gpio_io_gpio5_io28>,
401		<&iomuxc_uart4_txd_gpio_io_gpio5_io29>;
402};
403