xref: /linux/arch/arm64/boot/dts/amlogic/meson-a1.dtsi (revision ae22a94997b8a03dcb3c922857c203246711f9d4)
1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
4 */
5
6#include <dt-bindings/clock/amlogic,a1-pll-clkc.h>
7#include <dt-bindings/clock/amlogic,a1-peripherals-clkc.h>
8#include <dt-bindings/gpio/meson-a1-gpio.h>
9#include <dt-bindings/interrupt-controller/arm-gic.h>
10#include <dt-bindings/interrupt-controller/irq.h>
11#include <dt-bindings/power/meson-a1-power.h>
12#include <dt-bindings/reset/amlogic,meson-a1-reset.h>
13
14/ {
15	compatible = "amlogic,a1";
16
17	interrupt-parent = <&gic>;
18	#address-cells = <2>;
19	#size-cells = <2>;
20
21	cpus {
22		#address-cells = <2>;
23		#size-cells = <0>;
24
25		cpu0: cpu@0 {
26			device_type = "cpu";
27			compatible = "arm,cortex-a35";
28			reg = <0x0 0x0>;
29			enable-method = "psci";
30			next-level-cache = <&l2>;
31		};
32
33		cpu1: cpu@1 {
34			device_type = "cpu";
35			compatible = "arm,cortex-a35";
36			reg = <0x0 0x1>;
37			enable-method = "psci";
38			next-level-cache = <&l2>;
39		};
40
41		l2: l2-cache0 {
42			compatible = "cache";
43			cache-level = <2>;
44			cache-unified;
45		};
46	};
47
48	efuse: efuse {
49		compatible = "amlogic,meson-gxbb-efuse";
50		clocks = <&clkc_periphs CLKID_OTP>;
51		#address-cells = <1>;
52		#size-cells = <1>;
53		secure-monitor = <&sm>;
54		power-domains = <&pwrc PWRC_OTP_ID>;
55	};
56
57	psci {
58		compatible = "arm,psci-1.0";
59		method = "smc";
60	};
61
62	reserved-memory {
63		#address-cells = <2>;
64		#size-cells = <2>;
65		ranges;
66
67		linux,cma {
68			compatible = "shared-dma-pool";
69			reusable;
70			size = <0x0 0x800000>;
71			alignment = <0x0 0x400000>;
72			linux,cma-default;
73		};
74	};
75
76	sm: secure-monitor {
77		compatible = "amlogic,meson-gxbb-sm";
78
79		pwrc: power-controller {
80			compatible = "amlogic,meson-a1-pwrc";
81			#power-domain-cells = <1>;
82		};
83	};
84
85	soc {
86		compatible = "simple-bus";
87		#address-cells = <2>;
88		#size-cells = <2>;
89		ranges;
90
91		spifc: spi@fd000400 {
92			compatible = "amlogic,a1-spifc";
93			reg = <0x0 0xfd000400 0x0 0x290>;
94			clocks = <&clkc_periphs CLKID_SPIFC>;
95			#address-cells = <1>;
96			#size-cells = <0>;
97			power-domains = <&pwrc PWRC_SPIFC_ID>;
98			status = "disabled";
99		};
100
101		apb: bus@fe000000 {
102			compatible = "simple-bus";
103			reg = <0x0 0xfe000000 0x0 0x1000000>;
104			#address-cells = <2>;
105			#size-cells = <2>;
106			ranges = <0x0 0x0 0x0 0xfe000000 0x0 0x1000000>;
107
108			reset: reset-controller@0 {
109				compatible = "amlogic,meson-a1-reset";
110				reg = <0x0 0x0 0x0 0x8c>;
111				#reset-cells = <1>;
112			};
113
114			periphs_pinctrl: pinctrl@400 {
115				compatible = "amlogic,meson-a1-periphs-pinctrl";
116				#address-cells = <2>;
117				#size-cells = <2>;
118				ranges;
119
120				gpio: bank@400 {
121					reg = <0x0 0x0400 0x0 0x003c>,
122					      <0x0 0x0480 0x0 0x0118>;
123					reg-names = "mux", "gpio";
124					gpio-controller;
125					#gpio-cells = <2>;
126					gpio-ranges = <&periphs_pinctrl 0 0 62>;
127				};
128
129				i2c0_f11_pins: i2c0-f11 {
130					mux {
131						groups = "i2c0_sck_f11",
132							 "i2c0_sda_f12";
133						function = "i2c0";
134						bias-pull-up;
135						drive-strength-microamp = <3000>;
136					};
137				};
138
139				i2c0_f9_pins: i2c0-f9 {
140					mux {
141						groups = "i2c0_sck_f9",
142							 "i2c0_sda_f10";
143						function = "i2c0";
144						bias-pull-up;
145						drive-strength-microamp = <3000>;
146					};
147				};
148
149				i2c1_x_pins: i2c1-x {
150					mux {
151						groups = "i2c1_sck_x",
152							 "i2c1_sda_x";
153						function = "i2c1";
154						bias-pull-up;
155						drive-strength-microamp = <3000>;
156					};
157				};
158
159				i2c1_a_pins: i2c1-a {
160					mux {
161						groups = "i2c1_sck_a",
162							 "i2c1_sda_a";
163						function = "i2c1";
164						bias-pull-up;
165						drive-strength-microamp = <3000>;
166					};
167				};
168
169				i2c2_x0_pins: i2c2-x0 {
170					mux {
171						groups = "i2c2_sck_x0",
172							 "i2c2_sda_x1";
173						function = "i2c2";
174						bias-pull-up;
175						drive-strength-microamp = <3000>;
176					};
177				};
178
179				i2c2_x15_pins: i2c2-x15 {
180					mux {
181						groups = "i2c2_sck_x15",
182							 "i2c2_sda_x16";
183						function = "i2c2";
184						bias-pull-up;
185						drive-strength-microamp = <3000>;
186					};
187				};
188
189				i2c2_a4_pins: i2c2-a4 {
190					mux {
191						groups = "i2c2_sck_a4",
192							 "i2c2_sda_a5";
193						function = "i2c2";
194						bias-pull-up;
195						drive-strength-microamp = <3000>;
196					};
197				};
198
199				i2c2_a8_pins: i2c2-a8 {
200					mux {
201						groups = "i2c2_sck_a8",
202							 "i2c2_sda_a9";
203						function = "i2c2";
204						bias-pull-up;
205						drive-strength-microamp = <3000>;
206					};
207				};
208
209				i2c3_x_pins: i2c3-x {
210					mux {
211						groups = "i2c3_sck_x",
212							 "i2c3_sda_x";
213						function = "i2c3";
214						bias-pull-up;
215						drive-strength-microamp = <3000>;
216					};
217				};
218
219				i2c3_f_pins: i2c3-f {
220					mux {
221						groups = "i2c3_sck_f",
222							 "i2c3_sda_f";
223						function = "i2c3";
224						bias-pull-up;
225						drive-strength-microamp = <3000>;
226					};
227				};
228
229				uart_a_pins: uart-a {
230					mux {
231						groups = "uart_a_tx",
232							 "uart_a_rx";
233						function = "uart_a";
234					};
235				};
236
237				uart_a_cts_rts_pins: uart-a-cts-rts {
238					mux {
239						groups = "uart_a_cts",
240							 "uart_a_rts";
241						function = "uart_a";
242						bias-pull-down;
243					};
244				};
245
246				sdio_pins: sdio {
247					mux0 {
248						groups = "sdcard_d0_x",
249							 "sdcard_d1_x",
250							 "sdcard_d2_x",
251							 "sdcard_d3_x",
252							 "sdcard_cmd_x";
253						function = "sdcard";
254						bias-pull-up;
255					};
256
257					mux1 {
258						groups = "sdcard_clk_x";
259						function = "sdcard";
260						bias-disable;
261					};
262				};
263
264				sdio_clk_gate_pins: sdio-clk-gate {
265					mux {
266						groups = "sdcard_clk_x";
267						function = "sdcard";
268						bias-pull-down;
269					};
270				};
271
272				spifc_pins: spifc {
273					mux {
274						groups = "spif_mo",
275							 "spif_mi",
276							 "spif_clk",
277							 "spif_cs",
278							 "spif_hold_n",
279							 "spif_wp_n";
280						function = "spif";
281					};
282				};
283			};
284
285			gpio_intc: interrupt-controller@440 {
286				compatible = "amlogic,meson-a1-gpio-intc",
287					     "amlogic,meson-gpio-intc";
288				reg = <0x0 0x0440 0x0 0x14>;
289				interrupt-controller;
290				#interrupt-cells = <2>;
291				amlogic,channel-interrupts =
292					<49 50 51 52 53 54 55 56>;
293			};
294
295			clkc_periphs: clock-controller@800 {
296				compatible = "amlogic,a1-peripherals-clkc";
297				reg = <0 0x800 0 0x104>;
298				#clock-cells = <1>;
299				clocks = <&clkc_pll CLKID_FCLK_DIV2>,
300					 <&clkc_pll CLKID_FCLK_DIV3>,
301					 <&clkc_pll CLKID_FCLK_DIV5>,
302					 <&clkc_pll CLKID_FCLK_DIV7>,
303					 <&clkc_pll CLKID_HIFI_PLL>,
304					 <&xtal>;
305				clock-names = "fclk_div2", "fclk_div3",
306					      "fclk_div5", "fclk_div7",
307					      "hifi_pll", "xtal";
308			};
309
310			i2c0: i2c@1400 {
311				compatible = "amlogic,meson-axg-i2c";
312				status = "disabled";
313				reg = <0x0 0x1400 0x0 0x20>;
314				interrupts = <GIC_SPI 32 IRQ_TYPE_EDGE_RISING>;
315				#address-cells = <1>;
316				#size-cells = <0>;
317				clocks = <&clkc_periphs CLKID_I2C_M_A>;
318				power-domains = <&pwrc PWRC_I2C_ID>;
319			};
320
321			uart_AO: serial@1c00 {
322				compatible = "amlogic,meson-a1-uart",
323					     "amlogic,meson-ao-uart";
324				reg = <0x0 0x1c00 0x0 0x18>;
325				interrupts = <GIC_SPI 25 IRQ_TYPE_EDGE_RISING>;
326				clocks = <&xtal>, <&xtal>, <&xtal>;
327				clock-names = "xtal", "pclk", "baud";
328				status = "disabled";
329			};
330
331			uart_AO_B: serial@2000 {
332				compatible = "amlogic,meson-a1-uart",
333					     "amlogic,meson-ao-uart";
334				reg = <0x0 0x2000 0x0 0x18>;
335				interrupts = <GIC_SPI 26 IRQ_TYPE_EDGE_RISING>;
336				clocks = <&xtal>, <&xtal>, <&xtal>;
337				clock-names = "xtal", "pclk", "baud";
338				status = "disabled";
339			};
340
341			saradc: adc@2c00 {
342				compatible = "amlogic,meson-g12a-saradc",
343					"amlogic,meson-saradc";
344				reg = <0x0 0x2c00 0x0 0x48>;
345				#io-channel-cells = <1>;
346				power-domains = <&pwrc PWRC_I2C_ID>;
347				interrupts = <GIC_SPI 35 IRQ_TYPE_EDGE_RISING>;
348				clocks = <&xtal>,
349					<&clkc_periphs CLKID_SARADC_EN>,
350					<&clkc_periphs CLKID_SARADC>,
351					<&clkc_periphs CLKID_SARADC_SEL>;
352				clock-names = "clkin", "core",
353					"adc_clk", "adc_sel";
354				status = "disabled";
355			};
356
357			i2c1: i2c@5c00 {
358				compatible = "amlogic,meson-axg-i2c";
359				status = "disabled";
360				reg = <0x0 0x5c00 0x0 0x20>;
361				interrupts = <GIC_SPI 68 IRQ_TYPE_EDGE_RISING>;
362				#address-cells = <1>;
363				#size-cells = <0>;
364				clocks = <&clkc_periphs CLKID_I2C_M_B>;
365				power-domains = <&pwrc PWRC_I2C_ID>;
366			};
367
368			i2c2: i2c@6800 {
369				compatible = "amlogic,meson-axg-i2c";
370				status = "disabled";
371				reg = <0x0 0x6800 0x0 0x20>;
372				interrupts = <GIC_SPI 76 IRQ_TYPE_EDGE_RISING>;
373				#address-cells = <1>;
374				#size-cells = <0>;
375				clocks = <&clkc_periphs CLKID_I2C_M_C>;
376				power-domains = <&pwrc PWRC_I2C_ID>;
377			};
378
379			i2c3: i2c@6c00 {
380				compatible = "amlogic,meson-axg-i2c";
381				status = "disabled";
382				reg = <0x0 0x6c00 0x0 0x20>;
383				interrupts = <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>;
384				#address-cells = <1>;
385				#size-cells = <0>;
386				clocks = <&clkc_periphs CLKID_I2C_M_D>;
387				power-domains = <&pwrc PWRC_I2C_ID>;
388			};
389
390			usb2_phy1: phy@4000 {
391				compatible = "amlogic,a1-usb2-phy";
392				clocks = <&clkc_periphs CLKID_USB_PHY_IN>;
393				clock-names = "xtal";
394				reg = <0x0 0x4000 0x0 0x60>;
395				resets = <&reset RESET_USBPHY>;
396				reset-names = "phy";
397				#phy-cells = <0>;
398				power-domains = <&pwrc PWRC_USB_ID>;
399			};
400
401			hwrng: rng@5118 {
402				compatible = "amlogic,meson-rng";
403				reg = <0x0 0x5118 0x0 0x4>;
404				power-domains = <&pwrc PWRC_OTP_ID>;
405			};
406
407			sec_AO: ao-secure@5a20 {
408				compatible = "amlogic,meson-gx-ao-secure", "syscon";
409				reg = <0x0 0x5a20 0x0 0x140>;
410				amlogic,has-chip-id;
411			};
412
413			clkc_pll: pll-clock-controller@7c80 {
414				compatible = "amlogic,a1-pll-clkc";
415				reg = <0 0x7c80 0 0x18c>;
416				#clock-cells = <1>;
417				clocks = <&clkc_periphs CLKID_FIXPLL_IN>,
418					 <&clkc_periphs CLKID_HIFIPLL_IN>;
419				clock-names = "fixpll_in", "hifipll_in";
420			};
421
422			sd_emmc: sd@10000 {
423				compatible = "amlogic,meson-axg-mmc";
424				reg = <0x0 0x10000 0x0 0x800>;
425				interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
426				clocks = <&clkc_periphs CLKID_SD_EMMC_A>,
427					 <&clkc_periphs CLKID_SD_EMMC>,
428					 <&clkc_pll CLKID_FCLK_DIV2>;
429				clock-names = "core",
430					      "clkin0",
431					      "clkin1";
432				assigned-clocks = <&clkc_periphs CLKID_SD_EMMC_SEL2>;
433				assigned-clock-parents = <&xtal>;
434				resets = <&reset RESET_SD_EMMC_A>;
435				power-domains = <&pwrc PWRC_SD_EMMC_ID>;
436				status = "disabled";
437			};
438		};
439
440		usb: usb@fe004400 {
441			status = "disabled";
442			compatible = "amlogic,meson-a1-usb-ctrl";
443			reg = <0x0 0xfe004400 0x0 0xa0>;
444			interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
445			#address-cells = <2>;
446			#size-cells = <2>;
447			ranges;
448
449			clocks = <&clkc_periphs CLKID_USB_CTRL>,
450				 <&clkc_periphs CLKID_USB_BUS>,
451				 <&clkc_periphs CLKID_USB_CTRL_IN>;
452			clock-names = "usb_ctrl", "usb_bus", "xtal_usb_ctrl";
453			assigned-clocks = <&clkc_periphs CLKID_USB_BUS>;
454			assigned-clock-rates = <64000000>;
455			resets = <&reset RESET_USBCTRL>;
456			reset-name = "usb_ctrl";
457
458			dr_mode = "otg";
459
460			phys = <&usb2_phy1>;
461			phy-names = "usb2-phy1";
462
463			dwc3: usb@ff400000 {
464				compatible = "snps,dwc3";
465				reg = <0x0 0xff400000 0x0 0x100000>;
466				interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
467				dr_mode = "host";
468				snps,dis_u2_susphy_quirk;
469				snps,quirk-frame-length-adjustment = <0x20>;
470				snps,parkmode-disable-ss-quirk;
471			};
472
473			dwc2: usb@ff500000 {
474				compatible = "amlogic,meson-a1-usb", "snps,dwc2";
475				reg = <0x0 0xff500000 0x0 0x40000>;
476				interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
477				phys = <&usb2_phy1>;
478				phy-names = "usb2-phy";
479				clocks = <&clkc_periphs CLKID_USB_PHY>;
480				clock-names = "otg";
481				dr_mode = "peripheral";
482				g-rx-fifo-size = <192>;
483				g-np-tx-fifo-size = <128>;
484				g-tx-fifo-size = <128 128 16 16 16>;
485			};
486		};
487
488		gic: interrupt-controller@ff901000 {
489			compatible = "arm,gic-400";
490			reg = <0x0 0xff901000 0x0 0x1000>,
491			      <0x0 0xff902000 0x0 0x2000>,
492			      <0x0 0xff904000 0x0 0x2000>,
493			      <0x0 0xff906000 0x0 0x2000>;
494			interrupt-controller;
495			interrupts = <GIC_PPI 9
496				(GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_HIGH)>;
497			#interrupt-cells = <3>;
498			#address-cells = <0>;
499		};
500	};
501
502	timer {
503		compatible = "arm,armv8-timer";
504		interrupts = <GIC_PPI 13
505			(GIC_CPU_MASK_RAW(0xff) | IRQ_TYPE_LEVEL_LOW)>,
506			     <GIC_PPI 14
507			(GIC_CPU_MASK_RAW(0xff) | IRQ_TYPE_LEVEL_LOW)>,
508			     <GIC_PPI 11
509			(GIC_CPU_MASK_RAW(0xff) | IRQ_TYPE_LEVEL_LOW)>,
510			     <GIC_PPI 10
511			(GIC_CPU_MASK_RAW(0xff) | IRQ_TYPE_LEVEL_LOW)>;
512	};
513
514	xtal: xtal-clk {
515		compatible = "fixed-clock";
516		clock-frequency = <24000000>;
517		clock-output-names = "xtal";
518		#clock-cells = <0>;
519	};
520};
521