bcm2836.dtsi revision 281890
1/*
2 * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@bluezbox.com>
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
25 * $FreeBSD: head/sys/boot/fdt/dts/arm/bcm2836.dtsi 281890 2015-04-23 14:58:39Z loos $
26 */
27
28/ {
29	#address-cells = <1>;
30	#size-cells = <1>;
31
32	timer {
33		compatible = "arm,armv7-timer";
34		clock-frequency = <19200000>;
35		interrupts = <72 73 75 74>;
36		interrupt-parent = <&intc>;
37	};
38
39	SOC: axi {
40		compatible = "simple-bus";
41		#address-cells = <1>;
42		#size-cells = <1>;
43		reg = <0x3f000000 0x01000000>;
44		ranges = <0 0x3f000000 0x01000000>;
45
46		intc: interrupt-controller {
47			compatible = "broadcom,bcm2835-armctrl-ic",
48				     "broadcom,bcm2708-armctrl-ic";
49			reg = <0xB200 0x200>;
50
51			interrupt-controller;
52			#interrupt-cells = <1>;
53
54			/* Bank 0
55			 * 0: ARM_TIMER
56			 * 1: ARM_MAILBOX
57			 * 2: ARM_DOORBELL_0
58			 * 3: ARM_DOORBELL_1
59			 * 4: VPU0_HALTED
60			 * 5: VPU1_HALTED
61			 * 6: ILLEGAL_TYPE0
62			 * 7: ILLEGAL_TYPE1
63			 */
64
65			/* Bank 1
66			 * 0: TIMER0		16: DMA0
67			 * 1: TIMER1		17: DMA1
68			 * 2: TIMER2		18: VC_DMA2
69			 * 3: TIMER3		19: VC_DMA3
70			 * 4: CODEC0		20: DMA4
71			 * 5: CODEC1		21: DMA5
72			 * 6: CODEC2		22: DMA6
73			 * 7: VC_JPEG		23: DMA7
74			 * 8: ISP		24: DMA8
75			 * 9: VC_USB		25: DMA9
76			 * 10: VC_3D		26: DMA10
77			 * 11: TRANSPOSER	27: DMA11
78			 * 12: MULTICORESYNC0	28: DMA12
79			 * 13: MULTICORESYNC1	29: AUX
80			 * 14: MULTICORESYNC2	30: ARM
81			 * 15: MULTICORESYNC3	31: VPUDMA
82			 */
83
84			/* Bank 2
85			 * 0: HOSTPORT		16: SMI
86			 * 1: VIDEOSCALER	17: GPIO0
87			 * 2: CCP2TX		18: GPIO1
88			 * 3: SDC		19: GPIO2
89			 * 4: DSI0		20: GPIO3
90			 * 5: AVE		21: VC_I2C
91			 * 6: CAM0		22: VC_SPI
92			 * 7: CAM1		23: VC_I2SPCM
93			 * 8: HDMI0		24: VC_SDIO
94			 * 9: HDMI1		25: VC_UART
95			 * 10: PIXELVALVE1	26: SLIMBUS
96			 * 11: I2CSPISLV	27: VEC
97			 * 12: DSI1		28: CPG
98			 * 13: PWA0		29: RNG
99			 * 14: PWA1		30: VC_ARASANSDIO
100			 * 15: CPR		31: AVSPMON
101			 */
102		};
103
104		watchdog0 {
105			compatible = "broadcom,bcm2835-wdt",
106				     "broadcom,bcm2708-wdt";
107			reg = <0x10001c 0x0c>; /* 0x1c, 0x20, 0x24 */
108		};
109
110		gpio: gpio {
111			compatible = "broadcom,bcm2835-gpio",
112				     "broadcom,bcm2708-gpio";
113			reg = <0x200000 0xb0>;
114
115			/* Unusual arrangement of interrupts 
116			 * (determined by testing)
117			 * 17: Bank 0 (GPIOs  0-31)
118			 * 19: Bank 1 (GPIOs 32-53)
119			 * 18: Bank 2
120			 * 20: All banks (GPIOs 0-53)
121			 */
122			interrupts = <57 59 58 60>;
123			interrupt-parent = <&intc>;
124
125			gpio-controller;
126			#gpio-cells = <2>;
127
128			interrupt-controller;
129			#interrupt-cells = <1>;
130
131			pinctrl-names = "default";
132			pinctrl-0 = <&pins_reserved>;
133
134			/* Pins that can short 3.3V to GND in output mode: 46-47
135			 * Pins used by VideoCore: 48-53
136			 */
137			broadcom,read-only = <46>, <47>, <48>, <49>, <50>, 
138			                     <51>, <52>, <53>;
139
140			/* BSC0 */
141			pins_bsc0_a: bsc0_a {
142				broadcom,pins = <0>, <1>;
143			};
144
145			pins_bsc0_b: bsc0_b {
146				broadcom,pins = <28>, <29>;
147			};
148
149			pins_bsc0_c: bsc0_c {
150				broadcom,pins = <44>, <45>;
151			};
152
153			/* BSC1 */
154			pins_bsc1_a: bsc1_a {
155				broadcom,pins = <2>, <3>;
156			};
157
158			pins_bsc1_b: bsc1_b {
159				broadcom,pins = <44>, <45>;
160			};
161
162			/* GPCLK0 */
163			pins_gpclk0_a: gpclk0_a {
164				broadcom,pins = <4>;
165			};
166
167			pins_gpclk0_b: gpclk0_b {
168				broadcom,pins = <20>;
169			};
170
171			pins_gpclk0_c: gpclk0_c {
172				broadcom,pins = <32>;
173			};
174
175			pins_gpclk0_d: gpclk0_d {
176				broadcom,pins = <34>;
177			};
178
179			/* GPCLK1 */
180			pins_gpclk1_a: gpclk1_a {
181				broadcom,pins = <5>;
182			};
183
184			pins_gpclk1_b: gpclk1_b {
185				broadcom,pins = <21>;
186			};
187
188			pins_gpclk1_c: gpclk1_c {
189				broadcom,pins = <42>;
190			};
191
192			pins_gpclk1_d: gpclk1_d {
193				broadcom,pins = <44>;
194			};
195
196			/* GPCLK2 */
197			pins_gpclk2_a: gpclk2_a {
198				broadcom,pins = <6>;
199			};
200
201			pins_gpclk2_b: gpclk2_b {
202				broadcom,pins = <43>;
203			};
204
205			/* SPI0 */
206			pins_spi0_a: spi0_a {
207				broadcom,pins = <7>, <8>, <9>, <10>, <11>;
208			};
209
210			pins_spi0_b: spi0_b {
211				broadcom,pins = <35>, <36>, <37>, <38>, <39>;
212			};
213
214			/* PWM */
215			pins_pwm0_a: pwm0_a {
216				broadcom,pins = <12>;
217			};
218
219			pins_pwm0_b: pwm0_b {
220				broadcom,pins = <18>;
221			};
222
223			pins_pwm0_c: pwm0_c {
224				broadcom,pins = <40>;
225			};
226
227			pins_pwm1_a: pwm1_a {
228				broadcom,pins = <13>;
229			};
230
231			pins_pwm1_b: pwm1_b {
232				broadcom,pins = <19>;
233			};
234
235			pins_pwm1_c: pwm1_c {
236				broadcom,pins = <41>;
237			};
238
239			pins_pwm1_d: pwm1_d {
240				broadcom,pins = <45>;
241			};
242
243			/* UART0 */
244			pins_uart0_a: uart0_a {
245				broadcom,pins = <14>, <15>;
246			};
247
248			pins_uart0_b: uart0_b {
249				broadcom,pins = <32>, <33>;
250			};
251
252			pins_uart0_c: uart0_c {
253				broadcom,pins = <36>, <37>;
254			};
255
256			pins_uart0_fc_a: uart0_fc_a {
257				broadcom,pins = <16>, <17>;
258			};
259
260			pins_uart0_fc_b: uart0_fc_b {
261				broadcom,pins = <30>, <31>;
262			};
263
264			pins_uart0_fc_c: uart0_fc_c {
265				broadcom,pins = <39>, <38>;
266			};
267
268			/* PCM */
269			pins_pcm_a: pcm_a {
270				broadcom,pins = <18>, <19>, <20>, <21>;
271			};
272
273			pins_pcm_b: pcm_b {
274				broadcom,pins = <28>, <29>, <30>, <31>;
275			};
276
277			/* Secondary Address Bus */
278			pins_sm_addr_a: sm_addr_a {
279				broadcom,pins = <5>, <4>, <3>, <2>, <1>, <0>;
280			};
281
282			pins_sm_addr_b: sm_addr_b {
283				broadcom,pins = <33>, <32>, <31>, <30>, <29>,
284				                <28>;
285			};
286
287			pins_sm_ctl_a: sm_ctl_a {
288				broadcom,pins = <6>, <7>;
289			};
290
291			pins_sm_ctl_b: sm_ctl_b {
292				broadcom,pins = <34>, <35>;
293			};
294
295			pins_sm_data_8bit_a: sm_data_8bit_a {
296				broadcom,pins = <8>, <9>, <10>, <11>, <12>,
297				                <13>, <14>, <15>;
298			};
299
300			pins_sm_data_8bit_b: sm_data_8bit_b {
301				broadcom,pins = <36>, <37>, <38>, <39>, <40>,
302				                <41>, <42>, <43>;
303			};
304
305			pins_sm_data_16bit: sm_data_16bit {
306				broadcom,pins = <16>, <17>, <18>, <19>, <20>,
307				                <21>, <22>, <23>;
308			};
309
310			pins_sm_data_18bit: sm_data_18bit {
311				broadcom,pins = <24>, <25>;
312			};
313
314			/* BSCSL */
315			pins_bscsl: bscsl {
316				broadcom,pins = <18>, <19>;
317			};
318
319			/* SPISL */
320			pins_spisl: spisl {
321				broadcom,pins = <18>, <19>, <20>, <21>;
322			};
323
324			/* SPI1 */
325			pins_spi1: spi1 {
326				broadcom,pins = <16>, <17>, <18>, <19>, <20>,
327				                <21>;
328			};
329
330			/* UART1 */
331			pins_uart1_a: uart1_a {
332				broadcom,pins = <14>, <15>;
333			};
334
335			pins_uart1_b: uart1_b {
336				broadcom,pins = <32>, <33>;
337			};
338
339			pins_uart1_c: uart1_c {
340				broadcom,pins = <40>, <41>;
341			};
342
343			pins_uart1_fc_a: uart1_fc_a {
344				broadcom,pins = <16>, <17>;
345			};
346
347			pins_uart1_fc_b: uart1_fc_b {
348				broadcom,pins = <30>, <31>;
349			};
350
351			pins_uart1_fc_c: uart1_fc_c {
352				broadcom,pins = <43>, <42>;
353			};
354
355			/* SPI2 */
356			pins_spi2: spi2 {
357				broadcom,pins = <40>, <41>, <42>, <43>, <44>,
358				                <45>;
359			};
360
361			/* ARM JTAG */
362			pins_arm_jtag_trst: arm_jtag_trst {
363				broadcom,pins = <22>;
364			};
365
366			pins_arm_jtag_a: arm_jtag_a {
367				broadcom,pins = <4>, <5>, <6>, <12>, <13>;
368			};
369
370			pins_arm_jtag_b: arm_jtag_b {
371				broadcom,pins = <23>, <24>, <25>, <26>, <27>;
372			};
373
374			/* Reserved */
375			pins_reserved: reserved {
376				broadcom,pins = <48>, <49>, <50>, <51>, <52>,
377				                <53>;
378			};
379		};
380
381		bsc0 {
382			compatible = "broadcom,bcm2835-bsc",
383				     "broadcom,bcm2708-bsc";
384			reg = <0x205000 0x20>;
385			interrupts = <61>;
386			interrupt-parent = <&intc>;
387		};
388
389		bsc1 {
390			compatible = "broadcom,bcm2835-bsc",
391				     "broadcom,bcm2708-bsc";
392			reg = <0x804000 0x20>;
393			interrupts = <61>;
394			interrupt-parent = <&intc>;
395		};
396
397		spi0 {
398			compatible = "broadcom,bcm2835-spi",
399				     "broadcom,bcm2708-spi";
400			reg = <0x204000 0x20>;
401			interrupts = <62>;
402			interrupt-parent = <&intc>;
403		};
404
405		dma: dma {
406			compatible = "broadcom,bcm2835-dma", 
407				     "broadcom,bcm2708-dma";
408			reg = <0x7000 0x1000>, <0xE05000 0x1000>;
409			interrupts = <24 25 26 27 28 29 30 31 32 33 34 35 36>;
410			interrupt-parent = <&intc>;
411
412			broadcom,channels = <0>;	/* Set by VideoCore */
413		};
414
415		vc_mbox: mbox {
416			compatible = "broadcom,bcm2835-mbox", 
417				     "broadcom,bcm2708-mbox";
418			reg = <0xB880 0x40>;
419			interrupts = <1>;
420			interrupt-parent = <&intc>;
421
422			/* Channels
423			 * 0: Power
424			 * 1: Frame buffer
425			 * 2: Virtual UART
426			 * 3: VCHIQ
427			 * 4: LEDs
428			 * 5: Buttons
429			 * 6: Touch screen
430			 */
431		};
432
433		sdhci {
434			compatible = "broadcom,bcm2835-sdhci", 
435				     "broadcom,bcm2708-sdhci";
436			reg = <0x300000 0x100>;
437			interrupts = <70>;
438			interrupt-parent = <&intc>;
439
440			clock-frequency = <250000000>;	/* Set by VideoCore */
441		};
442
443		uart0: uart0 {
444			compatible = "broadcom,bcm2835-uart", 
445				     "broadcom,bcm2708-uart", "arm,pl011", 
446				     "arm,primecell";
447			reg = <0x201000 0x1000>;
448			interrupts = <65>;
449			interrupt-parent = <&intc>;
450
451			clock-frequency = <3000000>;	/* Set by VideoCore */
452			reg-shift = <2>;
453		};
454
455		vchiq {
456			compatible = "broadcom,bcm2835-vchiq";
457			reg = <0xB800 0x50>;
458			interrupts = <2>;
459			interrupt-parent = <&intc>;
460		};
461
462		usb {
463			compatible = "broadcom,bcm2835-usb", 
464				     "broadcom,bcm2708-usb", 
465				     "synopsys,designware-hs-otg2";
466			reg = <0x980000 0x20000>;
467			interrupts = <17>;
468			interrupt-parent = <&intc>;
469			#address-cells = <1>;
470			#size-cells = <0>;
471		};
472
473	};
474};
475