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