1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2019 MediaTek Inc.
4 * Copyright (c) 2019 BayLibre, SAS.
5 * Author: Fabien Parent <fparent@baylibre.com>
8 #include <dt-bindings/clock/mt8516-clk.h>
9 #include <dt-bindings/interrupt-controller/arm-gic.h>
10 #include <dt-bindings/interrupt-controller/irq.h>
11 #include <dt-bindings/phy/phy.h>
13 #include "mt8516-pinfunc.h"
16 compatible = "mediatek,mt8516";
17 interrupt-parent = <&sysirq>;
21 cluster0_opp: opp-table-0 {
22 compatible = "operating-points-v2";
25 opp-hz = /bits/ 64 <598000000>;
26 opp-microvolt = <1150000>;
29 opp-hz = /bits/ 64 <747500000>;
30 opp-microvolt = <1150000>;
33 opp-hz = /bits/ 64 <1040000000>;
34 opp-microvolt = <1200000>;
37 opp-hz = /bits/ 64 <1196000000>;
38 opp-microvolt = <1250000>;
41 opp-hz = /bits/ 64 <1300000000>;
42 opp-microvolt = <1300000>;
52 compatible = "arm,cortex-a35";
54 enable-method = "psci";
55 cpu-idle-states = <&CLUSTER_SLEEP_0 &CLUSTER_SLEEP_0>,
56 <&CPU_SLEEP_0_0 &CPU_SLEEP_0_0 &CPU_SLEEP_0_0>;
57 clocks = <&infracfg CLK_IFR_MUX1_SEL>,
58 <&topckgen CLK_TOP_MAINPLL_D2>;
59 clock-names = "cpu", "intermediate";
60 operating-points-v2 = <&cluster0_opp>;
65 compatible = "arm,cortex-a35";
67 enable-method = "psci";
68 cpu-idle-states = <&CLUSTER_SLEEP_0 &CLUSTER_SLEEP_0>,
69 <&CPU_SLEEP_0_0 &CPU_SLEEP_0_0 &CPU_SLEEP_0_0>;
70 clocks = <&infracfg CLK_IFR_MUX1_SEL>,
71 <&topckgen CLK_TOP_MAINPLL_D2>;
72 clock-names = "cpu", "intermediate";
73 operating-points-v2 = <&cluster0_opp>;
78 compatible = "arm,cortex-a35";
80 enable-method = "psci";
81 cpu-idle-states = <&CLUSTER_SLEEP_0 &CLUSTER_SLEEP_0>,
82 <&CPU_SLEEP_0_0 &CPU_SLEEP_0_0 &CPU_SLEEP_0_0>;
83 clocks = <&infracfg CLK_IFR_MUX1_SEL>,
84 <&topckgen CLK_TOP_MAINPLL_D2>;
85 clock-names = "cpu", "intermediate";
86 operating-points-v2 = <&cluster0_opp>;
91 compatible = "arm,cortex-a35";
93 enable-method = "psci";
94 cpu-idle-states = <&CLUSTER_SLEEP_0 &CLUSTER_SLEEP_0>,
95 <&CPU_SLEEP_0_0 &CPU_SLEEP_0_0 &CPU_SLEEP_0_0>;
96 clocks = <&infracfg CLK_IFR_MUX1_SEL>,
97 <&topckgen CLK_TOP_MAINPLL_D2>;
98 clock-names = "cpu", "intermediate", "armpll";
99 operating-points-v2 = <&cluster0_opp>;
103 entry-method = "psci";
105 CPU_SLEEP_0_0: cpu-sleep-0-0 {
106 compatible = "arm,idle-state";
107 entry-latency-us = <600>;
108 exit-latency-us = <600>;
109 min-residency-us = <1200>;
110 arm,psci-suspend-param = <0x0010000>;
113 CLUSTER_SLEEP_0: cluster-sleep-0 {
114 compatible = "arm,idle-state";
115 entry-latency-us = <800>;
116 exit-latency-us = <1000>;
117 min-residency-us = <2000>;
118 arm,psci-suspend-param = <0x2010000>;
124 compatible = "arm,psci-1.0";
129 compatible = "fixed-clock";
131 clock-frequency = <26000000>;
132 clock-output-names = "clk26m";
136 compatible = "fixed-clock";
138 clock-frequency = <32000>;
139 clock-output-names = "clk32k";
143 #address-cells = <2>;
147 /* 128 KiB reserved for ARM Trusted Firmware (BL31) */
148 bl31_secmon_reserved: secmon@43000000 {
150 reg = <0 0x43000000 0 0x20000>;
155 compatible = "arm,armv8-timer";
156 interrupt-parent = <&gic>;
157 interrupts = <GIC_PPI 13
158 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
160 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
162 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
164 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
168 compatible = "arm,armv8-pmuv3";
169 interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_LOW>,
170 <GIC_SPI 5 IRQ_TYPE_LEVEL_LOW>,
171 <GIC_SPI 6 IRQ_TYPE_LEVEL_LOW>,
172 <GIC_SPI 7 IRQ_TYPE_LEVEL_LOW>;
173 interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
177 #address-cells = <2>;
179 compatible = "simple-bus";
182 topckgen: topckgen@10000000 {
183 compatible = "mediatek,mt8516-topckgen", "syscon";
184 reg = <0 0x10000000 0 0x1000>;
188 infracfg: infracfg@10001000 {
189 compatible = "mediatek,mt8516-infracfg", "syscon";
190 reg = <0 0x10001000 0 0x1000>;
194 pericfg: pericfg@10003050 {
195 compatible = "mediatek,mt8516-pericfg", "syscon";
196 reg = <0 0x10003050 0 0x1000>;
199 apmixedsys: apmixedsys@10018000 {
200 compatible = "mediatek,mt8516-apmixedsys", "syscon";
201 reg = <0 0x10018000 0 0x710>;
205 toprgu: toprgu@10007000 {
206 compatible = "mediatek,mt8516-wdt",
207 "mediatek,mt6589-wdt";
208 reg = <0 0x10007000 0 0x1000>;
209 interrupts = <GIC_SPI 198 IRQ_TYPE_EDGE_FALLING>;
213 timer: timer@10008000 {
214 compatible = "mediatek,mt8516-timer",
215 "mediatek,mt6577-timer";
216 reg = <0 0x10008000 0 0x1000>;
217 interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_LOW>;
218 clocks = <&topckgen CLK_TOP_CLK26M_D2>,
219 <&topckgen CLK_TOP_APXGPT>;
220 clock-names = "clk13m", "bus";
223 syscfg_pctl: syscfg-pctl@10005000 {
224 compatible = "syscon";
225 reg = <0 0x10005000 0 0x1000>;
228 pio: pinctrl@1000b000 {
229 compatible = "mediatek,mt8516-pinctrl";
230 reg = <0 0x1000b000 0 0x1000>;
231 mediatek,pctl-regmap = <&syscfg_pctl>;
235 interrupt-controller;
236 #interrupt-cells = <2>;
237 interrupts = <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>;
240 pwrap: pwrap@1000f000 {
241 compatible = "mediatek,mt8516-pwrap";
242 reg = <0 0x1000f000 0 0x1000>;
244 interrupts = <GIC_SPI 204 IRQ_TYPE_LEVEL_LOW>;
245 clocks = <&topckgen CLK_TOP_PMICWRAP_26M>,
246 <&topckgen CLK_TOP_PMICWRAP_AP>;
247 clock-names = "spi", "wrap";
250 sysirq: interrupt-controller@10200620 {
251 compatible = "mediatek,mt8516-sysirq",
252 "mediatek,mt6577-sysirq";
253 interrupt-controller;
254 #interrupt-cells = <3>;
255 interrupt-parent = <&gic>;
256 reg = <0 0x10200620 0 0x20>;
259 gic: interrupt-controller@10310000 {
260 compatible = "arm,gic-400";
261 #interrupt-cells = <3>;
262 interrupt-parent = <&gic>;
263 interrupt-controller;
264 reg = <0 0x10310000 0 0x1000>,
265 <0 0x10320000 0 0x1000>,
266 <0 0x10340000 0 0x2000>,
267 <0 0x10360000 0 0x2000>;
268 interrupts = <GIC_PPI 9
269 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
272 uart0: serial@11005000 {
273 compatible = "mediatek,mt8516-uart",
274 "mediatek,mt6577-uart";
275 reg = <0 0x11005000 0 0x1000>;
276 interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_LOW>;
277 clocks = <&topckgen CLK_TOP_UART0_SEL>,
278 <&topckgen CLK_TOP_UART0>;
279 clock-names = "baud", "bus";
283 uart1: serial@11006000 {
284 compatible = "mediatek,mt8516-uart",
285 "mediatek,mt6577-uart";
286 reg = <0 0x11006000 0 0x1000>;
287 interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_LOW>;
288 clocks = <&topckgen CLK_TOP_UART1_SEL>,
289 <&topckgen CLK_TOP_UART1>;
290 clock-names = "baud", "bus";
294 uart2: serial@11007000 {
295 compatible = "mediatek,mt8516-uart",
296 "mediatek,mt6577-uart";
297 reg = <0 0x11007000 0 0x1000>;
298 interrupts = <GIC_SPI 211 IRQ_TYPE_LEVEL_LOW>;
299 clocks = <&topckgen CLK_TOP_UART2_SEL>,
300 <&topckgen CLK_TOP_UART2>;
301 clock-names = "baud", "bus";
306 compatible = "mediatek,mt8516-i2c",
307 "mediatek,mt2712-i2c";
308 reg = <0 0x11009000 0 0x90>,
309 <0 0x11000180 0 0x80>;
310 interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_LOW>;
311 clocks = <&topckgen CLK_TOP_AHB_INFRA_D2>,
312 <&infracfg CLK_IFR_I2C0_SEL>,
313 <&topckgen CLK_TOP_I2C0>,
314 <&topckgen CLK_TOP_APDMA>;
315 clock-names = "main-source",
319 #address-cells = <1>;
325 compatible = "mediatek,mt8516-i2c",
326 "mediatek,mt2712-i2c";
327 reg = <0 0x1100a000 0 0x90>,
328 <0 0x11000200 0 0x80>;
329 interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_LOW>;
330 clocks = <&topckgen CLK_TOP_AHB_INFRA_D2>,
331 <&infracfg CLK_IFR_I2C1_SEL>,
332 <&topckgen CLK_TOP_I2C1>,
333 <&topckgen CLK_TOP_APDMA>;
334 clock-names = "main-source",
338 #address-cells = <1>;
344 compatible = "mediatek,mt8516-i2c",
345 "mediatek,mt2712-i2c";
346 reg = <0 0x1100b000 0 0x90>,
347 <0 0x11000280 0 0x80>;
348 interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_LOW>;
349 clocks = <&topckgen CLK_TOP_AHB_INFRA_D2>,
350 <&infracfg CLK_IFR_I2C2_SEL>,
351 <&topckgen CLK_TOP_I2C2>,
352 <&topckgen CLK_TOP_APDMA>;
353 clock-names = "main-source",
357 #address-cells = <1>;
363 compatible = "mediatek,mt8516-spi",
364 "mediatek,mt2712-spi";
365 #address-cells = <1>;
367 reg = <0 0x1100c000 0 0x1000>;
368 interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_LOW>;
369 clocks = <&topckgen CLK_TOP_UNIVPLL_D12>,
370 <&topckgen CLK_TOP_SPI_SEL>,
371 <&topckgen CLK_TOP_SPI>;
372 clock-names = "parent-clk", "sel-clk", "spi-clk";
377 compatible = "mediatek,mt8516-mmc";
378 reg = <0 0x11120000 0 0x1000>;
379 interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_LOW>;
380 clocks = <&topckgen CLK_TOP_MSDC0>,
381 <&topckgen CLK_TOP_AHB_INFRA_SEL>,
382 <&topckgen CLK_TOP_MSDC0_INFRA>;
383 clock-names = "source", "hclk", "source_cg";
388 compatible = "mediatek,mt8516-mmc";
389 reg = <0 0x11130000 0 0x1000>;
390 interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_LOW>;
391 clocks = <&topckgen CLK_TOP_MSDC1>,
392 <&topckgen CLK_TOP_AHB_INFRA_SEL>,
393 <&topckgen CLK_TOP_MSDC1_INFRA>;
394 clock-names = "source", "hclk", "source_cg";
399 compatible = "mediatek,mt8516-mmc";
400 reg = <0 0x11170000 0 0x1000>;
401 interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_LOW>;
402 clocks = <&topckgen CLK_TOP_MSDC2>,
403 <&topckgen CLK_TOP_RG_MSDC2>,
404 <&topckgen CLK_TOP_MSDC2_INFRA>;
405 clock-names = "source", "hclk", "source_cg";
409 ethernet: ethernet@11180000 {
410 compatible = "mediatek,mt8516-eth";
411 reg = <0 0x11180000 0 0x1000>;
412 mediatek,pericfg = <&pericfg>;
413 interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_LOW>;
414 clocks = <&topckgen CLK_TOP_RG_ETH>,
415 <&topckgen CLK_TOP_66M_ETH>,
416 <&topckgen CLK_TOP_133M_ETH>;
417 clock-names = "core", "reg", "trans";
422 compatible = "mediatek,mt8516-rng",
423 "mediatek,mt7623-rng";
424 reg = <0 0x1020c000 0 0x100>;
425 clocks = <&topckgen CLK_TOP_TRNG>;
430 compatible = "mediatek,mt8516-pwm";
431 reg = <0 0x11008000 0 0x1000>;
433 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_LOW>;
434 clocks = <&topckgen CLK_TOP_PWM>,
435 <&topckgen CLK_TOP_PWM_B>,
436 <&topckgen CLK_TOP_PWM1_FB>,
437 <&topckgen CLK_TOP_PWM2_FB>,
438 <&topckgen CLK_TOP_PWM3_FB>,
439 <&topckgen CLK_TOP_PWM4_FB>,
440 <&topckgen CLK_TOP_PWM5_FB>;
441 clock-names = "top", "main", "pwm1", "pwm2", "pwm3",
446 compatible = "mediatek,mtk-musb";
447 reg = <0 0x11100000 0 0x1000>;
448 interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_LOW>;
449 interrupt-names = "mc";
450 phys = <&usb0_port PHY_TYPE_USB2>;
451 clocks = <&topckgen CLK_TOP_USB>,
452 <&topckgen CLK_TOP_USBIF>,
453 <&topckgen CLK_TOP_USB_1P>;
454 clock-names = "main","mcu","univpll";
459 compatible = "mediatek,mtk-musb";
460 reg = <0 0x11190000 0 0x1000>;
461 interrupts = <GIC_SPI 210 IRQ_TYPE_LEVEL_LOW>;
462 interrupt-names = "mc";
463 phys = <&usb1_port PHY_TYPE_USB2>;
464 clocks = <&topckgen CLK_TOP_USB>,
465 <&topckgen CLK_TOP_USBIF>,
466 <&topckgen CLK_TOP_USB_1P>;
467 clock-names = "main","mcu","univpll";
472 usb_phy: usb@11110000 {
473 compatible = "mediatek,generic-tphy-v1";
474 reg = <0 0x11110000 0 0x800>;
475 #address-cells = <2>;
480 usb0_port: usb-phy@11110800 {
481 reg = <0 0x11110800 0 0x100>;
482 clocks = <&topckgen CLK_TOP_USB_PHY48M>;
487 usb1_port: usb-phy@11110900 {
488 reg = <0 0x11110900 0 0x100>;
489 clocks = <&topckgen CLK_TOP_USB_PHY48M>;
495 auxadc: adc@11003000 {
496 compatible = "mediatek,mt8516-auxadc",
497 "mediatek,mt8173-auxadc";
498 reg = <0 0x11003000 0 0x1000>;
499 clocks = <&topckgen CLK_TOP_AUX_ADC>;
500 clock-names = "main";
501 #io-channel-cells = <1>;