xref: /openbmc/u-boot/arch/arm/dts/bcm283x.dtsi (revision 85231c08)
1#include <dt-bindings/pinctrl/bcm2835.h>
2#include <dt-bindings/clock/bcm2835.h>
3#include <dt-bindings/clock/bcm2835-aux.h>
4#include <dt-bindings/gpio/gpio.h>
5
6/* firmware-provided startup stubs live here, where the secondary CPUs are
7 * spinning.
8 */
9/memreserve/ 0x00000000 0x00001000;
10
11/* This include file covers the common peripherals and configuration between
12 * bcm2835 and bcm2836 implementations, leaving the CPU configuration to
13 * bcm2835.dtsi and bcm2836.dtsi.
14 */
15
16/ {
17	compatible = "brcm,bcm2835";
18	model = "BCM2835";
19	interrupt-parent = <&intc>;
20	#address-cells = <1>;
21	#size-cells = <1>;
22
23	chosen {
24		bootargs = "earlyprintk console=ttyAMA0";
25	};
26
27	thermal-zones {
28		cpu_thermal: cpu-thermal {
29			polling-delay-passive = <0>;
30			polling-delay = <1000>;
31
32			thermal-sensors = <&thermal>;
33
34			trips {
35				cpu-crit {
36					temperature	= <80000>;
37					hysteresis	= <0>;
38					type		= "critical";
39				};
40			};
41
42			cooling-maps {
43			};
44		};
45	};
46
47	soc: soc {
48		compatible = "simple-bus";
49		#address-cells = <1>;
50		#size-cells = <1>;
51
52		timer@7e003000 {
53			compatible = "brcm,bcm2835-system-timer";
54			reg = <0x7e003000 0x1000>;
55			interrupts = <1 0>, <1 1>, <1 2>, <1 3>;
56			/* This could be a reference to BCM2835_CLOCK_TIMER,
57			 * but we don't have the driver using the common clock
58			 * support yet.
59			 */
60			clock-frequency = <1000000>;
61		};
62
63		dma: dma@7e007000 {
64			compatible = "brcm,bcm2835-dma";
65			reg = <0x7e007000 0xf00>;
66			interrupts = <1 16>,
67				     <1 17>,
68				     <1 18>,
69				     <1 19>,
70				     <1 20>,
71				     <1 21>,
72				     <1 22>,
73				     <1 23>,
74				     <1 24>,
75				     <1 25>,
76				     <1 26>,
77				     /* dma channel 11-14 share one irq */
78				     <1 27>,
79				     <1 27>,
80				     <1 27>,
81				     <1 27>,
82				     /* unused shared irq for all channels */
83				     <1 28>;
84			interrupt-names = "dma0",
85					  "dma1",
86					  "dma2",
87					  "dma3",
88					  "dma4",
89					  "dma5",
90					  "dma6",
91					  "dma7",
92					  "dma8",
93					  "dma9",
94					  "dma10",
95					  "dma11",
96					  "dma12",
97					  "dma13",
98					  "dma14",
99					  "dma-shared-all";
100			#dma-cells = <1>;
101			brcm,dma-channel-mask = <0x7f35>;
102		};
103
104		intc: interrupt-controller@7e00b200 {
105			compatible = "brcm,bcm2835-armctrl-ic";
106			reg = <0x7e00b200 0x200>;
107			interrupt-controller;
108			#interrupt-cells = <2>;
109		};
110
111		watchdog@7e100000 {
112			compatible = "brcm,bcm2835-pm-wdt";
113			reg = <0x7e100000 0x28>;
114		};
115
116		clocks: cprman@7e101000 {
117			compatible = "brcm,bcm2835-cprman";
118			#clock-cells = <1>;
119			reg = <0x7e101000 0x2000>;
120
121			/* CPRMAN derives almost everything from the
122			 * platform's oscillator.  However, the DSI
123			 * pixel clocks come from the DSI analog PHY.
124			 */
125			clocks = <&clk_osc>,
126				<&dsi0 0>, <&dsi0 1>, <&dsi0 2>,
127				<&dsi1 0>, <&dsi1 1>, <&dsi1 2>;
128		};
129
130		rng@7e104000 {
131			compatible = "brcm,bcm2835-rng";
132			reg = <0x7e104000 0x10>;
133		};
134
135		mailbox: mailbox@7e00b880 {
136			compatible = "brcm,bcm2835-mbox";
137			reg = <0x7e00b880 0x40>;
138			interrupts = <0 1>;
139			#mbox-cells = <0>;
140		};
141
142		gpio: gpio@7e200000 {
143			compatible = "brcm,bcm2835-gpio";
144			reg = <0x7e200000 0xb4>;
145			/*
146			 * The GPIO IP block is designed for 3 banks of GPIOs.
147			 * Each bank has a GPIO interrupt for itself.
148			 * There is an overall "any bank" interrupt.
149			 * In order, these are GIC interrupts 17, 18, 19, 20.
150			 * Since the BCM2835 only has 2 banks, the 2nd bank
151			 * interrupt output appears to be mirrored onto the
152			 * 3rd bank's interrupt signal.
153			 * So, a bank0 interrupt shows up on 17, 20, and
154			 * a bank1 interrupt shows up on 18, 19, 20!
155			 */
156			interrupts = <2 17>, <2 18>, <2 19>, <2 20>;
157
158			gpio-controller;
159			#gpio-cells = <2>;
160
161			interrupt-controller;
162			#interrupt-cells = <2>;
163
164			/* Defines pin muxing groups according to
165			 * BCM2835-ARM-Peripherals.pdf page 102.
166			 *
167			 * While each pin can have its mux selected
168			 * for various functions individually, some
169			 * groups only make sense to switch to a
170			 * particular function together.
171			 */
172			dpi_gpio0: dpi_gpio0 {
173				brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
174					     12 13 14 15 16 17 18 19
175					     20 21 22 23 24 25 26 27>;
176				brcm,function = <BCM2835_FSEL_ALT2>;
177			};
178			emmc_gpio22: emmc_gpio22 {
179				brcm,pins = <22 23 24 25 26 27>;
180				brcm,function = <BCM2835_FSEL_ALT3>;
181			};
182			emmc_gpio34: emmc_gpio34 {
183				brcm,pins = <34 35 36 37 38 39>;
184				brcm,function = <BCM2835_FSEL_ALT3>;
185				brcm,pull = <BCM2835_PUD_OFF
186					     BCM2835_PUD_UP
187					     BCM2835_PUD_UP
188					     BCM2835_PUD_UP
189					     BCM2835_PUD_UP
190					     BCM2835_PUD_UP>;
191			};
192			emmc_gpio48: emmc_gpio48 {
193				brcm,pins = <48 49 50 51 52 53>;
194				brcm,function = <BCM2835_FSEL_ALT3>;
195			};
196
197			gpclk0_gpio4: gpclk0_gpio4 {
198				brcm,pins = <4>;
199				brcm,function = <BCM2835_FSEL_ALT0>;
200			};
201			gpclk1_gpio5: gpclk1_gpio5 {
202				brcm,pins = <5>;
203				brcm,function = <BCM2835_FSEL_ALT0>;
204			};
205			gpclk1_gpio42: gpclk1_gpio42 {
206				brcm,pins = <42>;
207				brcm,function = <BCM2835_FSEL_ALT0>;
208			};
209			gpclk1_gpio44: gpclk1_gpio44 {
210				brcm,pins = <44>;
211				brcm,function = <BCM2835_FSEL_ALT0>;
212			};
213			gpclk2_gpio6: gpclk2_gpio6 {
214				brcm,pins = <6>;
215				brcm,function = <BCM2835_FSEL_ALT0>;
216			};
217			gpclk2_gpio43: gpclk2_gpio43 {
218				brcm,pins = <43>;
219				brcm,function = <BCM2835_FSEL_ALT0>;
220			};
221
222			i2c0_gpio0: i2c0_gpio0 {
223				brcm,pins = <0 1>;
224				brcm,function = <BCM2835_FSEL_ALT0>;
225			};
226			i2c0_gpio28: i2c0_gpio28 {
227				brcm,pins = <28 29>;
228				brcm,function = <BCM2835_FSEL_ALT0>;
229			};
230			i2c0_gpio44: i2c0_gpio44 {
231				brcm,pins = <44 45>;
232				brcm,function = <BCM2835_FSEL_ALT1>;
233			};
234			i2c1_gpio2: i2c1_gpio2 {
235				brcm,pins = <2 3>;
236				brcm,function = <BCM2835_FSEL_ALT0>;
237			};
238			i2c1_gpio44: i2c1_gpio44 {
239				brcm,pins = <44 45>;
240				brcm,function = <BCM2835_FSEL_ALT2>;
241			};
242			i2c_slave_gpio18: i2c_slave_gpio18 {
243				brcm,pins = <18 19 20 21>;
244				brcm,function = <BCM2835_FSEL_ALT3>;
245			};
246
247			jtag_gpio4: jtag_gpio4 {
248				brcm,pins = <4 5 6 12 13>;
249				brcm,function = <BCM2835_FSEL_ALT5>;
250			};
251			jtag_gpio22: jtag_gpio22 {
252				brcm,pins = <22 23 24 25 26 27>;
253				brcm,function = <BCM2835_FSEL_ALT4>;
254			};
255
256			pcm_gpio18: pcm_gpio18 {
257				brcm,pins = <18 19 20 21>;
258				brcm,function = <BCM2835_FSEL_ALT0>;
259			};
260			pcm_gpio28: pcm_gpio28 {
261				brcm,pins = <28 29 30 31>;
262				brcm,function = <BCM2835_FSEL_ALT2>;
263			};
264
265			pwm0_gpio12: pwm0_gpio12 {
266				brcm,pins = <12>;
267				brcm,function = <BCM2835_FSEL_ALT0>;
268			};
269			pwm0_gpio18: pwm0_gpio18 {
270				brcm,pins = <18>;
271				brcm,function = <BCM2835_FSEL_ALT5>;
272			};
273			pwm0_gpio40: pwm0_gpio40 {
274				brcm,pins = <40>;
275				brcm,function = <BCM2835_FSEL_ALT0>;
276			};
277			pwm1_gpio13: pwm1_gpio13 {
278				brcm,pins = <13>;
279				brcm,function = <BCM2835_FSEL_ALT0>;
280			};
281			pwm1_gpio19: pwm1_gpio19 {
282				brcm,pins = <19>;
283				brcm,function = <BCM2835_FSEL_ALT5>;
284			};
285			pwm1_gpio41: pwm1_gpio41 {
286				brcm,pins = <41>;
287				brcm,function = <BCM2835_FSEL_ALT0>;
288			};
289			pwm1_gpio45: pwm1_gpio45 {
290				brcm,pins = <45>;
291				brcm,function = <BCM2835_FSEL_ALT0>;
292			};
293
294			sdhost_gpio48: sdhost_gpio48 {
295				brcm,pins = <48 49 50 51 52 53>;
296				brcm,function = <BCM2835_FSEL_ALT0>;
297			};
298
299			spi0_gpio7: spi0_gpio7 {
300				brcm,pins = <7 8 9 10 11>;
301				brcm,function = <BCM2835_FSEL_ALT0>;
302			};
303			spi0_gpio35: spi0_gpio35 {
304				brcm,pins = <35 36 37 38 39>;
305				brcm,function = <BCM2835_FSEL_ALT0>;
306			};
307			spi1_gpio16: spi1_gpio16 {
308				brcm,pins = <16 17 18 19 20 21>;
309				brcm,function = <BCM2835_FSEL_ALT4>;
310			};
311			spi2_gpio40: spi2_gpio40 {
312				brcm,pins = <40 41 42 43 44 45>;
313				brcm,function = <BCM2835_FSEL_ALT4>;
314			};
315
316			uart0_gpio14: uart0_gpio14 {
317				brcm,pins = <14 15>;
318				brcm,function = <BCM2835_FSEL_ALT0>;
319			};
320			/* Separate from the uart0_gpio14 group
321			 * because it conflicts with spi1_gpio16, and
322			 * people often run uart0 on the two pins
323			 * without flow control.
324			 */
325			uart0_ctsrts_gpio16: uart0_ctsrts_gpio16 {
326				brcm,pins = <16 17>;
327				brcm,function = <BCM2835_FSEL_ALT3>;
328			};
329			uart0_ctsrts_gpio30: uart0_ctsrts_gpio30 {
330				brcm,pins = <30 31>;
331				brcm,function = <BCM2835_FSEL_ALT3>;
332			};
333			uart0_gpio32: uart0_gpio32 {
334				brcm,pins = <32 33>;
335				brcm,function = <BCM2835_FSEL_ALT3>;
336			};
337			uart0_gpio36: uart0_gpio36 {
338				brcm,pins = <36 37>;
339				brcm,function = <BCM2835_FSEL_ALT2>;
340			};
341			uart0_ctsrts_gpio38: uart0_ctsrts_gpio38 {
342				brcm,pins = <38 39>;
343				brcm,function = <BCM2835_FSEL_ALT2>;
344			};
345
346			uart1_gpio14: uart1_gpio14 {
347				brcm,pins = <14 15>;
348				brcm,function = <BCM2835_FSEL_ALT5>;
349			};
350			uart1_ctsrts_gpio16: uart1_ctsrts_gpio16 {
351				brcm,pins = <16 17>;
352				brcm,function = <BCM2835_FSEL_ALT5>;
353			};
354			uart1_gpio32: uart1_gpio32 {
355				brcm,pins = <32 33>;
356				brcm,function = <BCM2835_FSEL_ALT5>;
357			};
358			uart1_ctsrts_gpio30: uart1_ctsrts_gpio30 {
359				brcm,pins = <30 31>;
360				brcm,function = <BCM2835_FSEL_ALT5>;
361			};
362			uart1_gpio40: uart1_gpio40 {
363				brcm,pins = <40 41>;
364				brcm,function = <BCM2835_FSEL_ALT5>;
365			};
366			uart1_ctsrts_gpio42: uart1_ctsrts_gpio42 {
367				brcm,pins = <42 43>;
368				brcm,function = <BCM2835_FSEL_ALT5>;
369			};
370		};
371
372		uart0: serial@7e201000 {
373			compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
374			reg = <0x7e201000 0x1000>;
375			interrupts = <2 25>;
376			clocks = <&clocks BCM2835_CLOCK_UART>,
377				 <&clocks BCM2835_CLOCK_VPU>;
378			clock-names = "uartclk", "apb_pclk";
379			arm,primecell-periphid = <0x00241011>;
380		};
381
382		sdhost: mmc@7e202000 {
383			compatible = "brcm,bcm2835-sdhost";
384			reg = <0x7e202000 0x100>;
385			interrupts = <2 24>;
386			clocks = <&clocks BCM2835_CLOCK_VPU>;
387			dmas = <&dma 13>;
388			dma-names = "rx-tx";
389			status = "disabled";
390		};
391
392		i2s: i2s@7e203000 {
393			compatible = "brcm,bcm2835-i2s";
394			reg = <0x7e203000 0x20>,
395			      <0x7e101098 0x02>;
396
397			dmas = <&dma 2>,
398			       <&dma 3>;
399			dma-names = "tx", "rx";
400			status = "disabled";
401		};
402
403		spi: spi@7e204000 {
404			compatible = "brcm,bcm2835-spi";
405			reg = <0x7e204000 0x1000>;
406			interrupts = <2 22>;
407			clocks = <&clocks BCM2835_CLOCK_VPU>;
408			#address-cells = <1>;
409			#size-cells = <0>;
410			status = "disabled";
411		};
412
413		i2c0: i2c@7e205000 {
414			compatible = "brcm,bcm2835-i2c";
415			reg = <0x7e205000 0x1000>;
416			interrupts = <2 21>;
417			clocks = <&clocks BCM2835_CLOCK_VPU>;
418			#address-cells = <1>;
419			#size-cells = <0>;
420			status = "disabled";
421		};
422
423		pixelvalve@7e206000 {
424			compatible = "brcm,bcm2835-pixelvalve0";
425			reg = <0x7e206000 0x100>;
426			interrupts = <2 13>; /* pwa0 */
427		};
428
429		pixelvalve@7e207000 {
430			compatible = "brcm,bcm2835-pixelvalve1";
431			reg = <0x7e207000 0x100>;
432			interrupts = <2 14>; /* pwa1 */
433		};
434
435		dsi0: dsi@7e209000 {
436			compatible = "brcm,bcm2835-dsi0";
437			reg = <0x7e209000 0x78>;
438			interrupts = <2 4>;
439			#address-cells = <1>;
440			#size-cells = <0>;
441			#clock-cells = <1>;
442
443			clocks = <&clocks BCM2835_PLLA_DSI0>,
444				 <&clocks BCM2835_CLOCK_DSI0E>,
445				 <&clocks BCM2835_CLOCK_DSI0P>;
446			clock-names = "phy", "escape", "pixel";
447
448			clock-output-names = "dsi0_byte",
449					     "dsi0_ddr2",
450					     "dsi0_ddr";
451
452		};
453
454		thermal: thermal@7e212000 {
455			compatible = "brcm,bcm2835-thermal";
456			reg = <0x7e212000 0x8>;
457			clocks = <&clocks BCM2835_CLOCK_TSENS>;
458			#thermal-sensor-cells = <0>;
459			status = "disabled";
460		};
461
462		aux: aux@0x7e215000 {
463			compatible = "brcm,bcm2835-aux";
464			#clock-cells = <1>;
465			reg = <0x7e215000 0x8>;
466			clocks = <&clocks BCM2835_CLOCK_VPU>;
467		};
468
469		uart1: serial@7e215040 {
470			compatible = "brcm,bcm2835-aux-uart";
471			reg = <0x7e215040 0x40>;
472			interrupts = <1 29>;
473			clocks = <&aux BCM2835_AUX_CLOCK_UART>;
474			status = "disabled";
475		};
476
477		spi1: spi@7e215080 {
478			compatible = "brcm,bcm2835-aux-spi";
479			reg = <0x7e215080 0x40>;
480			interrupts = <1 29>;
481			clocks = <&aux BCM2835_AUX_CLOCK_SPI1>;
482			#address-cells = <1>;
483			#size-cells = <0>;
484			status = "disabled";
485		};
486
487		spi2: spi@7e2150c0 {
488			compatible = "brcm,bcm2835-aux-spi";
489			reg = <0x7e2150c0 0x40>;
490			interrupts = <1 29>;
491			clocks = <&aux BCM2835_AUX_CLOCK_SPI2>;
492			#address-cells = <1>;
493			#size-cells = <0>;
494			status = "disabled";
495		};
496
497		pwm: pwm@7e20c000 {
498			compatible = "brcm,bcm2835-pwm";
499			reg = <0x7e20c000 0x28>;
500			clocks = <&clocks BCM2835_CLOCK_PWM>;
501			assigned-clocks = <&clocks BCM2835_CLOCK_PWM>;
502			assigned-clock-rates = <10000000>;
503			#pwm-cells = <2>;
504			status = "disabled";
505		};
506
507		sdhci: sdhci@7e300000 {
508			compatible = "brcm,bcm2835-sdhci";
509			reg = <0x7e300000 0x100>;
510			interrupts = <2 30>;
511			clocks = <&clocks BCM2835_CLOCK_EMMC>;
512			status = "disabled";
513		};
514
515		hvs@7e400000 {
516			compatible = "brcm,bcm2835-hvs";
517			reg = <0x7e400000 0x6000>;
518			interrupts = <2 1>;
519		};
520
521		dsi1: dsi@7e700000 {
522			compatible = "brcm,bcm2835-dsi1";
523			reg = <0x7e700000 0x8c>;
524			interrupts = <2 12>;
525			#address-cells = <1>;
526			#size-cells = <0>;
527			#clock-cells = <1>;
528
529			clocks = <&clocks BCM2835_PLLD_DSI1>,
530				 <&clocks BCM2835_CLOCK_DSI1E>,
531				 <&clocks BCM2835_CLOCK_DSI1P>;
532			clock-names = "phy", "escape", "pixel";
533
534			clock-output-names = "dsi1_byte",
535					     "dsi1_ddr2",
536					     "dsi1_ddr";
537
538			status = "disabled";
539		};
540
541		i2c1: i2c@7e804000 {
542			compatible = "brcm,bcm2835-i2c";
543			reg = <0x7e804000 0x1000>;
544			interrupts = <2 21>;
545			clocks = <&clocks BCM2835_CLOCK_VPU>;
546			#address-cells = <1>;
547			#size-cells = <0>;
548			status = "disabled";
549		};
550
551		i2c2: i2c@7e805000 {
552			compatible = "brcm,bcm2835-i2c";
553			reg = <0x7e805000 0x1000>;
554			interrupts = <2 21>;
555			clocks = <&clocks BCM2835_CLOCK_VPU>;
556			#address-cells = <1>;
557			#size-cells = <0>;
558			status = "disabled";
559		};
560
561		vec: vec@7e806000 {
562			compatible = "brcm,bcm2835-vec";
563			reg = <0x7e806000 0x1000>;
564			clocks = <&clocks BCM2835_CLOCK_VEC>;
565			interrupts = <2 27>;
566			status = "disabled";
567		};
568
569		pixelvalve@7e807000 {
570			compatible = "brcm,bcm2835-pixelvalve2";
571			reg = <0x7e807000 0x100>;
572			interrupts = <2 10>; /* pixelvalve */
573		};
574
575		hdmi: hdmi@7e902000 {
576			compatible = "brcm,bcm2835-hdmi";
577			reg = <0x7e902000 0x600>,
578			      <0x7e808000 0x100>;
579			interrupts = <2 8>, <2 9>;
580			ddc = <&i2c2>;
581			clocks = <&clocks BCM2835_PLLH_PIX>,
582				 <&clocks BCM2835_CLOCK_HSM>;
583			clock-names = "pixel", "hdmi";
584			dmas = <&dma 17>;
585			dma-names = "audio-rx";
586			status = "disabled";
587		};
588
589		usb: usb@7e980000 {
590			compatible = "brcm,bcm2835-usb";
591			reg = <0x7e980000 0x10000>;
592			interrupts = <1 9>;
593			#address-cells = <1>;
594			#size-cells = <0>;
595			clocks = <&clk_usb>;
596			clock-names = "otg";
597			phys = <&usbphy>;
598			phy-names = "usb2-phy";
599		};
600
601		v3d: v3d@7ec00000 {
602			compatible = "brcm,bcm2835-v3d";
603			reg = <0x7ec00000 0x1000>;
604			interrupts = <1 10>;
605		};
606
607		vc4: gpu {
608			compatible = "brcm,bcm2835-vc4";
609		};
610	};
611
612	clocks {
613		compatible = "simple-bus";
614		#address-cells = <1>;
615		#size-cells = <0>;
616
617		/* The oscillator is the root of the clock tree. */
618		clk_osc: clock@3 {
619			compatible = "fixed-clock";
620			reg = <3>;
621			#clock-cells = <0>;
622			clock-output-names = "osc";
623			clock-frequency = <19200000>;
624		};
625
626		clk_usb: clock@4 {
627			compatible = "fixed-clock";
628			reg = <4>;
629			#clock-cells = <0>;
630			clock-output-names = "otg";
631			clock-frequency = <480000000>;
632		};
633	};
634
635	usbphy: phy {
636		compatible = "usb-nop-xceiv";
637	};
638};
639
640#include "bcm283x-uboot.dtsi"
641