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