1/*
2 *  BSD LICENSE
3 *
4 *  Copyright(c) 2017 Broadcom.  All rights reserved.
5 *
6 *  Redistribution and use in source and binary forms, with or without
7 *  modification, are permitted provided that the following conditions
8 *  are met:
9 *
10 *    * Redistributions of source code must retain the above copyright
11 *      notice, this list of conditions and the following disclaimer.
12 *    * Redistributions in binary form must reproduce the above copyright
13 *      notice, this list of conditions and the following disclaimer in
14 *      the documentation and/or other materials provided with the
15 *      distribution.
16 *    * Neither the name of Broadcom Corporation nor the names of its
17 *      contributors may be used to endorse or promote products derived
18 *      from this software without specific prior written permission.
19 *
20 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#include <dt-bindings/interrupt-controller/arm-gic.h>
34#include <dt-bindings/interrupt-controller/irq.h>
35
36/ {
37	compatible = "brcm,hr2";
38	model = "Broadcom Hurricane 2 SoC";
39	interrupt-parent = <&gic>;
40	#address-cells = <1>;
41	#size-cells = <1>;
42
43	cpus {
44		#address-cells = <1>;
45		#size-cells = <0>;
46
47		cpu0: cpu@0 {
48			device_type = "cpu";
49			compatible = "arm,cortex-a9";
50			next-level-cache = <&L2>;
51			reg = <0x0>;
52		};
53	};
54
55	pmu {
56		compatible = "arm,cortex-a9-pmu";
57		interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH
58			      GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
59		interrupt-affinity = <&cpu0>;
60	};
61
62	mpcore@19000000 {
63		compatible = "simple-bus";
64		ranges = <0x00000000 0x19000000 0x00023000>;
65		#address-cells = <1>;
66		#size-cells = <1>;
67
68		a9pll: arm_clk@0 {
69			#clock-cells = <0>;
70			compatible = "brcm,hr2-armpll";
71			clocks = <&osc>;
72			reg = <0x0 0x1000>;
73		};
74
75		timer@20200 {
76			compatible = "arm,cortex-a9-global-timer";
77			reg = <0x20200 0x100>;
78			interrupts = <GIC_PPI 11 IRQ_TYPE_EDGE_RISING>;
79			clocks = <&periph_clk>;
80		};
81
82		twd-timer@20600 {
83			compatible = "arm,cortex-a9-twd-timer";
84			reg = <0x20600 0x20>;
85			interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) |
86						  IRQ_TYPE_EDGE_RISING)>;
87			clocks = <&periph_clk>;
88		};
89
90		twd-watchdog@20620 {
91			compatible = "arm,cortex-a9-twd-wdt";
92			reg = <0x20620 0x20>;
93			interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) |
94						  IRQ_TYPE_EDGE_RISING)>;
95			clocks = <&periph_clk>;
96		};
97
98		gic: interrupt-controller@21000 {
99			compatible = "arm,cortex-a9-gic";
100			#interrupt-cells = <3>;
101			#address-cells = <0>;
102			interrupt-controller;
103			reg = <0x21000 0x1000>,
104			      <0x20100 0x100>;
105		};
106
107		L2: cache-controller@22000 {
108			compatible = "arm,pl310-cache";
109			reg = <0x22000 0x1000>;
110			cache-unified;
111			cache-level = <2>;
112		};
113	};
114
115	clocks {
116		#address-cells = <1>;
117		#size-cells = <1>;
118		ranges;
119
120		osc: oscillator {
121			#clock-cells = <0>;
122			compatible = "fixed-clock";
123			clock-frequency = <25000000>;
124		};
125
126		periph_clk: periph_clk {
127			#clock-cells = <0>;
128			compatible = "fixed-factor-clock";
129			clocks = <&a9pll>;
130			clock-div = <2>;
131			clock-mult = <1>;
132		};
133	};
134
135	axi@18000000 {
136		compatible = "simple-bus";
137		ranges = <0x00000000 0x18000000 0x0011c40c>;
138		#address-cells = <1>;
139		#size-cells = <1>;
140
141		uart0: serial@300 {
142			compatible = "ns16550a";
143			reg = <0x0300 0x100>;
144			interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
145			clocks = <&osc>;
146			status = "disabled";
147		};
148
149		uart1: serial@400 {
150			compatible = "ns16550a";
151			reg = <0x0400 0x100>;
152			interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
153			clocks = <&osc>;
154			status = "disabled";
155		};
156
157		dma@20000 {
158			compatible = "arm,pl330", "arm,primecell";
159			reg = <0x20000 0x1000>;
160			interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
161				     <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
162				     <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
163				     <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
164				     <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
165				     <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
166				     <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
167				     <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
168				     <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
169			#dma-cells = <1>;
170			status = "disabled";
171		};
172
173		amac0: ethernet@22000 {
174			compatible = "brcm,nsp-amac";
175			reg = <0x22000 0x1000>,
176			      <0x110000 0x1000>;
177			reg-names = "amac_base", "idm_base";
178			interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH>;
179			status = "disabled";
180		};
181
182		nand_controller: nand-controller@26000 {
183			compatible = "brcm,nand-iproc", "brcm,brcmnand-v6.1";
184			reg = <0x26000 0x600>,
185			      <0x11b408 0x600>,
186			      <0x026f00 0x20>;
187			reg-names = "nand", "iproc-idm", "iproc-ext";
188			interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
189
190			#address-cells = <1>;
191			#size-cells = <0>;
192
193			brcm,nand-has-wp;
194		};
195
196		gpiob: gpio@30000 {
197			compatible = "brcm,iproc-hr2-gpio", "brcm,iproc-gpio";
198			reg = <0x30000 0x50>;
199			#gpio-cells = <2>;
200			gpio-controller;
201			ngpios = <4>;
202			interrupt-controller;
203			interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
204		};
205
206		pwm: pwm@31000 {
207			compatible = "brcm,iproc-pwm";
208			reg = <0x31000 0x28>;
209			clocks = <&osc>;
210			#pwm-cells = <3>;
211			status = "disabled";
212		};
213
214		rng: rng@33000 {
215			compatible = "brcm,bcm-nsp-rng";
216			reg = <0x33000 0x14>;
217		};
218
219		qspi: spi@27200 {
220			compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi";
221			reg = <0x027200 0x184>,
222			      <0x027000 0x124>,
223			      <0x11c408 0x004>,
224			      <0x0273a0 0x01c>;
225			reg-names = "mspi", "bspi", "intr_regs",
226				    "intr_status_reg";
227			interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>,
228				     <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>,
229				     <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
230				     <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>,
231				     <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
232				     <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
233				     <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
234			interrupt-names = "spi_lr_fullness_reached",
235					  "spi_lr_session_aborted",
236					  "spi_lr_impatient",
237					  "spi_lr_session_done",
238					  "spi_lr_overhead",
239					  "mspi_done",
240					  "mspi_halted";
241			num-cs = <2>;
242			#address-cells = <1>;
243			#size-cells = <0>;
244
245			/* partitions defined in board DTS */
246		};
247
248		ccbtimer0: timer@34000 {
249			compatible = "arm,sp804";
250			reg = <0x34000 0x1000>;
251			interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
252				     <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
253		};
254
255		ccbtimer1: timer@35000 {
256			compatible = "arm,sp804";
257			reg = <0x35000 0x1000>;
258			interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
259				     <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
260		};
261
262		i2c0: i2c@38000 {
263			compatible = "brcm,iproc-i2c";
264			reg = <0x38000 0x50>;
265			#address-cells = <1>;
266			#size-cells = <0>;
267			interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
268			clock-frequency = <100000>;
269		};
270
271		watchdog: watchdog@39000 {
272			compatible = "arm,sp805", "arm,primecell";
273			reg = <0x39000 0x1000>;
274			interrupts = <GIC_SPI 213 IRQ_TYPE_LEVEL_HIGH>;
275		};
276
277		i2c1: i2c@3b000 {
278			compatible = "brcm,iproc-i2c";
279			reg = <0x3b000 0x50>;
280			#address-cells = <1>;
281			#size-cells = <0>;
282			interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
283			clock-frequency = <100000>;
284		};
285	};
286
287	pflash: nor@20000000 {
288		compatible = "cfi-flash", "jedec-flash";
289		reg = <0x20000000 0x04000000>;
290		status = "disabled";
291		#address-cells = <1>;
292		#size-cells = <1>;
293
294		/* partitions defined in board DTS */
295	};
296
297	pcie0: pcie@18012000 {
298		compatible = "brcm,iproc-pcie";
299		reg = <0x18012000 0x1000>;
300
301		#interrupt-cells = <1>;
302		interrupt-map-mask = <0 0 0 0>;
303		interrupt-map = <0 0 0 0 &gic GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
304
305		linux,pci-domain = <0>;
306
307		bus-range = <0x00 0xff>;
308
309		#address-cells = <3>;
310		#size-cells = <2>;
311		device_type = "pci";
312
313		/* Note: The HW does not support I/O resources.  So,
314		 * only the memory resource range is being specified.
315		 */
316		ranges = <0x82000000 0 0x08000000 0x08000000 0 0x8000000>;
317
318		status = "disabled";
319
320		msi-parent = <&msi0>;
321		msi0: msi {
322			compatible = "brcm,iproc-msi";
323			msi-controller;
324			interrupt-parent = <&gic>;
325			interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>,
326				     <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>,
327				     <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>,
328				     <GIC_SPI 185 IRQ_TYPE_LEVEL_HIGH>;
329			brcm,pcie-msi-inten;
330		};
331	};
332
333	pcie1: pcie@18013000 {
334		compatible = "brcm,iproc-pcie";
335		reg = <0x18013000 0x1000>;
336
337		#interrupt-cells = <1>;
338		interrupt-map-mask = <0 0 0 0>;
339		interrupt-map = <0 0 0 0 &gic GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>;
340
341		linux,pci-domain = <1>;
342
343		bus-range = <0x00 0xff>;
344
345		#address-cells = <3>;
346		#size-cells = <2>;
347		device_type = "pci";
348
349		/* Note: The HW does not support I/O resources.  So,
350		 * only the memory resource range is being specified.
351		 */
352		ranges = <0x82000000 0 0x40000000 0x40000000 0 0x8000000>;
353
354		status = "disabled";
355
356		msi-parent = <&msi1>;
357		msi1: msi {
358			compatible = "brcm,iproc-msi";
359			msi-controller;
360			interrupt-parent = <&gic>;
361			interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>,
362				     <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>,
363				     <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>,
364				     <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
365			brcm,pcie-msi-inten;
366		};
367	};
368};
369