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