1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright 2017 NXP
4 * Copyright (C) 2017-2018 Pengutronix, Lucas Stach <kernel@pengutronix.de>
5 */
6
7#include <dt-bindings/clock/imx8mq-clock.h>
8#include <dt-bindings/power/imx8mq-power.h>
9#include <dt-bindings/reset/imx8mq-reset.h>
10#include <dt-bindings/gpio/gpio.h>
11#include <dt-bindings/interrupt-controller/arm-gic.h>
12#include <dt-bindings/thermal/thermal.h>
13#include "imx8mq-pinfunc.h"
14
15/ {
16	interrupt-parent = <&gpc>;
17
18	#address-cells = <2>;
19	#size-cells = <2>;
20
21	aliases {
22		i2c0 = &i2c1;
23		i2c1 = &i2c2;
24		i2c2 = &i2c3;
25		i2c3 = &i2c4;
26		serial0 = &uart1;
27		serial1 = &uart2;
28		serial2 = &uart3;
29		serial3 = &uart4;
30		spi0 = &ecspi1;
31		spi1 = &ecspi2;
32		spi2 = &ecspi3;
33	};
34
35	ckil: clock-ckil {
36		compatible = "fixed-clock";
37		#clock-cells = <0>;
38		clock-frequency = <32768>;
39		clock-output-names = "ckil";
40	};
41
42	osc_25m: clock-osc-25m {
43		compatible = "fixed-clock";
44		#clock-cells = <0>;
45		clock-frequency = <25000000>;
46		clock-output-names = "osc_25m";
47	};
48
49	osc_27m: clock-osc-27m {
50		compatible = "fixed-clock";
51		#clock-cells = <0>;
52		clock-frequency = <27000000>;
53		clock-output-names = "osc_27m";
54	};
55
56	clk_ext1: clock-ext1 {
57		compatible = "fixed-clock";
58		#clock-cells = <0>;
59		clock-frequency = <133000000>;
60		clock-output-names = "clk_ext1";
61	};
62
63	clk_ext2: clock-ext2 {
64		compatible = "fixed-clock";
65		#clock-cells = <0>;
66		clock-frequency = <133000000>;
67		clock-output-names = "clk_ext2";
68	};
69
70	clk_ext3: clock-ext3 {
71		compatible = "fixed-clock";
72		#clock-cells = <0>;
73		clock-frequency = <133000000>;
74		clock-output-names = "clk_ext3";
75	};
76
77	clk_ext4: clock-ext4 {
78		compatible = "fixed-clock";
79		#clock-cells = <0>;
80		clock-frequency= <133000000>;
81		clock-output-names = "clk_ext4";
82	};
83
84	cpus {
85		#address-cells = <1>;
86		#size-cells = <0>;
87
88		A53_0: cpu@0 {
89			device_type = "cpu";
90			compatible = "arm,cortex-a53";
91			reg = <0x0>;
92			clock-latency = <61036>; /* two CLK32 periods */
93			clocks = <&clk IMX8MQ_CLK_ARM>;
94			enable-method = "psci";
95			next-level-cache = <&A53_L2>;
96			operating-points-v2 = <&a53_opp_table>;
97			#cooling-cells = <2>;
98		};
99
100		A53_1: cpu@1 {
101			device_type = "cpu";
102			compatible = "arm,cortex-a53";
103			reg = <0x1>;
104			clock-latency = <61036>; /* two CLK32 periods */
105			clocks = <&clk IMX8MQ_CLK_ARM>;
106			enable-method = "psci";
107			next-level-cache = <&A53_L2>;
108			operating-points-v2 = <&a53_opp_table>;
109			#cooling-cells = <2>;
110		};
111
112		A53_2: cpu@2 {
113			device_type = "cpu";
114			compatible = "arm,cortex-a53";
115			reg = <0x2>;
116			clock-latency = <61036>; /* two CLK32 periods */
117			clocks = <&clk IMX8MQ_CLK_ARM>;
118			enable-method = "psci";
119			next-level-cache = <&A53_L2>;
120			operating-points-v2 = <&a53_opp_table>;
121			#cooling-cells = <2>;
122		};
123
124		A53_3: cpu@3 {
125			device_type = "cpu";
126			compatible = "arm,cortex-a53";
127			reg = <0x3>;
128			clock-latency = <61036>; /* two CLK32 periods */
129			clocks = <&clk IMX8MQ_CLK_ARM>;
130			enable-method = "psci";
131			next-level-cache = <&A53_L2>;
132			operating-points-v2 = <&a53_opp_table>;
133			#cooling-cells = <2>;
134		};
135
136		A53_L2: l2-cache0 {
137			compatible = "cache";
138		};
139	};
140
141	a53_opp_table: opp-table {
142		compatible = "operating-points-v2";
143		opp-shared;
144
145		opp-800000000 {
146			opp-hz = /bits/ 64 <800000000>;
147			opp-microvolt = <900000>;
148			clock-latency-ns = <150000>;
149		};
150
151		opp-1300000000 {
152			opp-hz = /bits/ 64 <1300000000>;
153			opp-microvolt = <1000000>;
154			clock-latency-ns = <150000>;
155			opp-suspend;
156		};
157	};
158
159	pmu {
160		compatible = "arm,cortex-a53-pmu";
161		interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
162		interrupt-parent = <&gic>;
163		interrupt-affinity = <&A53_0>, <&A53_1>, <&A53_2>, <&A53_3>;
164	};
165
166	psci {
167		compatible = "arm,psci-1.0";
168		method = "smc";
169	};
170
171	thermal-zones {
172		cpu-thermal {
173			polling-delay-passive = <250>;
174			polling-delay = <2000>;
175			thermal-sensors = <&tmu 0>;
176
177			trips {
178				cpu_alert: cpu-alert {
179					temperature = <80000>;
180					hysteresis = <2000>;
181					type = "passive";
182				};
183
184				cpu-crit {
185					temperature = <90000>;
186					hysteresis = <2000>;
187					type = "critical";
188				};
189			};
190
191			cooling-maps {
192				map0 {
193					trip = <&cpu_alert>;
194					cooling-device =
195						<&A53_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
196						<&A53_1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
197						<&A53_2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
198						<&A53_3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
199				};
200			};
201		};
202
203		gpu-thermal {
204			polling-delay-passive = <250>;
205			polling-delay = <2000>;
206			thermal-sensors = <&tmu 1>;
207
208			trips {
209				gpu-crit {
210					temperature = <90000>;
211					hysteresis = <2000>;
212					type = "critical";
213				};
214			};
215		};
216
217		vpu-thermal {
218			polling-delay-passive = <250>;
219			polling-delay = <2000>;
220			thermal-sensors = <&tmu 2>;
221
222			trips {
223				vpu-crit {
224					temperature = <90000>;
225					hysteresis = <2000>;
226					type = "critical";
227				};
228			};
229		};
230	};
231
232	timer {
233		compatible = "arm,armv8-timer";
234		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>, /* Physical Secure */
235		             <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>, /* Physical Non-Secure */
236		             <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>, /* Virtual */
237		             <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>; /* Hypervisor */
238		interrupt-parent = <&gic>;
239		arm,no-tick-in-suspend;
240	};
241
242	soc@0 {
243		compatible = "simple-bus";
244		#address-cells = <1>;
245		#size-cells = <1>;
246		ranges = <0x0 0x0 0x0 0x3e000000>;
247		dma-ranges = <0x40000000 0x0 0x40000000 0xc0000000>;
248
249		bus@30000000 { /* AIPS1 */
250			compatible = "fsl,imx8mq-aips-bus", "simple-bus";
251			#address-cells = <1>;
252			#size-cells = <1>;
253			ranges = <0x30000000 0x30000000 0x400000>;
254
255			gpio1: gpio@30200000 {
256				compatible = "fsl,imx8mq-gpio", "fsl,imx35-gpio";
257				reg = <0x30200000 0x10000>;
258				interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>,
259				             <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
260				clocks = <&clk IMX8MQ_CLK_GPIO1_ROOT>;
261				gpio-controller;
262				#gpio-cells = <2>;
263				interrupt-controller;
264				#interrupt-cells = <2>;
265			};
266
267			gpio2: gpio@30210000 {
268				compatible = "fsl,imx8mq-gpio", "fsl,imx35-gpio";
269				reg = <0x30210000 0x10000>;
270				interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,
271				             <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
272				clocks = <&clk IMX8MQ_CLK_GPIO2_ROOT>;
273				gpio-controller;
274				#gpio-cells = <2>;
275				interrupt-controller;
276				#interrupt-cells = <2>;
277			};
278
279			gpio3: gpio@30220000 {
280				compatible = "fsl,imx8mq-gpio", "fsl,imx35-gpio";
281				reg = <0x30220000 0x10000>;
282				interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
283				             <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
284				clocks = <&clk IMX8MQ_CLK_GPIO3_ROOT>;
285				gpio-controller;
286				#gpio-cells = <2>;
287				interrupt-controller;
288				#interrupt-cells = <2>;
289			};
290
291			gpio4: gpio@30230000 {
292				compatible = "fsl,imx8mq-gpio", "fsl,imx35-gpio";
293				reg = <0x30230000 0x10000>;
294				interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
295				             <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
296				clocks = <&clk IMX8MQ_CLK_GPIO4_ROOT>;
297				gpio-controller;
298				#gpio-cells = <2>;
299				interrupt-controller;
300				#interrupt-cells = <2>;
301			};
302
303			gpio5: gpio@30240000 {
304				compatible = "fsl,imx8mq-gpio", "fsl,imx35-gpio";
305				reg = <0x30240000 0x10000>;
306				interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
307				             <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
308				clocks = <&clk IMX8MQ_CLK_GPIO5_ROOT>;
309				gpio-controller;
310				#gpio-cells = <2>;
311				interrupt-controller;
312				#interrupt-cells = <2>;
313			};
314
315			tmu: tmu@30260000 {
316				compatible = "fsl,imx8mq-tmu";
317				reg = <0x30260000 0x10000>;
318				interrupt = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
319				little-endian;
320				fsl,tmu-range = <0xb0000 0xa0026 0x80048 0x70061>;
321				fsl,tmu-calibration = <0x00000000 0x00000023
322						       0x00000001 0x00000029
323						       0x00000002 0x0000002f
324						       0x00000003 0x00000035
325						       0x00000004 0x0000003d
326						       0x00000005 0x00000043
327						       0x00000006 0x0000004b
328						       0x00000007 0x00000051
329						       0x00000008 0x00000057
330						       0x00000009 0x0000005f
331						       0x0000000a 0x00000067
332						       0x0000000b 0x0000006f
333
334						       0x00010000 0x0000001b
335						       0x00010001 0x00000023
336						       0x00010002 0x0000002b
337						       0x00010003 0x00000033
338						       0x00010004 0x0000003b
339						       0x00010005 0x00000043
340						       0x00010006 0x0000004b
341						       0x00010007 0x00000055
342						       0x00010008 0x0000005d
343						       0x00010009 0x00000067
344						       0x0001000a 0x00000070
345
346						       0x00020000 0x00000017
347						       0x00020001 0x00000023
348						       0x00020002 0x0000002d
349						       0x00020003 0x00000037
350						       0x00020004 0x00000041
351						       0x00020005 0x0000004b
352						       0x00020006 0x00000057
353						       0x00020007 0x00000063
354						       0x00020008 0x0000006f
355
356						       0x00030000 0x00000015
357						       0x00030001 0x00000021
358						       0x00030002 0x0000002d
359						       0x00030003 0x00000039
360						       0x00030004 0x00000045
361						       0x00030005 0x00000053
362						       0x00030006 0x0000005f
363						       0x00030007 0x00000071>;
364				#thermal-sensor-cells =  <1>;
365			};
366
367			wdog1: watchdog@30280000 {
368				compatible = "fsl,imx8mq-wdt", "fsl,imx21-wdt";
369				reg = <0x30280000 0x10000>;
370				interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
371				clocks = <&clk IMX8MQ_CLK_WDOG1_ROOT>;
372				status = "disabled";
373			};
374
375			wdog2: watchdog@30290000 {
376				compatible = "fsl,imx8mq-wdt", "fsl,imx21-wdt";
377				reg = <0x30290000 0x10000>;
378				interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
379				clocks = <&clk IMX8MQ_CLK_WDOG2_ROOT>;
380				status = "disabled";
381			};
382
383			wdog3: watchdog@302a0000 {
384				compatible = "fsl,imx8mq-wdt", "fsl,imx21-wdt";
385				reg = <0x302a0000 0x10000>;
386				interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
387				clocks = <&clk IMX8MQ_CLK_WDOG3_ROOT>;
388				status = "disabled";
389			};
390
391			sdma2: sdma@302c0000 {
392				compatible = "fsl,imx8mq-sdma","fsl,imx7d-sdma";
393				reg = <0x302c0000 0x10000>;
394				interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
395				clocks = <&clk IMX8MQ_CLK_SDMA2_ROOT>,
396					 <&clk IMX8MQ_CLK_SDMA2_ROOT>;
397				clock-names = "ipg", "ahb";
398				#dma-cells = <3>;
399				fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
400			};
401
402			iomuxc: iomuxc@30330000 {
403				compatible = "fsl,imx8mq-iomuxc";
404				reg = <0x30330000 0x10000>;
405			};
406
407			iomuxc_gpr: syscon@30340000 {
408				compatible = "fsl,imx8mq-iomuxc-gpr", "fsl,imx6q-iomuxc-gpr", "syscon";
409				reg = <0x30340000 0x10000>;
410			};
411
412			ocotp: ocotp-ctrl@30350000 {
413				compatible = "fsl,imx8mq-ocotp", "syscon";
414				reg = <0x30350000 0x10000>;
415				clocks = <&clk IMX8MQ_CLK_OCOTP_ROOT>;
416				#address-cells = <1>;
417				#size-cells = <1>;
418			};
419
420			anatop: syscon@30360000 {
421				compatible = "fsl,imx8mq-anatop", "syscon";
422				reg = <0x30360000 0x10000>;
423				interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
424			};
425
426			snvs: snvs@30370000 {
427				compatible = "fsl,sec-v4.0-mon", "syscon", "simple-mfd";
428				reg = <0x30370000 0x10000>;
429
430				snvs_rtc: snvs-rtc-lp{
431					compatible = "fsl,sec-v4.0-mon-rtc-lp";
432					regmap =<&snvs>;
433					offset = <0x34>;
434					interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
435						<GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
436				};
437
438			};
439
440			clk: clock-controller@30380000 {
441				compatible = "fsl,imx8mq-ccm";
442				reg = <0x30380000 0x10000>;
443				interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
444				             <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
445				#clock-cells = <1>;
446				clocks = <&ckil>, <&osc_25m>, <&osc_27m>,
447				         <&clk_ext1>, <&clk_ext2>,
448				         <&clk_ext3>, <&clk_ext4>;
449				clock-names = "ckil", "osc_25m", "osc_27m",
450				              "clk_ext1", "clk_ext2",
451				              "clk_ext3", "clk_ext4";
452			};
453
454			src: reset-controller@30390000 {
455				compatible = "fsl,imx8mq-src", "syscon";
456				reg = <0x30390000 0x10000>;
457				#reset-cells = <1>;
458			};
459
460			gpc: gpc@303a0000 {
461				compatible = "fsl,imx8mq-gpc";
462				reg = <0x303a0000 0x10000>;
463				interrupt-parent = <&gic>;
464				interrupt-controller;
465				#interrupt-cells = <3>;
466
467				pgc {
468					#address-cells = <1>;
469					#size-cells = <0>;
470
471					pgc_mipi: power-domain@0 {
472						#power-domain-cells = <0>;
473						reg = <IMX8M_POWER_DOMAIN_MIPI>;
474					};
475
476					/*
477					 * As per comment in ATF source code:
478					 *
479					 * PCIE1 and PCIE2 share the
480					 * same reset signal, if we
481					 * power down PCIE2, PCIE1
482					 * will be held in reset too.
483					 *
484					 * So instead of creating two
485					 * separate power domains for
486					 * PCIE1 and PCIE2 we create a
487					 * link between both and use
488					 * it as a shared PCIE power
489					 * domain.
490					 */
491					pgc_pcie: power-domain@1 {
492						#power-domain-cells = <0>;
493						reg = <IMX8M_POWER_DOMAIN_PCIE1>;
494						power-domains = <&pgc_pcie2>;
495					};
496
497					pgc_otg1: power-domain@2 {
498						#power-domain-cells = <0>;
499						reg = <IMX8M_POWER_DOMAIN_USB_OTG1>;
500					};
501
502					pgc_otg2: power-domain@3 {
503						#power-domain-cells = <0>;
504						reg = <IMX8M_POWER_DOMAIN_USB_OTG2>;
505					};
506
507					pgc_ddr1: power-domain@4 {
508						#power-domain-cells = <0>;
509						reg = <IMX8M_POWER_DOMAIN_DDR1>;
510					};
511
512					pgc_gpu: power-domain@5 {
513						#power-domain-cells = <0>;
514						reg = <IMX8M_POWER_DOMAIN_GPU>;
515						clocks = <&clk IMX8MQ_CLK_GPU_ROOT>,
516						         <&clk IMX8MQ_CLK_GPU_SHADER_DIV>,
517							 <&clk IMX8MQ_CLK_GPU_AXI>,
518						         <&clk IMX8MQ_CLK_GPU_AHB>;
519					};
520
521					pgc_vpu: power-domain@6 {
522						#power-domain-cells = <0>;
523						reg = <IMX8M_POWER_DOMAIN_VPU>;
524					};
525
526					pgc_disp: power-domain@7 {
527						#power-domain-cells = <0>;
528						reg = <IMX8M_POWER_DOMAIN_DISP>;
529					};
530
531					pgc_mipi_csi1: power-domain@8 {
532						#power-domain-cells = <0>;
533						reg = <IMX8M_POWER_DOMAIN_MIPI_CSI1>;
534					};
535
536					pgc_mipi_csi2: power-domain@9 {
537						#power-domain-cells = <0>;
538						reg = <IMX8M_POWER_DOMAIN_MIPI_CSI2>;
539					};
540
541					pgc_pcie2: power-domain@a {
542						#power-domain-cells = <0>;
543						reg = <IMX8M_POWER_DOMAIN_PCIE2>;
544					};
545				};
546			};
547		};
548
549		bus@30400000 { /* AIPS2 */
550			compatible = "fsl,imx8mq-aips-bus", "simple-bus";
551			#address-cells = <1>;
552			#size-cells = <1>;
553			ranges = <0x30400000 0x30400000 0x400000>;
554
555			pwm1: pwm@30660000 {
556				compatible = "fsl,imx8mq-pwm", "fsl,imx27-pwm";
557				reg = <0x30660000 0x10000>;
558				interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
559				clocks = <&clk IMX8MQ_CLK_PWM1_ROOT>,
560				         <&clk IMX8MQ_CLK_PWM1_ROOT>;
561				clock-names = "ipg", "per";
562				#pwm-cells = <2>;
563				status = "disabled";
564			};
565
566			pwm2: pwm@30670000 {
567				compatible = "fsl,imx8mq-pwm", "fsl,imx27-pwm";
568				reg = <0x30670000 0x10000>;
569				interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
570				clocks = <&clk IMX8MQ_CLK_PWM2_ROOT>,
571				         <&clk IMX8MQ_CLK_PWM2_ROOT>;
572				clock-names = "ipg", "per";
573				#pwm-cells = <2>;
574				status = "disabled";
575			};
576
577			pwm3: pwm@30680000 {
578				compatible = "fsl,imx8mq-pwm", "fsl,imx27-pwm";
579				reg = <0x30680000 0x10000>;
580				interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
581				clocks = <&clk IMX8MQ_CLK_PWM3_ROOT>,
582				         <&clk IMX8MQ_CLK_PWM3_ROOT>;
583				clock-names = "ipg", "per";
584				#pwm-cells = <2>;
585				status = "disabled";
586			};
587
588			pwm4: pwm@30690000 {
589				compatible = "fsl,imx8mq-pwm", "fsl,imx27-pwm";
590				reg = <0x30690000 0x10000>;
591				interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
592				clocks = <&clk IMX8MQ_CLK_PWM4_ROOT>,
593				         <&clk IMX8MQ_CLK_PWM4_ROOT>;
594				clock-names = "ipg", "per";
595				#pwm-cells = <2>;
596				status = "disabled";
597			};
598		};
599
600		bus@30800000 { /* AIPS3 */
601			compatible = "fsl,imx8mq-aips-bus", "simple-bus";
602			#address-cells = <1>;
603			#size-cells = <1>;
604			ranges = <0x30800000 0x30800000 0x400000>,
605				 <0x08000000 0x08000000 0x10000000>;
606
607			ecspi1: spi@30820000 {
608				#address-cells = <1>;
609				#size-cells = <0>;
610				compatible = "fsl,imx8mq-ecspi", "fsl,imx51-ecspi";
611				reg = <0x30820000 0x10000>;
612				interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
613				clocks = <&clk IMX8MQ_CLK_ECSPI1_ROOT>,
614					 <&clk IMX8MQ_CLK_ECSPI1_ROOT>;
615				clock-names = "ipg", "per";
616				status = "disabled";
617			};
618
619			ecspi2: spi@30830000 {
620				#address-cells = <1>;
621				#size-cells = <0>;
622				compatible = "fsl,imx8mq-ecspi", "fsl,imx51-ecspi";
623				reg = <0x30830000 0x10000>;
624				interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
625				clocks = <&clk IMX8MQ_CLK_ECSPI2_ROOT>,
626					 <&clk IMX8MQ_CLK_ECSPI2_ROOT>;
627				clock-names = "ipg", "per";
628				status = "disabled";
629			};
630
631			ecspi3: spi@30840000 {
632				#address-cells = <1>;
633				#size-cells = <0>;
634				compatible = "fsl,imx8mq-ecspi", "fsl,imx51-ecspi";
635				reg = <0x30840000 0x10000>;
636				interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
637				clocks = <&clk IMX8MQ_CLK_ECSPI3_ROOT>,
638					 <&clk IMX8MQ_CLK_ECSPI3_ROOT>;
639				clock-names = "ipg", "per";
640				status = "disabled";
641			};
642
643			uart1: serial@30860000 {
644				compatible = "fsl,imx8mq-uart",
645				             "fsl,imx6q-uart";
646				reg = <0x30860000 0x10000>;
647				interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
648				clocks = <&clk IMX8MQ_CLK_UART1_ROOT>,
649				         <&clk IMX8MQ_CLK_UART1_ROOT>;
650				clock-names = "ipg", "per";
651				status = "disabled";
652			};
653
654			uart3: serial@30880000 {
655				compatible = "fsl,imx8mq-uart",
656				             "fsl,imx6q-uart";
657				reg = <0x30880000 0x10000>;
658				interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
659				clocks = <&clk IMX8MQ_CLK_UART3_ROOT>,
660				         <&clk IMX8MQ_CLK_UART3_ROOT>;
661				clock-names = "ipg", "per";
662				status = "disabled";
663			};
664
665			uart2: serial@30890000 {
666				compatible = "fsl,imx8mq-uart",
667				             "fsl,imx6q-uart";
668				reg = <0x30890000 0x10000>;
669				interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
670				clocks = <&clk IMX8MQ_CLK_UART2_ROOT>,
671				         <&clk IMX8MQ_CLK_UART2_ROOT>;
672				clock-names = "ipg", "per";
673				status = "disabled";
674			};
675
676			sai2: sai@308b0000 {
677				#sound-dai-cells = <0>;
678				compatible = "fsl,imx8mq-sai",
679					     "fsl,imx6sx-sai";
680				reg = <0x308b0000 0x10000>;
681				interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
682				clocks = <&clk IMX8MQ_CLK_SAI2_IPG>,
683					 <&clk IMX8MQ_CLK_SAI2_ROOT>,
684					 <&clk IMX8MQ_CLK_DUMMY>, <&clk IMX8MQ_CLK_DUMMY>;
685				clock-names = "bus", "mclk1", "mclk2", "mclk3";
686				dmas = <&sdma1 10 24 0>, <&sdma1 11 24 0>;
687				dma-names = "rx", "tx";
688				status = "disabled";
689			};
690
691			i2c1: i2c@30a20000 {
692				compatible = "fsl,imx8mq-i2c", "fsl,imx21-i2c";
693				reg = <0x30a20000 0x10000>;
694				interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
695				clocks = <&clk IMX8MQ_CLK_I2C1_ROOT>;
696				#address-cells = <1>;
697				#size-cells = <0>;
698				status = "disabled";
699			};
700
701			i2c2: i2c@30a30000 {
702				compatible = "fsl,imx8mq-i2c", "fsl,imx21-i2c";
703				reg = <0x30a30000 0x10000>;
704				interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
705				clocks = <&clk IMX8MQ_CLK_I2C2_ROOT>;
706				#address-cells = <1>;
707				#size-cells = <0>;
708				status = "disabled";
709			};
710
711			i2c3: i2c@30a40000 {
712				compatible = "fsl,imx8mq-i2c", "fsl,imx21-i2c";
713				reg = <0x30a40000 0x10000>;
714				interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
715				clocks = <&clk IMX8MQ_CLK_I2C3_ROOT>;
716				#address-cells = <1>;
717				#size-cells = <0>;
718				status = "disabled";
719			};
720
721			i2c4: i2c@30a50000 {
722				compatible = "fsl,imx8mq-i2c", "fsl,imx21-i2c";
723				reg = <0x30a50000 0x10000>;
724				interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
725				clocks = <&clk IMX8MQ_CLK_I2C4_ROOT>;
726				#address-cells = <1>;
727				#size-cells = <0>;
728				status = "disabled";
729			};
730
731			uart4: serial@30a60000 {
732				compatible = "fsl,imx8mq-uart",
733				             "fsl,imx6q-uart";
734				reg = <0x30a60000 0x10000>;
735				interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
736				clocks = <&clk IMX8MQ_CLK_UART4_ROOT>,
737				         <&clk IMX8MQ_CLK_UART4_ROOT>;
738				clock-names = "ipg", "per";
739				status = "disabled";
740			};
741
742			usdhc1: mmc@30b40000 {
743				compatible = "fsl,imx8mq-usdhc",
744				             "fsl,imx7d-usdhc";
745				reg = <0x30b40000 0x10000>;
746				interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
747				clocks = <&clk IMX8MQ_CLK_DUMMY>,
748				         <&clk IMX8MQ_CLK_NAND_USDHC_BUS>,
749				         <&clk IMX8MQ_CLK_USDHC1_ROOT>;
750				clock-names = "ipg", "ahb", "per";
751				assigned-clocks = <&clk IMX8MQ_CLK_USDHC1>;
752				assigned-clock-rates = <400000000>;
753				fsl,tuning-start-tap = <20>;
754				fsl,tuning-step = <2>;
755				bus-width = <4>;
756				status = "disabled";
757			};
758
759			usdhc2: mmc@30b50000 {
760				compatible = "fsl,imx8mq-usdhc",
761				             "fsl,imx7d-usdhc";
762				reg = <0x30b50000 0x10000>;
763				interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
764				clocks = <&clk IMX8MQ_CLK_DUMMY>,
765				         <&clk IMX8MQ_CLK_NAND_USDHC_BUS>,
766				         <&clk IMX8MQ_CLK_USDHC2_ROOT>;
767				clock-names = "ipg", "ahb", "per";
768				fsl,tuning-start-tap = <20>;
769				fsl,tuning-step = <2>;
770				bus-width = <4>;
771				status = "disabled";
772			};
773
774			qspi0: spi@30bb0000 {
775				#address-cells = <1>;
776				#size-cells = <0>;
777				compatible = "fsl,imx8mq-qspi", "fsl,imx7d-qspi";
778				reg = <0x30bb0000 0x10000>,
779				      <0x08000000 0x10000000>;
780				reg-names = "QuadSPI", "QuadSPI-memory";
781				interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
782				clocks = <&clk IMX8MQ_CLK_QSPI_ROOT>,
783					 <&clk IMX8MQ_CLK_QSPI_ROOT>;
784				clock-names = "qspi_en", "qspi";
785				status = "disabled";
786			};
787
788			sdma1: sdma@30bd0000 {
789				compatible = "fsl,imx8mq-sdma","fsl,imx7d-sdma";
790				reg = <0x30bd0000 0x10000>;
791				interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
792				clocks = <&clk IMX8MQ_CLK_SDMA1_ROOT>,
793					 <&clk IMX8MQ_CLK_AHB>;
794				clock-names = "ipg", "ahb";
795				#dma-cells = <3>;
796				fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
797			};
798
799			fec1: ethernet@30be0000 {
800				compatible = "fsl,imx8mq-fec", "fsl,imx6sx-fec";
801				reg = <0x30be0000 0x10000>;
802				interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>,
803				             <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>,
804				             <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
805				clocks = <&clk IMX8MQ_CLK_ENET1_ROOT>,
806				         <&clk IMX8MQ_CLK_ENET1_ROOT>,
807				         <&clk IMX8MQ_CLK_ENET_TIMER>,
808				         <&clk IMX8MQ_CLK_ENET_REF>,
809				         <&clk IMX8MQ_CLK_ENET_PHY_REF>;
810				clock-names = "ipg", "ahb", "ptp",
811				              "enet_clk_ref", "enet_out";
812				fsl,num-tx-queues = <3>;
813				fsl,num-rx-queues = <3>;
814				status = "disabled";
815			};
816		};
817
818		gpu: gpu@38000000 {
819			compatible = "vivante,gc";
820			reg = <0x38000000 0x40000>;
821			interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
822			clocks = <&clk IMX8MQ_CLK_GPU_ROOT>,
823			         <&clk IMX8MQ_CLK_GPU_SHADER_DIV>,
824			         <&clk IMX8MQ_CLK_GPU_AXI>,
825			         <&clk IMX8MQ_CLK_GPU_AHB>;
826			clock-names = "core", "shader", "bus", "reg";
827			assigned-clocks = <&clk IMX8MQ_CLK_GPU_CORE_SRC>,
828			                  <&clk IMX8MQ_CLK_GPU_SHADER_SRC>,
829			                  <&clk IMX8MQ_CLK_GPU_AXI>,
830			                  <&clk IMX8MQ_CLK_GPU_AHB>,
831			                  <&clk IMX8MQ_GPU_PLL_BYPASS>;
832			assigned-clock-parents = <&clk IMX8MQ_GPU_PLL_OUT>,
833			                         <&clk IMX8MQ_GPU_PLL_OUT>,
834			                         <&clk IMX8MQ_GPU_PLL_OUT>,
835			                         <&clk IMX8MQ_GPU_PLL_OUT>,
836			                         <&clk IMX8MQ_GPU_PLL>;
837			assigned-clock-rates = <800000000>, <800000000>,
838			                       <800000000>, <800000000>, <0>;
839			power-domains = <&pgc_gpu>;
840		};
841
842		usb_dwc3_0: usb@38100000 {
843			compatible = "fsl,imx8mq-dwc3", "snps,dwc3";
844			reg = <0x38100000 0x10000>;
845			clocks = <&clk IMX8MQ_CLK_USB_BUS>,
846			         <&clk IMX8MQ_CLK_USB_CORE_REF>,
847			         <&clk IMX8MQ_CLK_USB1_CTRL_ROOT>;
848			clock-names = "bus_early", "ref", "suspend";
849			assigned-clocks = <&clk IMX8MQ_CLK_USB_BUS>,
850			                  <&clk IMX8MQ_CLK_USB_CORE_REF>;
851			assigned-clock-parents = <&clk IMX8MQ_SYS2_PLL_500M>,
852			                         <&clk IMX8MQ_SYS1_PLL_100M>;
853			assigned-clock-rates = <500000000>, <100000000>;
854			interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
855			phys = <&usb3_phy0>, <&usb3_phy0>;
856			phy-names = "usb2-phy", "usb3-phy";
857			power-domains = <&pgc_otg1>;
858			usb3-resume-missing-cas;
859			status = "disabled";
860		};
861
862		usb3_phy0: usb-phy@381f0040 {
863			compatible = "fsl,imx8mq-usb-phy";
864			reg = <0x381f0040 0x40>;
865			clocks = <&clk IMX8MQ_CLK_USB1_PHY_ROOT>;
866			clock-names = "phy";
867			assigned-clocks = <&clk IMX8MQ_CLK_USB_PHY_REF>;
868			assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_100M>;
869			assigned-clock-rates = <100000000>;
870			#phy-cells = <0>;
871			status = "disabled";
872		};
873
874		usb_dwc3_1: usb@38200000 {
875			compatible = "fsl,imx8mq-dwc3", "snps,dwc3";
876			reg = <0x38200000 0x10000>;
877			clocks = <&clk IMX8MQ_CLK_USB_BUS>,
878			         <&clk IMX8MQ_CLK_USB_CORE_REF>,
879			         <&clk IMX8MQ_CLK_USB2_CTRL_ROOT>;
880			clock-names = "bus_early", "ref", "suspend";
881			assigned-clocks = <&clk IMX8MQ_CLK_USB_BUS>,
882			                  <&clk IMX8MQ_CLK_USB_CORE_REF>;
883			assigned-clock-parents = <&clk IMX8MQ_SYS2_PLL_500M>,
884			                         <&clk IMX8MQ_SYS1_PLL_100M>;
885			assigned-clock-rates = <500000000>, <100000000>;
886			interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
887			phys = <&usb3_phy1>, <&usb3_phy1>;
888			phy-names = "usb2-phy", "usb3-phy";
889			power-domains = <&pgc_otg2>;
890			usb3-resume-missing-cas;
891			status = "disabled";
892		};
893
894		usb3_phy1: usb-phy@382f0040 {
895			compatible = "fsl,imx8mq-usb-phy";
896			reg = <0x382f0040 0x40>;
897			clocks = <&clk IMX8MQ_CLK_USB2_PHY_ROOT>;
898			clock-names = "phy";
899			assigned-clocks = <&clk IMX8MQ_CLK_USB_PHY_REF>;
900			assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_100M>;
901			assigned-clock-rates = <100000000>;
902			#phy-cells = <0>;
903			status = "disabled";
904		};
905
906
907		pcie0: pcie@33800000 {
908			compatible = "fsl,imx8mq-pcie";
909			reg = <0x33800000 0x400000>,
910			      <0x1ff00000 0x80000>;
911			reg-names = "dbi", "config";
912			#address-cells = <3>;
913			#size-cells = <2>;
914			device_type = "pci";
915			bus-range = <0x00 0xff>;
916			ranges = <0x81000000 0 0x00000000 0x1ff80000 0 0x00010000 /* downstream I/O 64KB */
917			          0x82000000 0 0x18000000 0x18000000 0 0x07f00000>; /* non-prefetchable memory */
918			num-lanes = <1>;
919			num-viewport = <4>;
920			interrupts = <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
921			interrupt-names = "msi";
922			#interrupt-cells = <1>;
923			interrupt-map-mask = <0 0 0 0x7>;
924			interrupt-map = <0 0 0 1 &gic GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
925			                <0 0 0 2 &gic GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
926			                <0 0 0 3 &gic GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
927			                <0 0 0 4 &gic GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
928			fsl,max-link-speed = <2>;
929			power-domains = <&pgc_pcie>;
930			resets = <&src IMX8MQ_RESET_PCIEPHY>,
931			         <&src IMX8MQ_RESET_PCIE_CTRL_APPS_EN>,
932			         <&src IMX8MQ_RESET_PCIE_CTRL_APPS_TURNOFF>;
933			reset-names = "pciephy", "apps", "turnoff";
934			status = "disabled";
935		};
936
937		pcie1: pcie@33c00000 {
938			compatible = "fsl,imx8mq-pcie";
939			reg = <0x33c00000 0x400000>,
940			      <0x27f00000 0x80000>;
941			reg-names = "dbi", "config";
942			#address-cells = <3>;
943			#size-cells = <2>;
944			device_type = "pci";
945			ranges =  <0x81000000 0 0x00000000 0x27f80000 0 0x00010000 /* downstream I/O 64KB */
946				   0x82000000 0 0x20000000 0x20000000 0 0x07f00000>; /* non-prefetchable memory */
947			num-lanes = <1>;
948			num-viewport = <4>;
949			interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
950			interrupt-names = "msi";
951			#interrupt-cells = <1>;
952			interrupt-map-mask = <0 0 0 0x7>;
953			interrupt-map = <0 0 0 1 &gic GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>,
954					<0 0 0 2 &gic GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>,
955					<0 0 0 3 &gic GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
956					<0 0 0 4 &gic GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
957			fsl,max-link-speed = <2>;
958			power-domains = <&pgc_pcie>;
959			resets = <&src IMX8MQ_RESET_PCIEPHY2>,
960			         <&src IMX8MQ_RESET_PCIE2_CTRL_APPS_EN>,
961			         <&src IMX8MQ_RESET_PCIE2_CTRL_APPS_TURNOFF>;
962			reset-names = "pciephy", "apps", "turnoff";
963			status = "disabled";
964		};
965
966		gic: interrupt-controller@38800000 {
967			compatible = "arm,gic-v3";
968			reg = <0x38800000 0x10000>,	/* GIC Dist */
969			      <0x38880000 0xc0000>,	/* GICR */
970			      <0x31000000 0x2000>,	/* GICC */
971			      <0x31010000 0x2000>,	/* GICV */
972			      <0x31020000 0x2000>;	/* GICH */
973			#interrupt-cells = <3>;
974			interrupt-controller;
975			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
976			interrupt-parent = <&gic>;
977		};
978	};
979};
980