1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0-or-later 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * ox820.dtsi - Device tree file for Oxford Semiconductor OX820 SoC 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2016 Neil Armstrong <narmstrong@baylibre.com> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun#include <dt-bindings/interrupt-controller/arm-gic.h> 9*4882a593Smuzhiyun#include <dt-bindings/clock/oxsemi,ox820.h> 10*4882a593Smuzhiyun#include <dt-bindings/reset/oxsemi,ox820.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun/ { 13*4882a593Smuzhiyun #address-cells = <1>; 14*4882a593Smuzhiyun #size-cells = <1>; 15*4882a593Smuzhiyun compatible = "oxsemi,ox820"; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun cpus { 18*4882a593Smuzhiyun #address-cells = <1>; 19*4882a593Smuzhiyun #size-cells = <0>; 20*4882a593Smuzhiyun enable-method = "oxsemi,ox820-smp"; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun cpu@0 { 23*4882a593Smuzhiyun device_type = "cpu"; 24*4882a593Smuzhiyun compatible = "arm,arm11mpcore"; 25*4882a593Smuzhiyun clocks = <&armclk>; 26*4882a593Smuzhiyun reg = <0>; 27*4882a593Smuzhiyun }; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun cpu@1 { 30*4882a593Smuzhiyun device_type = "cpu"; 31*4882a593Smuzhiyun compatible = "arm,arm11mpcore"; 32*4882a593Smuzhiyun clocks = <&armclk>; 33*4882a593Smuzhiyun reg = <1>; 34*4882a593Smuzhiyun }; 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun memory { 38*4882a593Smuzhiyun device_type = "memory"; 39*4882a593Smuzhiyun /* Max 512MB @ 0x60000000 */ 40*4882a593Smuzhiyun reg = <0x60000000 0x20000000>; 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun clocks { 44*4882a593Smuzhiyun osc: oscillator { 45*4882a593Smuzhiyun compatible = "fixed-clock"; 46*4882a593Smuzhiyun #clock-cells = <0>; 47*4882a593Smuzhiyun clock-frequency = <25000000>; 48*4882a593Smuzhiyun }; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun gmacclk: gmacclk { 51*4882a593Smuzhiyun compatible = "fixed-clock"; 52*4882a593Smuzhiyun #clock-cells = <0>; 53*4882a593Smuzhiyun clock-frequency = <125000000>; 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun sysclk: sysclk { 57*4882a593Smuzhiyun compatible = "fixed-factor-clock"; 58*4882a593Smuzhiyun #clock-cells = <0>; 59*4882a593Smuzhiyun clock-div = <4>; 60*4882a593Smuzhiyun clock-mult = <1>; 61*4882a593Smuzhiyun clocks = <&osc>; 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun plla: plla { 65*4882a593Smuzhiyun compatible = "fixed-clock"; 66*4882a593Smuzhiyun #clock-cells = <0>; 67*4882a593Smuzhiyun clock-frequency = <850000000>; 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun armclk: armclk { 71*4882a593Smuzhiyun compatible = "fixed-factor-clock"; 72*4882a593Smuzhiyun #clock-cells = <0>; 73*4882a593Smuzhiyun clock-div = <2>; 74*4882a593Smuzhiyun clock-mult = <1>; 75*4882a593Smuzhiyun clocks = <&plla>; 76*4882a593Smuzhiyun }; 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun soc { 80*4882a593Smuzhiyun #address-cells = <1>; 81*4882a593Smuzhiyun #size-cells = <1>; 82*4882a593Smuzhiyun compatible = "simple-bus"; 83*4882a593Smuzhiyun ranges; 84*4882a593Smuzhiyun interrupt-parent = <&gic>; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun nandc: nand-controller@41000000 { 87*4882a593Smuzhiyun compatible = "oxsemi,ox820-nand"; 88*4882a593Smuzhiyun reg = <0x41000000 0x100000>; 89*4882a593Smuzhiyun clocks = <&stdclk CLK_820_NAND>; 90*4882a593Smuzhiyun resets = <&reset RESET_NAND>; 91*4882a593Smuzhiyun #address-cells = <1>; 92*4882a593Smuzhiyun #size-cells = <0>; 93*4882a593Smuzhiyun status = "disabled"; 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun etha: ethernet@40400000 { 97*4882a593Smuzhiyun compatible = "oxsemi,ox820-dwmac", "snps,dwmac"; 98*4882a593Smuzhiyun reg = <0x40400000 0x2000>; 99*4882a593Smuzhiyun interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 100*4882a593Smuzhiyun <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; 101*4882a593Smuzhiyun interrupt-names = "macirq", "eth_wake_irq"; 102*4882a593Smuzhiyun mac-address = [000000000000]; /* Filled in by U-Boot */ 103*4882a593Smuzhiyun phy-mode = "rgmii"; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun clocks = <&stdclk CLK_820_ETHA>, <&gmacclk>; 106*4882a593Smuzhiyun clock-names = "gmac", "stmmaceth"; 107*4882a593Smuzhiyun resets = <&reset RESET_MAC>; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun /* Regmap for sys registers */ 110*4882a593Smuzhiyun oxsemi,sys-ctrl = <&sys>; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun status = "disabled"; 113*4882a593Smuzhiyun }; 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun apb-bridge@44000000 { 116*4882a593Smuzhiyun #address-cells = <1>; 117*4882a593Smuzhiyun #size-cells = <1>; 118*4882a593Smuzhiyun compatible = "simple-bus"; 119*4882a593Smuzhiyun ranges = <0 0x44000000 0x1000000>; 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun pinctrl: pinctrl { 122*4882a593Smuzhiyun compatible = "oxsemi,ox820-pinctrl"; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* Regmap for sys registers */ 125*4882a593Smuzhiyun oxsemi,sys-ctrl = <&sys>; 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun pinctrl_uart0: uart0 { 128*4882a593Smuzhiyun uart0 { 129*4882a593Smuzhiyun pins = "gpio30", "gpio31"; 130*4882a593Smuzhiyun function = "fct5"; 131*4882a593Smuzhiyun }; 132*4882a593Smuzhiyun }; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun pinctrl_uart0_modem: uart0_modem { 135*4882a593Smuzhiyun uart0_modem_a { 136*4882a593Smuzhiyun pins = "gpio24", "gpio24", "gpio26", "gpio27"; 137*4882a593Smuzhiyun function = "fct4"; 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun uart0_modem_b { 140*4882a593Smuzhiyun pins = "gpio28", "gpio29"; 141*4882a593Smuzhiyun function = "fct5"; 142*4882a593Smuzhiyun }; 143*4882a593Smuzhiyun }; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun pinctrl_uart1: uart1 { 146*4882a593Smuzhiyun uart1 { 147*4882a593Smuzhiyun pins = "gpio7", "gpio8"; 148*4882a593Smuzhiyun function = "fct4"; 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun }; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun pinctrl_uart1_modem: uart1_modem { 153*4882a593Smuzhiyun uart1_modem { 154*4882a593Smuzhiyun pins = "gpio5", "gpio6", "gpio40", "gpio41", "gpio42", "gpio43"; 155*4882a593Smuzhiyun function = "fct4"; 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun }; 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun pinctrl_etha_mdio: etha_mdio { 160*4882a593Smuzhiyun etha_mdio { 161*4882a593Smuzhiyun pins = "gpio3", "gpio4"; 162*4882a593Smuzhiyun function = "fct1"; 163*4882a593Smuzhiyun }; 164*4882a593Smuzhiyun }; 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun pinctrl_nand: nand { 167*4882a593Smuzhiyun nand { 168*4882a593Smuzhiyun pins = "gpio12", "gpio13", "gpio14", "gpio15", 169*4882a593Smuzhiyun "gpio16", "gpio17", "gpio18", "gpio19", 170*4882a593Smuzhiyun "gpio20", "gpio21", "gpio22", "gpio23", 171*4882a593Smuzhiyun "gpio24"; 172*4882a593Smuzhiyun function = "fct1"; 173*4882a593Smuzhiyun }; 174*4882a593Smuzhiyun }; 175*4882a593Smuzhiyun }; 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun gpio0: gpio@0 { 178*4882a593Smuzhiyun compatible = "oxsemi,ox820-gpio"; 179*4882a593Smuzhiyun reg = <0x000000 0x100000>; 180*4882a593Smuzhiyun interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>; 181*4882a593Smuzhiyun #gpio-cells = <2>; 182*4882a593Smuzhiyun gpio-controller; 183*4882a593Smuzhiyun interrupt-controller; 184*4882a593Smuzhiyun #interrupt-cells = <2>; 185*4882a593Smuzhiyun ngpios = <32>; 186*4882a593Smuzhiyun oxsemi,gpio-bank = <0>; 187*4882a593Smuzhiyun gpio-ranges = <&pinctrl 0 0 32>; 188*4882a593Smuzhiyun }; 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun gpio1: gpio@100000 { 191*4882a593Smuzhiyun compatible = "oxsemi,ox820-gpio"; 192*4882a593Smuzhiyun reg = <0x100000 0x100000>; 193*4882a593Smuzhiyun interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>; 194*4882a593Smuzhiyun #gpio-cells = <2>; 195*4882a593Smuzhiyun gpio-controller; 196*4882a593Smuzhiyun interrupt-controller; 197*4882a593Smuzhiyun #interrupt-cells = <2>; 198*4882a593Smuzhiyun ngpios = <18>; 199*4882a593Smuzhiyun oxsemi,gpio-bank = <1>; 200*4882a593Smuzhiyun gpio-ranges = <&pinctrl 0 32 18>; 201*4882a593Smuzhiyun }; 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun uart0: serial@200000 { 204*4882a593Smuzhiyun compatible = "ns16550a"; 205*4882a593Smuzhiyun reg = <0x200000 0x100000>; 206*4882a593Smuzhiyun interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; 207*4882a593Smuzhiyun reg-shift = <0>; 208*4882a593Smuzhiyun fifo-size = <16>; 209*4882a593Smuzhiyun reg-io-width = <1>; 210*4882a593Smuzhiyun current-speed = <115200>; 211*4882a593Smuzhiyun no-loopback-test; 212*4882a593Smuzhiyun status = "disabled"; 213*4882a593Smuzhiyun clocks = <&sysclk>; 214*4882a593Smuzhiyun resets = <&reset RESET_UART1>; 215*4882a593Smuzhiyun }; 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun uart1: serial@300000 { 218*4882a593Smuzhiyun compatible = "ns16550a"; 219*4882a593Smuzhiyun reg = <0x200000 0x100000>; 220*4882a593Smuzhiyun interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; 221*4882a593Smuzhiyun reg-shift = <0>; 222*4882a593Smuzhiyun fifo-size = <16>; 223*4882a593Smuzhiyun reg-io-width = <1>; 224*4882a593Smuzhiyun current-speed = <115200>; 225*4882a593Smuzhiyun no-loopback-test; 226*4882a593Smuzhiyun status = "disabled"; 227*4882a593Smuzhiyun clocks = <&sysclk>; 228*4882a593Smuzhiyun resets = <&reset RESET_UART2>; 229*4882a593Smuzhiyun }; 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun rps@400000 { 232*4882a593Smuzhiyun #address-cells = <1>; 233*4882a593Smuzhiyun #size-cells = <1>; 234*4882a593Smuzhiyun compatible = "simple-bus"; 235*4882a593Smuzhiyun ranges = <0 0x400000 0x100000>; 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun intc: interrupt-controller@0 { 238*4882a593Smuzhiyun compatible = "oxsemi,ox820-rps-irq", "oxsemi,ox810se-rps-irq"; 239*4882a593Smuzhiyun interrupt-controller; 240*4882a593Smuzhiyun reg = <0 0x200>; 241*4882a593Smuzhiyun interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; 242*4882a593Smuzhiyun #interrupt-cells = <1>; 243*4882a593Smuzhiyun valid-mask = <0xffffffff>; 244*4882a593Smuzhiyun clear-mask = <0xffffffff>; 245*4882a593Smuzhiyun }; 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun timer0: timer@200 { 248*4882a593Smuzhiyun compatible = "oxsemi,ox820-rps-timer"; 249*4882a593Smuzhiyun reg = <0x200 0x40>; 250*4882a593Smuzhiyun clocks = <&sysclk>; 251*4882a593Smuzhiyun interrupt-parent = <&intc>; 252*4882a593Smuzhiyun interrupts = <4>; 253*4882a593Smuzhiyun }; 254*4882a593Smuzhiyun }; 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun sys: sys-ctrl@e00000 { 257*4882a593Smuzhiyun compatible = "oxsemi,ox820-sys-ctrl", "syscon", "simple-mfd"; 258*4882a593Smuzhiyun reg = <0xe00000 0x200000>; 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun reset: reset-controller { 261*4882a593Smuzhiyun compatible = "oxsemi,ox820-reset", "oxsemi,ox810se-reset"; 262*4882a593Smuzhiyun #reset-cells = <1>; 263*4882a593Smuzhiyun }; 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun stdclk: stdclk { 266*4882a593Smuzhiyun compatible = "oxsemi,ox820-stdclk", "oxsemi,ox810se-stdclk"; 267*4882a593Smuzhiyun #clock-cells = <1>; 268*4882a593Smuzhiyun }; 269*4882a593Smuzhiyun }; 270*4882a593Smuzhiyun }; 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun apb-bridge@47000000 { 273*4882a593Smuzhiyun #address-cells = <1>; 274*4882a593Smuzhiyun #size-cells = <1>; 275*4882a593Smuzhiyun compatible = "simple-bus"; 276*4882a593Smuzhiyun ranges = <0 0x47000000 0x1000000>; 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun scu: scu@0 { 279*4882a593Smuzhiyun compatible = "arm,arm11mp-scu"; 280*4882a593Smuzhiyun reg = <0x0 0x100>; 281*4882a593Smuzhiyun }; 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun local-timer@600 { 284*4882a593Smuzhiyun compatible = "arm,arm11mp-twd-timer"; 285*4882a593Smuzhiyun reg = <0x600 0x20>; 286*4882a593Smuzhiyun interrupts = <GIC_PPI 13 (GIC_CPU_MASK_RAW(3)|IRQ_TYPE_LEVEL_HIGH)>; 287*4882a593Smuzhiyun clocks = <&armclk>; 288*4882a593Smuzhiyun }; 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun gic: interrupt-controller@1000 { 291*4882a593Smuzhiyun compatible = "arm,arm11mp-gic"; 292*4882a593Smuzhiyun interrupt-controller; 293*4882a593Smuzhiyun #interrupt-cells = <3>; 294*4882a593Smuzhiyun reg = <0x1000 0x1000>, 295*4882a593Smuzhiyun <0x100 0x500>; 296*4882a593Smuzhiyun }; 297*4882a593Smuzhiyun }; 298*4882a593Smuzhiyun }; 299*4882a593Smuzhiyun}; 300