1*4882a593Smuzhiyun#include <dt-bindings/pinctrl/bcm2835.h> 2*4882a593Smuzhiyun#include <dt-bindings/clock/bcm2835.h> 3*4882a593Smuzhiyun#include <dt-bindings/clock/bcm2835-aux.h> 4*4882a593Smuzhiyun#include <dt-bindings/gpio/gpio.h> 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun/* This include file covers the common peripherals and configuration between 7*4882a593Smuzhiyun * bcm2835 and bcm2836 implementations, leaving the CPU configuration to 8*4882a593Smuzhiyun * bcm2835.dtsi and bcm2836.dtsi. 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun/ { 12*4882a593Smuzhiyun compatible = "brcm,bcm2835"; 13*4882a593Smuzhiyun model = "BCM2835"; 14*4882a593Smuzhiyun interrupt-parent = <&intc>; 15*4882a593Smuzhiyun #address-cells = <1>; 16*4882a593Smuzhiyun #size-cells = <1>; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun chosen { 19*4882a593Smuzhiyun bootargs = "earlyprintk console=ttyAMA0"; 20*4882a593Smuzhiyun }; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun soc: soc { 23*4882a593Smuzhiyun compatible = "simple-bus"; 24*4882a593Smuzhiyun #address-cells = <1>; 25*4882a593Smuzhiyun #size-cells = <1>; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun timer@7e003000 { 28*4882a593Smuzhiyun compatible = "brcm,bcm2835-system-timer"; 29*4882a593Smuzhiyun reg = <0x7e003000 0x1000>; 30*4882a593Smuzhiyun interrupts = <1 0>, <1 1>, <1 2>, <1 3>; 31*4882a593Smuzhiyun /* This could be a reference to BCM2835_CLOCK_TIMER, 32*4882a593Smuzhiyun * but we don't have the driver using the common clock 33*4882a593Smuzhiyun * support yet. 34*4882a593Smuzhiyun */ 35*4882a593Smuzhiyun clock-frequency = <1000000>; 36*4882a593Smuzhiyun }; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun dma: dma@7e007000 { 39*4882a593Smuzhiyun compatible = "brcm,bcm2835-dma"; 40*4882a593Smuzhiyun reg = <0x7e007000 0xf00>; 41*4882a593Smuzhiyun interrupts = <1 16>, 42*4882a593Smuzhiyun <1 17>, 43*4882a593Smuzhiyun <1 18>, 44*4882a593Smuzhiyun <1 19>, 45*4882a593Smuzhiyun <1 20>, 46*4882a593Smuzhiyun <1 21>, 47*4882a593Smuzhiyun <1 22>, 48*4882a593Smuzhiyun <1 23>, 49*4882a593Smuzhiyun <1 24>, 50*4882a593Smuzhiyun <1 25>, 51*4882a593Smuzhiyun <1 26>, 52*4882a593Smuzhiyun /* dma channel 11-14 share one irq */ 53*4882a593Smuzhiyun <1 27>, 54*4882a593Smuzhiyun <1 27>, 55*4882a593Smuzhiyun <1 27>, 56*4882a593Smuzhiyun <1 27>, 57*4882a593Smuzhiyun /* unused shared irq for all channels */ 58*4882a593Smuzhiyun <1 28>; 59*4882a593Smuzhiyun interrupt-names = "dma0", 60*4882a593Smuzhiyun "dma1", 61*4882a593Smuzhiyun "dma2", 62*4882a593Smuzhiyun "dma3", 63*4882a593Smuzhiyun "dma4", 64*4882a593Smuzhiyun "dma5", 65*4882a593Smuzhiyun "dma6", 66*4882a593Smuzhiyun "dma7", 67*4882a593Smuzhiyun "dma8", 68*4882a593Smuzhiyun "dma9", 69*4882a593Smuzhiyun "dma10", 70*4882a593Smuzhiyun "dma11", 71*4882a593Smuzhiyun "dma12", 72*4882a593Smuzhiyun "dma13", 73*4882a593Smuzhiyun "dma14", 74*4882a593Smuzhiyun "dma-shared-all"; 75*4882a593Smuzhiyun #dma-cells = <1>; 76*4882a593Smuzhiyun brcm,dma-channel-mask = <0x7f35>; 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun intc: interrupt-controller@7e00b200 { 80*4882a593Smuzhiyun compatible = "brcm,bcm2835-armctrl-ic"; 81*4882a593Smuzhiyun reg = <0x7e00b200 0x200>; 82*4882a593Smuzhiyun interrupt-controller; 83*4882a593Smuzhiyun #interrupt-cells = <2>; 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun watchdog@7e100000 { 87*4882a593Smuzhiyun compatible = "brcm,bcm2835-pm-wdt"; 88*4882a593Smuzhiyun reg = <0x7e100000 0x28>; 89*4882a593Smuzhiyun }; 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun clocks: cprman@7e101000 { 92*4882a593Smuzhiyun compatible = "brcm,bcm2835-cprman"; 93*4882a593Smuzhiyun #clock-cells = <1>; 94*4882a593Smuzhiyun reg = <0x7e101000 0x2000>; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /* CPRMAN derives everything from the platform's 97*4882a593Smuzhiyun * oscillator. 98*4882a593Smuzhiyun */ 99*4882a593Smuzhiyun clocks = <&clk_osc>; 100*4882a593Smuzhiyun }; 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun rng@7e104000 { 103*4882a593Smuzhiyun compatible = "brcm,bcm2835-rng"; 104*4882a593Smuzhiyun reg = <0x7e104000 0x10>; 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun mailbox: mailbox@7e00b800 { 108*4882a593Smuzhiyun compatible = "brcm,bcm2835-mbox"; 109*4882a593Smuzhiyun reg = <0x7e00b880 0x40>; 110*4882a593Smuzhiyun interrupts = <0 1>; 111*4882a593Smuzhiyun #mbox-cells = <0>; 112*4882a593Smuzhiyun }; 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun gpio: gpio@7e200000 { 115*4882a593Smuzhiyun compatible = "brcm,bcm2835-gpio"; 116*4882a593Smuzhiyun reg = <0x7e200000 0xb4>; 117*4882a593Smuzhiyun /* 118*4882a593Smuzhiyun * The GPIO IP block is designed for 3 banks of GPIOs. 119*4882a593Smuzhiyun * Each bank has a GPIO interrupt for itself. 120*4882a593Smuzhiyun * There is an overall "any bank" interrupt. 121*4882a593Smuzhiyun * In order, these are GIC interrupts 17, 18, 19, 20. 122*4882a593Smuzhiyun * Since the BCM2835 only has 2 banks, the 2nd bank 123*4882a593Smuzhiyun * interrupt output appears to be mirrored onto the 124*4882a593Smuzhiyun * 3rd bank's interrupt signal. 125*4882a593Smuzhiyun * So, a bank0 interrupt shows up on 17, 20, and 126*4882a593Smuzhiyun * a bank1 interrupt shows up on 18, 19, 20! 127*4882a593Smuzhiyun */ 128*4882a593Smuzhiyun interrupts = <2 17>, <2 18>, <2 19>, <2 20>; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun gpio-controller; 131*4882a593Smuzhiyun #gpio-cells = <2>; 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun interrupt-controller; 134*4882a593Smuzhiyun #interrupt-cells = <2>; 135*4882a593Smuzhiyun }; 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun uart0: serial@7e201000 { 138*4882a593Smuzhiyun compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell"; 139*4882a593Smuzhiyun reg = <0x7e201000 0x1000>; 140*4882a593Smuzhiyun interrupts = <2 25>; 141*4882a593Smuzhiyun clocks = <&clocks BCM2835_CLOCK_UART>, 142*4882a593Smuzhiyun <&clocks BCM2835_CLOCK_VPU>; 143*4882a593Smuzhiyun clock-names = "uartclk", "apb_pclk"; 144*4882a593Smuzhiyun arm,primecell-periphid = <0x00241011>; 145*4882a593Smuzhiyun }; 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun i2s: i2s@7e203000 { 148*4882a593Smuzhiyun compatible = "brcm,bcm2835-i2s"; 149*4882a593Smuzhiyun reg = <0x7e203000 0x20>, 150*4882a593Smuzhiyun <0x7e101098 0x02>; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun dmas = <&dma 2>, 153*4882a593Smuzhiyun <&dma 3>; 154*4882a593Smuzhiyun dma-names = "tx", "rx"; 155*4882a593Smuzhiyun status = "disabled"; 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun spi: spi@7e204000 { 159*4882a593Smuzhiyun compatible = "brcm,bcm2835-spi"; 160*4882a593Smuzhiyun reg = <0x7e204000 0x1000>; 161*4882a593Smuzhiyun interrupts = <2 22>; 162*4882a593Smuzhiyun clocks = <&clocks BCM2835_CLOCK_VPU>; 163*4882a593Smuzhiyun #address-cells = <1>; 164*4882a593Smuzhiyun #size-cells = <0>; 165*4882a593Smuzhiyun status = "disabled"; 166*4882a593Smuzhiyun }; 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun i2c0: i2c@7e205000 { 169*4882a593Smuzhiyun compatible = "brcm,bcm2835-i2c"; 170*4882a593Smuzhiyun reg = <0x7e205000 0x1000>; 171*4882a593Smuzhiyun interrupts = <2 21>; 172*4882a593Smuzhiyun clocks = <&clocks BCM2835_CLOCK_VPU>; 173*4882a593Smuzhiyun #address-cells = <1>; 174*4882a593Smuzhiyun #size-cells = <0>; 175*4882a593Smuzhiyun status = "disabled"; 176*4882a593Smuzhiyun }; 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun pixelvalve@7e206000 { 179*4882a593Smuzhiyun compatible = "brcm,bcm2835-pixelvalve0"; 180*4882a593Smuzhiyun reg = <0x7e206000 0x100>; 181*4882a593Smuzhiyun interrupts = <2 13>; /* pwa0 */ 182*4882a593Smuzhiyun }; 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun pixelvalve@7e207000 { 185*4882a593Smuzhiyun compatible = "brcm,bcm2835-pixelvalve1"; 186*4882a593Smuzhiyun reg = <0x7e207000 0x100>; 187*4882a593Smuzhiyun interrupts = <2 14>; /* pwa1 */ 188*4882a593Smuzhiyun }; 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun aux: aux@0x7e215000 { 191*4882a593Smuzhiyun compatible = "brcm,bcm2835-aux"; 192*4882a593Smuzhiyun #clock-cells = <1>; 193*4882a593Smuzhiyun reg = <0x7e215000 0x8>; 194*4882a593Smuzhiyun clocks = <&clocks BCM2835_CLOCK_VPU>; 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun uart1: serial@7e215040 { 198*4882a593Smuzhiyun compatible = "brcm,bcm2835-aux-uart"; 199*4882a593Smuzhiyun reg = <0x7e215040 0x40>; 200*4882a593Smuzhiyun interrupts = <1 29>; 201*4882a593Smuzhiyun clocks = <&aux BCM2835_AUX_CLOCK_UART>; 202*4882a593Smuzhiyun status = "disabled"; 203*4882a593Smuzhiyun }; 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun spi1: spi@7e215080 { 206*4882a593Smuzhiyun compatible = "brcm,bcm2835-aux-spi"; 207*4882a593Smuzhiyun reg = <0x7e215080 0x40>; 208*4882a593Smuzhiyun interrupts = <1 29>; 209*4882a593Smuzhiyun clocks = <&aux BCM2835_AUX_CLOCK_SPI1>; 210*4882a593Smuzhiyun #address-cells = <1>; 211*4882a593Smuzhiyun #size-cells = <0>; 212*4882a593Smuzhiyun status = "disabled"; 213*4882a593Smuzhiyun }; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun spi2: spi@7e2150c0 { 216*4882a593Smuzhiyun compatible = "brcm,bcm2835-aux-spi"; 217*4882a593Smuzhiyun reg = <0x7e2150c0 0x40>; 218*4882a593Smuzhiyun interrupts = <1 29>; 219*4882a593Smuzhiyun clocks = <&aux BCM2835_AUX_CLOCK_SPI2>; 220*4882a593Smuzhiyun #address-cells = <1>; 221*4882a593Smuzhiyun #size-cells = <0>; 222*4882a593Smuzhiyun status = "disabled"; 223*4882a593Smuzhiyun }; 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun pwm: pwm@7e20c000 { 226*4882a593Smuzhiyun compatible = "brcm,bcm2835-pwm"; 227*4882a593Smuzhiyun reg = <0x7e20c000 0x28>; 228*4882a593Smuzhiyun clocks = <&clocks BCM2835_CLOCK_PWM>; 229*4882a593Smuzhiyun assigned-clocks = <&clocks BCM2835_CLOCK_PWM>; 230*4882a593Smuzhiyun assigned-clock-rates = <10000000>; 231*4882a593Smuzhiyun #pwm-cells = <2>; 232*4882a593Smuzhiyun status = "disabled"; 233*4882a593Smuzhiyun }; 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun sdhci: sdhci@7e300000 { 236*4882a593Smuzhiyun compatible = "brcm,bcm2835-sdhci"; 237*4882a593Smuzhiyun reg = <0x7e300000 0x100>; 238*4882a593Smuzhiyun interrupts = <2 30>; 239*4882a593Smuzhiyun clocks = <&clocks BCM2835_CLOCK_EMMC>; 240*4882a593Smuzhiyun status = "disabled"; 241*4882a593Smuzhiyun }; 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun hvs@7e400000 { 244*4882a593Smuzhiyun compatible = "brcm,bcm2835-hvs"; 245*4882a593Smuzhiyun reg = <0x7e400000 0x6000>; 246*4882a593Smuzhiyun interrupts = <2 1>; 247*4882a593Smuzhiyun }; 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun i2c1: i2c@7e804000 { 250*4882a593Smuzhiyun compatible = "brcm,bcm2835-i2c"; 251*4882a593Smuzhiyun reg = <0x7e804000 0x1000>; 252*4882a593Smuzhiyun interrupts = <2 21>; 253*4882a593Smuzhiyun clocks = <&clocks BCM2835_CLOCK_VPU>; 254*4882a593Smuzhiyun #address-cells = <1>; 255*4882a593Smuzhiyun #size-cells = <0>; 256*4882a593Smuzhiyun status = "disabled"; 257*4882a593Smuzhiyun }; 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun i2c2: i2c@7e805000 { 260*4882a593Smuzhiyun compatible = "brcm,bcm2835-i2c"; 261*4882a593Smuzhiyun reg = <0x7e805000 0x1000>; 262*4882a593Smuzhiyun interrupts = <2 21>; 263*4882a593Smuzhiyun clocks = <&clocks BCM2835_CLOCK_VPU>; 264*4882a593Smuzhiyun #address-cells = <1>; 265*4882a593Smuzhiyun #size-cells = <0>; 266*4882a593Smuzhiyun status = "disabled"; 267*4882a593Smuzhiyun }; 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun pixelvalve@7e807000 { 270*4882a593Smuzhiyun compatible = "brcm,bcm2835-pixelvalve2"; 271*4882a593Smuzhiyun reg = <0x7e807000 0x100>; 272*4882a593Smuzhiyun interrupts = <2 10>; /* pixelvalve */ 273*4882a593Smuzhiyun }; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun hdmi: hdmi@7e902000 { 276*4882a593Smuzhiyun compatible = "brcm,bcm2835-hdmi"; 277*4882a593Smuzhiyun reg = <0x7e902000 0x600>, 278*4882a593Smuzhiyun <0x7e808000 0x100>; 279*4882a593Smuzhiyun interrupts = <2 8>, <2 9>; 280*4882a593Smuzhiyun ddc = <&i2c2>; 281*4882a593Smuzhiyun clocks = <&clocks BCM2835_PLLH_PIX>, 282*4882a593Smuzhiyun <&clocks BCM2835_CLOCK_HSM>; 283*4882a593Smuzhiyun clock-names = "pixel", "hdmi"; 284*4882a593Smuzhiyun status = "disabled"; 285*4882a593Smuzhiyun }; 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun usb: usb@7e980000 { 288*4882a593Smuzhiyun compatible = "brcm,bcm2835-usb"; 289*4882a593Smuzhiyun reg = <0x7e980000 0x10000>; 290*4882a593Smuzhiyun interrupts = <1 9>; 291*4882a593Smuzhiyun #address-cells = <1>; 292*4882a593Smuzhiyun #size-cells = <0>; 293*4882a593Smuzhiyun }; 294*4882a593Smuzhiyun 295*4882a593Smuzhiyun v3d: v3d@7ec00000 { 296*4882a593Smuzhiyun compatible = "brcm,bcm2835-v3d"; 297*4882a593Smuzhiyun reg = <0x7ec00000 0x1000>; 298*4882a593Smuzhiyun interrupts = <1 10>; 299*4882a593Smuzhiyun }; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun vc4: gpu { 302*4882a593Smuzhiyun compatible = "brcm,bcm2835-vc4"; 303*4882a593Smuzhiyun }; 304*4882a593Smuzhiyun }; 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun clocks { 307*4882a593Smuzhiyun compatible = "simple-bus"; 308*4882a593Smuzhiyun #address-cells = <1>; 309*4882a593Smuzhiyun #size-cells = <0>; 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun /* The oscillator is the root of the clock tree. */ 312*4882a593Smuzhiyun clk_osc: clock@3 { 313*4882a593Smuzhiyun compatible = "fixed-clock"; 314*4882a593Smuzhiyun reg = <3>; 315*4882a593Smuzhiyun #clock-cells = <0>; 316*4882a593Smuzhiyun clock-output-names = "osc"; 317*4882a593Smuzhiyun clock-frequency = <19200000>; 318*4882a593Smuzhiyun }; 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun }; 321*4882a593Smuzhiyun}; 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun#include "bcm283x-uboot.dtsi" 324