1*724ba675SRob Herring// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2*724ba675SRob Herring/*
3*724ba675SRob Herring * Device Tree Include file for Marvell 98dx3236 family SoC
4*724ba675SRob Herring *
5*724ba675SRob Herring * Copyright (C) 2016 Allied Telesis Labs
6*724ba675SRob Herring *
7*724ba675SRob Herring * Contains definitions specific to the 98dx3236 SoC that are not
8*724ba675SRob Herring * common to all Armada XP SoCs.
9*724ba675SRob Herring */
10*724ba675SRob Herring
11*724ba675SRob Herring#include "armada-370-xp.dtsi"
12*724ba675SRob Herring
13*724ba675SRob Herring/ {
14*724ba675SRob Herring	#address-cells = <2>;
15*724ba675SRob Herring	#size-cells = <2>;
16*724ba675SRob Herring
17*724ba675SRob Herring	model = "Marvell 98DX3236 SoC";
18*724ba675SRob Herring	compatible = "marvell,armadaxp-98dx3236", "marvell,armada-370-xp";
19*724ba675SRob Herring
20*724ba675SRob Herring	aliases {
21*724ba675SRob Herring		gpio0 = &gpio0;
22*724ba675SRob Herring		gpio1 = &gpio1;
23*724ba675SRob Herring		gpio2 = &gpio2;
24*724ba675SRob Herring	};
25*724ba675SRob Herring
26*724ba675SRob Herring	cpus {
27*724ba675SRob Herring		#address-cells = <1>;
28*724ba675SRob Herring		#size-cells = <0>;
29*724ba675SRob Herring		enable-method = "marvell,98dx3236-smp";
30*724ba675SRob Herring
31*724ba675SRob Herring		cpu@0 {
32*724ba675SRob Herring			device_type = "cpu";
33*724ba675SRob Herring			compatible = "marvell,sheeva-v7";
34*724ba675SRob Herring			reg = <0>;
35*724ba675SRob Herring			clocks = <&cpuclk 0>;
36*724ba675SRob Herring			clock-latency = <1000000>;
37*724ba675SRob Herring		};
38*724ba675SRob Herring	};
39*724ba675SRob Herring
40*724ba675SRob Herring	soc {
41*724ba675SRob Herring		compatible = "marvell,armadaxp-mbus", "simple-bus";
42*724ba675SRob Herring
43*724ba675SRob Herring		ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000
44*724ba675SRob Herring			  MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
45*724ba675SRob Herring			  MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x1000000
46*724ba675SRob Herring			  MBUS_ID(0x03, 0x00) 0 0 0xa8000000 0x4000000
47*724ba675SRob Herring			  MBUS_ID(0x08, 0x00) 0 0 0xac000000 0x100000>;
48*724ba675SRob Herring
49*724ba675SRob Herring		bootrom {
50*724ba675SRob Herring			compatible = "marvell,bootrom";
51*724ba675SRob Herring			reg = <MBUS_ID(0x01, 0x1d) 0 0x100000>;
52*724ba675SRob Herring		};
53*724ba675SRob Herring
54*724ba675SRob Herring		/*
55*724ba675SRob Herring		 * 98DX3236 has 1 x1 PCIe unit Gen2.0
56*724ba675SRob Herring		 */
57*724ba675SRob Herring		pciec: pcie@82000000 {
58*724ba675SRob Herring			compatible = "marvell,armada-xp-pcie";
59*724ba675SRob Herring			status = "disabled";
60*724ba675SRob Herring			device_type = "pci";
61*724ba675SRob Herring
62*724ba675SRob Herring			#address-cells = <3>;
63*724ba675SRob Herring			#size-cells = <2>;
64*724ba675SRob Herring
65*724ba675SRob Herring			msi-parent = <&mpic>;
66*724ba675SRob Herring			bus-range = <0x00 0xff>;
67*724ba675SRob Herring
68*724ba675SRob Herring			ranges =
69*724ba675SRob Herring			       <0x82000000 0 0x40000 MBUS_ID(0xf0, 0x01) 0x40000 0 0x00002000   /* Port 0.0 registers */
70*724ba675SRob Herring				0x82000000 0x1 0       MBUS_ID(0x04, 0xe8) 0 1 0 /* Port 0.0 MEM */
71*724ba675SRob Herring				0x81000000 0x1 0       MBUS_ID(0x04, 0xe0) 0 1 0 /* Port 0.0 IO  */>;
72*724ba675SRob Herring
73*724ba675SRob Herring			pcie1: pcie@1,0 {
74*724ba675SRob Herring				device_type = "pci";
75*724ba675SRob Herring				assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
76*724ba675SRob Herring				reg = <0x0800 0 0 0 0>;
77*724ba675SRob Herring				#address-cells = <3>;
78*724ba675SRob Herring				#size-cells = <2>;
79*724ba675SRob Herring				interrupt-names = "intx";
80*724ba675SRob Herring				interrupts-extended = <&mpic 58>;
81*724ba675SRob Herring				#interrupt-cells = <1>;
82*724ba675SRob Herring				ranges = <0x82000000 0 0 0x82000000 0x1 0 1 0
83*724ba675SRob Herring					  0x81000000 0 0 0x81000000 0x1 0 1 0>;
84*724ba675SRob Herring				bus-range = <0x00 0xff>;
85*724ba675SRob Herring				interrupt-map-mask = <0 0 0 7>;
86*724ba675SRob Herring				interrupt-map = <0 0 0 1 &pcie1_intc 0>,
87*724ba675SRob Herring						<0 0 0 2 &pcie1_intc 1>,
88*724ba675SRob Herring						<0 0 0 3 &pcie1_intc 2>,
89*724ba675SRob Herring						<0 0 0 4 &pcie1_intc 3>;
90*724ba675SRob Herring				marvell,pcie-port = <0>;
91*724ba675SRob Herring				marvell,pcie-lane = <0>;
92*724ba675SRob Herring				clocks = <&gateclk 5>;
93*724ba675SRob Herring				status = "disabled";
94*724ba675SRob Herring
95*724ba675SRob Herring				pcie1_intc: interrupt-controller {
96*724ba675SRob Herring					interrupt-controller;
97*724ba675SRob Herring					#interrupt-cells = <1>;
98*724ba675SRob Herring				};
99*724ba675SRob Herring			};
100*724ba675SRob Herring		};
101*724ba675SRob Herring
102*724ba675SRob Herring		internal-regs {
103*724ba675SRob Herring			sdramc: sdramc@1400 {
104*724ba675SRob Herring				compatible = "marvell,armada-xp-sdram-controller";
105*724ba675SRob Herring				reg = <0x1400 0x500>;
106*724ba675SRob Herring			};
107*724ba675SRob Herring
108*724ba675SRob Herring			L2: l2-cache@8000 {
109*724ba675SRob Herring				compatible = "marvell,aurora-system-cache";
110*724ba675SRob Herring				reg = <0x08000 0x1000>;
111*724ba675SRob Herring				cache-id-part = <0x100>;
112*724ba675SRob Herring				cache-level = <2>;
113*724ba675SRob Herring				cache-unified;
114*724ba675SRob Herring				wt-override;
115*724ba675SRob Herring			};
116*724ba675SRob Herring
117*724ba675SRob Herring			gpio0: gpio@18100 {
118*724ba675SRob Herring				compatible = "marvell,orion-gpio";
119*724ba675SRob Herring				reg = <0x18100 0x40>;
120*724ba675SRob Herring				ngpios = <32>;
121*724ba675SRob Herring				gpio-controller;
122*724ba675SRob Herring				#gpio-cells = <2>;
123*724ba675SRob Herring				interrupt-controller;
124*724ba675SRob Herring				#interrupt-cells = <2>;
125*724ba675SRob Herring				interrupts = <82>, <83>, <84>, <85>;
126*724ba675SRob Herring			};
127*724ba675SRob Herring
128*724ba675SRob Herring			/* does not exist */
129*724ba675SRob Herring			gpio1: gpio@18140 {
130*724ba675SRob Herring				compatible = "marvell,orion-gpio";
131*724ba675SRob Herring				reg = <0x18140 0x40>;
132*724ba675SRob Herring				status = "disabled";
133*724ba675SRob Herring			};
134*724ba675SRob Herring
135*724ba675SRob Herring			gpio2: gpio@18180 { /* rework some properties */
136*724ba675SRob Herring				compatible = "marvell,orion-gpio";
137*724ba675SRob Herring				reg = <0x18180 0x40>;
138*724ba675SRob Herring				ngpios = <1>; /* only gpio #32 */
139*724ba675SRob Herring				gpio-controller;
140*724ba675SRob Herring				#gpio-cells = <2>;
141*724ba675SRob Herring				interrupt-controller;
142*724ba675SRob Herring				#interrupt-cells = <2>;
143*724ba675SRob Herring				interrupts = <87>;
144*724ba675SRob Herring			};
145*724ba675SRob Herring
146*724ba675SRob Herring			systemc: system-controller@18200 {
147*724ba675SRob Herring				compatible = "marvell,armada-370-xp-system-controller";
148*724ba675SRob Herring				reg = <0x18200 0x500>;
149*724ba675SRob Herring			};
150*724ba675SRob Herring
151*724ba675SRob Herring			gateclk: clock-gating-control@18220 {
152*724ba675SRob Herring				compatible = "marvell,mv98dx3236-gating-clock";
153*724ba675SRob Herring				reg = <0x18220 0x4>;
154*724ba675SRob Herring				clocks = <&coreclk 0>;
155*724ba675SRob Herring				#clock-cells = <1>;
156*724ba675SRob Herring			};
157*724ba675SRob Herring
158*724ba675SRob Herring			cpuclk: clock-complex@18700 {
159*724ba675SRob Herring				#clock-cells = <1>;
160*724ba675SRob Herring				compatible = "marvell,mv98dx3236-cpu-clock";
161*724ba675SRob Herring				reg = <0x18700 0x24>, <0x1c054 0x10>;
162*724ba675SRob Herring				clocks = <&coreclk 1>;
163*724ba675SRob Herring			};
164*724ba675SRob Herring
165*724ba675SRob Herring			corediv-clock@18740 {
166*724ba675SRob Herring				status = "disabled";
167*724ba675SRob Herring			};
168*724ba675SRob Herring
169*724ba675SRob Herring			cpu-config@21000 {
170*724ba675SRob Herring				compatible = "marvell,armada-xp-cpu-config";
171*724ba675SRob Herring				reg = <0x21000 0x8>;
172*724ba675SRob Herring			};
173*724ba675SRob Herring
174*724ba675SRob Herring			ethernet@70000 {
175*724ba675SRob Herring				compatible = "marvell,armada-xp-neta";
176*724ba675SRob Herring			};
177*724ba675SRob Herring
178*724ba675SRob Herring			ethernet@74000 {
179*724ba675SRob Herring				compatible = "marvell,armada-xp-neta";
180*724ba675SRob Herring			};
181*724ba675SRob Herring
182*724ba675SRob Herring			xor1: xor@f0800 {
183*724ba675SRob Herring				compatible = "marvell,orion-xor";
184*724ba675SRob Herring				reg = <0xf0800 0x100
185*724ba675SRob Herring				       0xf0a00 0x100>;
186*724ba675SRob Herring				clocks = <&gateclk 22>;
187*724ba675SRob Herring				status = "okay";
188*724ba675SRob Herring
189*724ba675SRob Herring				xor10 {
190*724ba675SRob Herring					interrupts = <51>;
191*724ba675SRob Herring					dmacap,memcpy;
192*724ba675SRob Herring					dmacap,xor;
193*724ba675SRob Herring				};
194*724ba675SRob Herring				xor11 {
195*724ba675SRob Herring					interrupts = <52>;
196*724ba675SRob Herring					dmacap,memcpy;
197*724ba675SRob Herring					dmacap,xor;
198*724ba675SRob Herring					dmacap,memset;
199*724ba675SRob Herring				};
200*724ba675SRob Herring			};
201*724ba675SRob Herring
202*724ba675SRob Herring			nand_controller: nand-controller@d0000 {
203*724ba675SRob Herring				clocks = <&dfx_coredivclk 0>;
204*724ba675SRob Herring			};
205*724ba675SRob Herring
206*724ba675SRob Herring			xor0: xor@f0900 {
207*724ba675SRob Herring				compatible = "marvell,orion-xor";
208*724ba675SRob Herring				reg = <0xF0900 0x100
209*724ba675SRob Herring				       0xF0B00 0x100>;
210*724ba675SRob Herring				clocks = <&gateclk 28>;
211*724ba675SRob Herring				status = "okay";
212*724ba675SRob Herring
213*724ba675SRob Herring				xor00 {
214*724ba675SRob Herring					interrupts = <94>;
215*724ba675SRob Herring					dmacap,memcpy;
216*724ba675SRob Herring					dmacap,xor;
217*724ba675SRob Herring				};
218*724ba675SRob Herring				xor01 {
219*724ba675SRob Herring					interrupts = <95>;
220*724ba675SRob Herring					dmacap,memcpy;
221*724ba675SRob Herring					dmacap,xor;
222*724ba675SRob Herring					dmacap,memset;
223*724ba675SRob Herring				};
224*724ba675SRob Herring			};
225*724ba675SRob Herring		};
226*724ba675SRob Herring
227*724ba675SRob Herring		dfx: dfx-server@ac000000 {
228*724ba675SRob Herring			compatible = "marvell,dfx-server", "simple-bus";
229*724ba675SRob Herring			#address-cells = <1>;
230*724ba675SRob Herring			#size-cells = <1>;
231*724ba675SRob Herring			ranges = <0 MBUS_ID(0x08, 0x00) 0 0x100000>;
232*724ba675SRob Herring			reg = <MBUS_ID(0x08, 0x00) 0 0x100000>;
233*724ba675SRob Herring
234*724ba675SRob Herring			coreclk: mvebu-sar@f8204 {
235*724ba675SRob Herring				compatible = "marvell,mv98dx3236-core-clock";
236*724ba675SRob Herring				reg = <0xf8204 0x4>;
237*724ba675SRob Herring				#clock-cells = <1>;
238*724ba675SRob Herring			};
239*724ba675SRob Herring
240*724ba675SRob Herring			dfx_coredivclk: corediv-clock@f8268 {
241*724ba675SRob Herring				compatible = "marvell,mv98dx3236-corediv-clock";
242*724ba675SRob Herring				reg = <0xf8268 0xc>;
243*724ba675SRob Herring				#clock-cells = <1>;
244*724ba675SRob Herring				clocks = <&mainpll>;
245*724ba675SRob Herring				clock-output-names = "nand";
246*724ba675SRob Herring			};
247*724ba675SRob Herring		};
248*724ba675SRob Herring
249*724ba675SRob Herring		switch: switch@a8000000 {
250*724ba675SRob Herring			compatible = "simple-bus";
251*724ba675SRob Herring			#address-cells = <1>;
252*724ba675SRob Herring			#size-cells = <1>;
253*724ba675SRob Herring			ranges = <0 MBUS_ID(0x03, 0x00) 0 0x100000>;
254*724ba675SRob Herring
255*724ba675SRob Herring			pp0: packet-processor@0 {
256*724ba675SRob Herring				compatible = "marvell,prestera-98dx3236", "marvell,prestera";
257*724ba675SRob Herring				reg = <0 0x4000000>;
258*724ba675SRob Herring				interrupts = <33>, <34>, <35>;
259*724ba675SRob Herring				dfx = <&dfx>;
260*724ba675SRob Herring			};
261*724ba675SRob Herring		};
262*724ba675SRob Herring	};
263*724ba675SRob Herring
264*724ba675SRob Herring	clocks {
265*724ba675SRob Herring		/* 25 MHz reference crystal */
266*724ba675SRob Herring		refclk: oscillator {
267*724ba675SRob Herring			compatible = "fixed-clock";
268*724ba675SRob Herring			#clock-cells = <0>;
269*724ba675SRob Herring			clock-frequency = <25000000>;
270*724ba675SRob Herring		};
271*724ba675SRob Herring	};
272*724ba675SRob Herring};
273*724ba675SRob Herring
274*724ba675SRob Herring&i2c0 {
275*724ba675SRob Herring	compatible = "marvell,mv78230-i2c", "marvell,mv64xxx-i2c";
276*724ba675SRob Herring	reg = <0x11000 0x100>;
277*724ba675SRob Herring	pinctrl-names = "default";
278*724ba675SRob Herring	pinctrl-0 = <&i2c0_pins>;
279*724ba675SRob Herring};
280*724ba675SRob Herring
281*724ba675SRob Herring&mpic {
282*724ba675SRob Herring	reg = <0x20a00 0x2d0>, <0x21070 0x58>;
283*724ba675SRob Herring};
284*724ba675SRob Herring
285*724ba675SRob Herring&rtc {
286*724ba675SRob Herring	status = "disabled";
287*724ba675SRob Herring};
288*724ba675SRob Herring
289*724ba675SRob Herring&timer {
290*724ba675SRob Herring	compatible = "marvell,armada-xp-timer";
291*724ba675SRob Herring	clocks = <&coreclk 2>, <&refclk>;
292*724ba675SRob Herring	clock-names = "nbclk", "fixed";
293*724ba675SRob Herring};
294*724ba675SRob Herring
295*724ba675SRob Herring&watchdog {
296*724ba675SRob Herring	compatible = "marvell,armada-xp-wdt";
297*724ba675SRob Herring	clocks = <&coreclk 2>, <&refclk>;
298*724ba675SRob Herring	clock-names = "nbclk", "fixed";
299*724ba675SRob Herring	interrupts = <93>, <38>;
300*724ba675SRob Herring};
301*724ba675SRob Herring
302*724ba675SRob Herring&cpurst {
303*724ba675SRob Herring	reg = <0x20800 0x20>;
304*724ba675SRob Herring};
305*724ba675SRob Herring
306*724ba675SRob Herring&usb0 {
307*724ba675SRob Herring	clocks = <&gateclk 18>;
308*724ba675SRob Herring};
309*724ba675SRob Herring
310*724ba675SRob Herring&usb1 {
311*724ba675SRob Herring	clocks = <&gateclk 19>;
312*724ba675SRob Herring};
313*724ba675SRob Herring
314*724ba675SRob Herring&pinctrl {
315*724ba675SRob Herring	compatible = "marvell,98dx3236-pinctrl";
316*724ba675SRob Herring
317*724ba675SRob Herring	nand_pins: nand-pins {
318*724ba675SRob Herring		marvell,pins = "mpp20", "mpp21", "mpp22",
319*724ba675SRob Herring			       "mpp23", "mpp24", "mpp25",
320*724ba675SRob Herring			       "mpp26", "mpp27", "mpp28",
321*724ba675SRob Herring			       "mpp29", "mpp30";
322*724ba675SRob Herring		marvell,function = "dev";
323*724ba675SRob Herring	};
324*724ba675SRob Herring
325*724ba675SRob Herring	nand_rb: nand-rb {
326*724ba675SRob Herring		marvell,pins = "mpp19";
327*724ba675SRob Herring		marvell,function = "nand";
328*724ba675SRob Herring	};
329*724ba675SRob Herring
330*724ba675SRob Herring	spi0_pins: spi0-pins {
331*724ba675SRob Herring		marvell,pins = "mpp0", "mpp1",
332*724ba675SRob Herring			       "mpp2", "mpp3";
333*724ba675SRob Herring		marvell,function = "spi0";
334*724ba675SRob Herring	};
335*724ba675SRob Herring
336*724ba675SRob Herring	i2c0_pins: i2c-pins-0 {
337*724ba675SRob Herring		marvell,pins = "mpp14", "mpp15";
338*724ba675SRob Herring		marvell,function = "i2c0";
339*724ba675SRob Herring	};
340*724ba675SRob Herring};
341*724ba675SRob Herring
342*724ba675SRob Herring&spi0 {
343*724ba675SRob Herring	compatible = "marvell,armada-xp-spi", "marvell,orion-spi";
344*724ba675SRob Herring	pinctrl-0 = <&spi0_pins>;
345*724ba675SRob Herring	pinctrl-names = "default";
346*724ba675SRob Herring};
347*724ba675SRob Herring
348*724ba675SRob Herring&sdio {
349*724ba675SRob Herring	status = "disabled";
350*724ba675SRob Herring};
351*724ba675SRob Herring
352*724ba675SRob Herring&uart0 {
353*724ba675SRob Herring	compatible = "marvell,armada-38x-uart";
354*724ba675SRob Herring};
355*724ba675SRob Herring
356*724ba675SRob Herring&uart1 {
357*724ba675SRob Herring	compatible = "marvell,armada-38x-uart";
358*724ba675SRob Herring};
359*724ba675SRob Herring
360