1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Broadcom BCM63138 DSL SoCs Device Tree 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun#include <dt-bindings/interrupt-controller/arm-gic.h> 7*4882a593Smuzhiyun#include <dt-bindings/interrupt-controller/irq.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun/ { 10*4882a593Smuzhiyun #address-cells = <1>; 11*4882a593Smuzhiyun #size-cells = <1>; 12*4882a593Smuzhiyun compatible = "brcm,bcm63138"; 13*4882a593Smuzhiyun model = "Broadcom BCM63138 DSL SoC"; 14*4882a593Smuzhiyun interrupt-parent = <&gic>; 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun aliases { 17*4882a593Smuzhiyun uart0 = &serial0; 18*4882a593Smuzhiyun uart1 = &serial1; 19*4882a593Smuzhiyun }; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun cpus { 22*4882a593Smuzhiyun #address-cells = <1>; 23*4882a593Smuzhiyun #size-cells = <0>; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun cpu@0 { 26*4882a593Smuzhiyun device_type = "cpu"; 27*4882a593Smuzhiyun compatible = "arm,cortex-a9"; 28*4882a593Smuzhiyun next-level-cache = <&L2>; 29*4882a593Smuzhiyun reg = <0>; 30*4882a593Smuzhiyun enable-method = "brcm,bcm63138"; 31*4882a593Smuzhiyun }; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun cpu@1 { 34*4882a593Smuzhiyun device_type = "cpu"; 35*4882a593Smuzhiyun compatible = "arm,cortex-a9"; 36*4882a593Smuzhiyun next-level-cache = <&L2>; 37*4882a593Smuzhiyun reg = <1>; 38*4882a593Smuzhiyun enable-method = "brcm,bcm63138"; 39*4882a593Smuzhiyun resets = <&pmb0 4 1>; 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun clocks { 44*4882a593Smuzhiyun /* UBUS peripheral clock */ 45*4882a593Smuzhiyun periph_clk: periph_clk { 46*4882a593Smuzhiyun #clock-cells = <0>; 47*4882a593Smuzhiyun compatible = "fixed-clock"; 48*4882a593Smuzhiyun clock-frequency = <50000000>; 49*4882a593Smuzhiyun clock-output-names = "periph"; 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* peripheral clock for system timer */ 53*4882a593Smuzhiyun axi_clk: axi_clk { 54*4882a593Smuzhiyun #clock-cells = <0>; 55*4882a593Smuzhiyun compatible = "fixed-factor-clock"; 56*4882a593Smuzhiyun clocks = <&armpll>; 57*4882a593Smuzhiyun clock-div = <2>; 58*4882a593Smuzhiyun clock-mult = <1>; 59*4882a593Smuzhiyun }; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* APB bus clock */ 62*4882a593Smuzhiyun apb_clk: apb_clk { 63*4882a593Smuzhiyun #clock-cells = <0>; 64*4882a593Smuzhiyun compatible = "fixed-factor-clock"; 65*4882a593Smuzhiyun clocks = <&armpll>; 66*4882a593Smuzhiyun clock-div = <4>; 67*4882a593Smuzhiyun clock-mult = <1>; 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun }; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /* ARM bus */ 72*4882a593Smuzhiyun axi@80000000 { 73*4882a593Smuzhiyun compatible = "simple-bus"; 74*4882a593Smuzhiyun ranges = <0 0x80000000 0x784000>; 75*4882a593Smuzhiyun #address-cells = <1>; 76*4882a593Smuzhiyun #size-cells = <1>; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun L2: cache-controller@1d000 { 79*4882a593Smuzhiyun compatible = "arm,pl310-cache"; 80*4882a593Smuzhiyun reg = <0x1d000 0x1000>; 81*4882a593Smuzhiyun cache-unified; 82*4882a593Smuzhiyun cache-level = <2>; 83*4882a593Smuzhiyun cache-size = <524288>; 84*4882a593Smuzhiyun cache-sets = <1024>; 85*4882a593Smuzhiyun cache-line-size = <32>; 86*4882a593Smuzhiyun interrupts = <GIC_PPI 0 IRQ_TYPE_LEVEL_HIGH>; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun scu: scu@1e000 { 90*4882a593Smuzhiyun compatible = "arm,cortex-a9-scu"; 91*4882a593Smuzhiyun reg = <0x1e000 0x100>; 92*4882a593Smuzhiyun }; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun gic: interrupt-controller@1f000 { 95*4882a593Smuzhiyun compatible = "arm,cortex-a9-gic"; 96*4882a593Smuzhiyun reg = <0x1f000 0x1000 97*4882a593Smuzhiyun 0x1e100 0x100>; 98*4882a593Smuzhiyun #interrupt-cells = <3>; 99*4882a593Smuzhiyun #address-cells = <0>; 100*4882a593Smuzhiyun interrupt-controller; 101*4882a593Smuzhiyun }; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun global_timer: timer@1e200 { 104*4882a593Smuzhiyun compatible = "arm,cortex-a9-global-timer"; 105*4882a593Smuzhiyun reg = <0x1e200 0x20>; 106*4882a593Smuzhiyun interrupts = <GIC_PPI 11 IRQ_TYPE_EDGE_RISING>; 107*4882a593Smuzhiyun clocks = <&axi_clk>; 108*4882a593Smuzhiyun }; 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun local_timer: local-timer@1e600 { 111*4882a593Smuzhiyun compatible = "arm,cortex-a9-twd-timer"; 112*4882a593Smuzhiyun reg = <0x1e600 0x20>; 113*4882a593Smuzhiyun interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | 114*4882a593Smuzhiyun IRQ_TYPE_EDGE_RISING)>; 115*4882a593Smuzhiyun clocks = <&axi_clk>; 116*4882a593Smuzhiyun }; 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun twd_watchdog: watchdog@1e620 { 119*4882a593Smuzhiyun compatible = "arm,cortex-a9-twd-wdt"; 120*4882a593Smuzhiyun reg = <0x1e620 0x20>; 121*4882a593Smuzhiyun interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | 122*4882a593Smuzhiyun IRQ_TYPE_LEVEL_HIGH)>; 123*4882a593Smuzhiyun }; 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun armpll: armpll@20000 { 126*4882a593Smuzhiyun #clock-cells = <0>; 127*4882a593Smuzhiyun compatible = "brcm,bcm63138-armpll"; 128*4882a593Smuzhiyun clocks = <&periph_clk>; 129*4882a593Smuzhiyun reg = <0x20000 0xf00>; 130*4882a593Smuzhiyun }; 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun pmb0: reset-controller@4800c0 { 133*4882a593Smuzhiyun compatible = "brcm,bcm63138-pmb"; 134*4882a593Smuzhiyun reg = <0x4800c0 0x10>; 135*4882a593Smuzhiyun #reset-cells = <2>; 136*4882a593Smuzhiyun }; 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun pmb1: reset-controller@4800e0 { 139*4882a593Smuzhiyun compatible = "brcm,bcm63138-pmb"; 140*4882a593Smuzhiyun reg = <0x4800e0 0x10>; 141*4882a593Smuzhiyun #reset-cells = <2>; 142*4882a593Smuzhiyun }; 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun ahci: sata@a000 { 145*4882a593Smuzhiyun compatible = "brcm,bcm63138-ahci", "brcm,sata3-ahci"; 146*4882a593Smuzhiyun reg-names = "ahci", "top-ctrl"; 147*4882a593Smuzhiyun reg = <0xa000 0x9ac>, <0x8040 0x24>; 148*4882a593Smuzhiyun interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>; 149*4882a593Smuzhiyun #address-cells = <1>; 150*4882a593Smuzhiyun #size-cells = <0>; 151*4882a593Smuzhiyun resets = <&pmb0 3 1>; 152*4882a593Smuzhiyun reset-names = "ahci"; 153*4882a593Smuzhiyun status = "disabled"; 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun sata0: sata-port@0 { 156*4882a593Smuzhiyun reg = <0>; 157*4882a593Smuzhiyun phys = <&sata_phy0>; 158*4882a593Smuzhiyun }; 159*4882a593Smuzhiyun }; 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun sata_phy: sata-phy@8100 { 162*4882a593Smuzhiyun compatible = "brcm,bcm63138-sata-phy", "brcm,phy-sata3"; 163*4882a593Smuzhiyun reg = <0x8100 0x1e00>; 164*4882a593Smuzhiyun reg-names = "phy"; 165*4882a593Smuzhiyun #address-cells = <1>; 166*4882a593Smuzhiyun #size-cells = <0>; 167*4882a593Smuzhiyun status = "disabled"; 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun sata_phy0: sata-phy@0 { 170*4882a593Smuzhiyun reg = <0>; 171*4882a593Smuzhiyun #phy-cells = <0>; 172*4882a593Smuzhiyun }; 173*4882a593Smuzhiyun }; 174*4882a593Smuzhiyun }; 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun /* Legacy UBUS base */ 177*4882a593Smuzhiyun ubus@fffe8000 { 178*4882a593Smuzhiyun compatible = "simple-bus"; 179*4882a593Smuzhiyun #address-cells = <1>; 180*4882a593Smuzhiyun #size-cells = <1>; 181*4882a593Smuzhiyun ranges = <0 0xfffe8000 0x8100>; 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun timer: timer@80 { 184*4882a593Smuzhiyun compatible = "brcm,bcm6328-timer", "syscon"; 185*4882a593Smuzhiyun reg = <0x80 0x3c>; 186*4882a593Smuzhiyun }; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun serial0: serial@600 { 189*4882a593Smuzhiyun compatible = "brcm,bcm6345-uart"; 190*4882a593Smuzhiyun reg = <0x600 0x1b>; 191*4882a593Smuzhiyun interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>; 192*4882a593Smuzhiyun clocks = <&periph_clk>; 193*4882a593Smuzhiyun clock-names = "periph"; 194*4882a593Smuzhiyun status = "disabled"; 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun serial1: serial@620 { 198*4882a593Smuzhiyun compatible = "brcm,bcm6345-uart"; 199*4882a593Smuzhiyun reg = <0x620 0x1b>; 200*4882a593Smuzhiyun interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; 201*4882a593Smuzhiyun clocks = <&periph_clk>; 202*4882a593Smuzhiyun clock-names = "periph"; 203*4882a593Smuzhiyun status = "disabled"; 204*4882a593Smuzhiyun }; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun nand_controller: nand-controller@2000 { 207*4882a593Smuzhiyun #address-cells = <1>; 208*4882a593Smuzhiyun #size-cells = <0>; 209*4882a593Smuzhiyun compatible = "brcm,nand-bcm63138", "brcm,brcmnand-v7.0", "brcm,brcmnand"; 210*4882a593Smuzhiyun reg = <0x2000 0x600>, <0xf0 0x10>; 211*4882a593Smuzhiyun reg-names = "nand", "nand-int-base"; 212*4882a593Smuzhiyun status = "disabled"; 213*4882a593Smuzhiyun interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>; 214*4882a593Smuzhiyun interrupt-names = "nand"; 215*4882a593Smuzhiyun }; 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun bootlut: bootlut@8000 { 218*4882a593Smuzhiyun compatible = "brcm,bcm63138-bootlut"; 219*4882a593Smuzhiyun reg = <0x8000 0x50>; 220*4882a593Smuzhiyun }; 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun reboot { 223*4882a593Smuzhiyun compatible = "syscon-reboot"; 224*4882a593Smuzhiyun regmap = <&timer>; 225*4882a593Smuzhiyun offset = <0x34>; 226*4882a593Smuzhiyun mask = <1>; 227*4882a593Smuzhiyun }; 228*4882a593Smuzhiyun }; 229*4882a593Smuzhiyun}; 230