1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Device Tree For AC5.
4 *
5 * Copyright (C) 2021 Marvell
6 * Copyright (C) 2022 Allied Telesis Labs
7 */
8
9#include <dt-bindings/gpio/gpio.h>
10#include <dt-bindings/interrupt-controller/arm-gic.h>
11
12/ {
13	model = "Marvell AC5 SoC";
14	compatible = "marvell,ac5";
15	interrupt-parent = <&gic>;
16	#address-cells = <2>;
17	#size-cells = <2>;
18
19	cpus {
20		#address-cells = <2>;
21		#size-cells = <0>;
22
23		cpu-map {
24			cluster0 {
25				core0 {
26					cpu = <&cpu0>;
27				};
28				core1 {
29					cpu = <&cpu1>;
30				};
31			};
32		};
33
34		cpu0: cpu@0 {
35			device_type = "cpu";
36			compatible = "arm,cortex-a55";
37			reg = <0x0 0x0>;
38			enable-method = "psci";
39			next-level-cache = <&l2>;
40		};
41
42		cpu1: cpu@1 {
43			device_type = "cpu";
44			compatible = "arm,cortex-a55";
45			reg = <0x0 0x100>;
46			enable-method = "psci";
47			next-level-cache = <&l2>;
48		};
49
50		l2: l2-cache {
51			compatible = "cache";
52			cache-level = <2>;
53		};
54	};
55
56	psci {
57		compatible = "arm,psci-0.2";
58		method = "smc";
59	};
60
61	timer {
62		compatible = "arm,armv8-timer";
63		interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>,
64			     <GIC_PPI 8 IRQ_TYPE_LEVEL_HIGH>,
65			     <GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH>,
66			     <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
67	};
68
69	pmu {
70		compatible = "arm,armv8-pmuv3";
71		interrupts = <GIC_PPI 12 IRQ_TYPE_LEVEL_HIGH>;
72	};
73
74	soc {
75		compatible = "simple-bus";
76		#address-cells = <2>;
77		#size-cells = <2>;
78		ranges;
79		dma-ranges;
80
81		internal-regs@7f000000 {
82			#address-cells = <1>;
83			#size-cells = <1>;
84			compatible = "simple-bus";
85			/* 16M internal register @ 0x7f00_0000 */
86			ranges = <0x0 0x0 0x7f000000 0x1000000>;
87			dma-coherent;
88
89			uart0: serial@12000 {
90				compatible = "snps,dw-apb-uart";
91				reg = <0x12000 0x100>;
92				reg-shift = <2>;
93				interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
94				reg-io-width = <1>;
95				clocks = <&cnm_clock>;
96				status = "okay";
97			};
98
99			uart1: serial@12100 {
100				compatible = "snps,dw-apb-uart";
101				reg = <0x11000 0x100>;
102				reg-shift = <2>;
103				interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
104				reg-io-width = <1>;
105				clocks = <&cnm_clock>;
106				status = "disabled";
107			};
108
109			uart2: serial@12200 {
110				compatible = "snps,dw-apb-uart";
111				reg = <0x12200 0x100>;
112				reg-shift = <2>;
113				interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
114				reg-io-width = <1>;
115				clocks = <&cnm_clock>;
116				status = "disabled";
117			};
118
119			uart3: serial@12300 {
120				compatible = "snps,dw-apb-uart";
121				reg = <0x12300 0x100>;
122				reg-shift = <2>;
123				interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
124				reg-io-width = <1>;
125				clocks = <&cnm_clock>;
126				status = "disabled";
127			};
128
129			mdio: mdio@22004 {
130				#address-cells = <1>;
131				#size-cells = <0>;
132				compatible = "marvell,orion-mdio";
133				reg = <0x22004 0x4>;
134				clocks = <&cnm_clock>;
135			};
136
137			i2c0: i2c@11000{
138				compatible = "marvell,mv78230-i2c";
139				reg = <0x11000 0x20>;
140				#address-cells = <1>;
141				#size-cells = <0>;
142
143				clocks = <&cnm_clock>;
144				clock-names = "core";
145				interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
146				clock-frequency=<100000>;
147
148				pinctrl-names = "default", "gpio";
149				pinctrl-0 = <&i2c0_pins>;
150				pinctrl-1 = <&i2c0_gpio>;
151				scl-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
152				sda-gpios = <&gpio0 27 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
153				status = "disabled";
154			};
155
156			i2c1: i2c@11100{
157				compatible = "marvell,mv78230-i2c";
158				reg = <0x11100 0x20>;
159				#address-cells = <1>;
160				#size-cells = <0>;
161
162				clocks = <&cnm_clock>;
163				clock-names = "core";
164				interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
165				clock-frequency=<100000>;
166
167				pinctrl-names = "default", "gpio";
168				pinctrl-0 = <&i2c1_pins>;
169				pinctrl-1 = <&i2c1_gpio>;
170				scl-gpios = <&gpio0 20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
171				sda-gpios = <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
172				status = "disabled";
173			};
174
175			gpio0: gpio@18100 {
176				compatible = "marvell,orion-gpio";
177				reg = <0x18100 0x40>;
178				ngpios = <32>;
179				gpio-controller;
180				#gpio-cells = <2>;
181				gpio-ranges = <&pinctrl0 0 0 32>;
182				marvell,pwm-offset = <0x1f0>;
183				interrupt-controller;
184				#interrupt-cells = <2>;
185				interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
186					     <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>,
187					     <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>,
188					     <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
189			};
190
191			gpio1: gpio@18140 {
192				reg = <0x18140 0x40>;
193				compatible = "marvell,orion-gpio";
194				ngpios = <14>;
195				gpio-controller;
196				#gpio-cells = <2>;
197				gpio-ranges = <&pinctrl0 0 32 14>;
198				marvell,pwm-offset = <0x1f0>;
199				interrupt-controller;
200				#interrupt-cells = <2>;
201				interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>,
202					     <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
203			};
204		};
205
206		/*
207		 * Dedicated section for devices behind 32bit controllers so we
208		 * can configure specific DMA mapping for them
209		 */
210		behind-32bit-controller@7f000000 {
211			compatible = "simple-bus";
212			#address-cells = <0x2>;
213			#size-cells = <0x2>;
214			ranges = <0x0 0x0 0x0 0x7f000000 0x0 0x1000000>;
215			/* Host phy ram starts at 0x200M */
216			dma-ranges = <0x0 0x0 0x2 0x0 0x1 0x0>;
217			dma-coherent;
218
219			eth0: ethernet@20000 {
220				compatible = "marvell,armada-ac5-neta";
221				reg = <0x0 0x20000 0x0 0x4000>;
222				interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
223				clocks = <&cnm_clock>;
224				phy-mode = "sgmii";
225				status = "disabled";
226			};
227
228			eth1: ethernet@24000 {
229				compatible = "marvell,armada-ac5-neta";
230				reg = <0x0 0x24000 0x0 0x4000>;
231				interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
232				clocks = <&cnm_clock>;
233				phy-mode = "sgmii";
234				status = "disabled";
235			};
236
237			usb0: usb@80000 {
238				compatible = "marvell,orion-ehci";
239				reg = <0x0 0x80000 0x0 0x500>;
240				interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
241				status = "disabled";
242			};
243
244			usb1: usb@a0000 {
245				compatible = "marvell,orion-ehci";
246				reg = <0x0 0xa0000 0x0 0x500>;
247				interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
248				status = "disabled";
249			};
250		};
251
252		pinctrl0: pinctrl@80020100 {
253			compatible = "marvell,ac5-pinctrl";
254			reg = <0 0x80020100 0 0x20>;
255
256			i2c0_pins: i2c0-pins {
257				marvell,pins = "mpp26", "mpp27";
258				marvell,function = "i2c0";
259			};
260
261			i2c0_gpio: i2c0-gpio-pins {
262				marvell,pins = "mpp26", "mpp27";
263				marvell,function = "gpio";
264			};
265
266			i2c1_pins: i2c1-pins {
267				marvell,pins = "mpp20", "mpp21";
268				marvell,function = "i2c1";
269			};
270
271			i2c1_gpio: i2c1-gpio-pins {
272				marvell,pins = "mpp20", "mpp21";
273				marvell,function = "i2c1";
274			};
275		};
276
277		spi0: spi@805a0000 {
278			compatible = "marvell,armada-3700-spi";
279			reg = <0x0 0x805a0000 0x0 0x50>;
280			#address-cells = <0x1>;
281			#size-cells = <0x0>;
282			clocks = <&spi_clock>;
283			interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
284			num-cs = <1>;
285			status = "disabled";
286		};
287
288		spi1: spi@805a8000 {
289			compatible = "marvell,armada-3700-spi";
290			reg = <0x0 0x805a8000 0x0 0x50>;
291			#address-cells = <0x1>;
292			#size-cells = <0x0>;
293			clocks = <&spi_clock>;
294			interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
295			num-cs = <1>;
296			status = "disabled";
297		};
298
299		gic: interrupt-controller@80600000 {
300			compatible = "arm,gic-v3";
301			#interrupt-cells = <3>;
302			interrupt-controller;
303			reg = <0x0 0x80600000 0x0 0x10000>, /* GICD */
304			      <0x0 0x80660000 0x0 0x40000>; /* GICR */
305			interrupts = <GIC_PPI 6 IRQ_TYPE_LEVEL_HIGH>;
306		};
307	};
308
309	clocks {
310		cnm_clock: cnm-clock {
311			compatible = "fixed-clock";
312			#clock-cells = <0>;
313			clock-frequency = <328000000>;
314		};
315
316		spi_clock: spi-clock {
317			compatible = "fixed-clock";
318			#clock-cells = <0>;
319			clock-frequency = <200000000>;
320		};
321	};
322};
323