1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * ARM Ltd. Versatile Express 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * CoreTile Express A9x4 6*4882a593Smuzhiyun * Cortex-A9 MPCore (V2P-CA9) 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * HBI-0191B 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun/dts-v1/; 12*4882a593Smuzhiyun#include "vexpress-v2m.dtsi" 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun/ { 15*4882a593Smuzhiyun model = "V2P-CA9"; 16*4882a593Smuzhiyun arm,hbi = <0x191>; 17*4882a593Smuzhiyun arm,vexpress,site = <0xf>; 18*4882a593Smuzhiyun compatible = "arm,vexpress,v2p-ca9", "arm,vexpress"; 19*4882a593Smuzhiyun interrupt-parent = <&gic>; 20*4882a593Smuzhiyun #address-cells = <1>; 21*4882a593Smuzhiyun #size-cells = <1>; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun chosen { }; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun aliases { 26*4882a593Smuzhiyun serial0 = &v2m_serial0; 27*4882a593Smuzhiyun serial1 = &v2m_serial1; 28*4882a593Smuzhiyun serial2 = &v2m_serial2; 29*4882a593Smuzhiyun serial3 = &v2m_serial3; 30*4882a593Smuzhiyun i2c0 = &v2m_i2c_dvi; 31*4882a593Smuzhiyun i2c1 = &v2m_i2c_pcie; 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun cpus { 35*4882a593Smuzhiyun #address-cells = <1>; 36*4882a593Smuzhiyun #size-cells = <0>; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun A9_0: cpu@0 { 39*4882a593Smuzhiyun device_type = "cpu"; 40*4882a593Smuzhiyun compatible = "arm,cortex-a9"; 41*4882a593Smuzhiyun reg = <0>; 42*4882a593Smuzhiyun next-level-cache = <&L2>; 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun A9_1: cpu@1 { 46*4882a593Smuzhiyun device_type = "cpu"; 47*4882a593Smuzhiyun compatible = "arm,cortex-a9"; 48*4882a593Smuzhiyun reg = <1>; 49*4882a593Smuzhiyun next-level-cache = <&L2>; 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun A9_2: cpu@2 { 53*4882a593Smuzhiyun device_type = "cpu"; 54*4882a593Smuzhiyun compatible = "arm,cortex-a9"; 55*4882a593Smuzhiyun reg = <2>; 56*4882a593Smuzhiyun next-level-cache = <&L2>; 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun A9_3: cpu@3 { 60*4882a593Smuzhiyun device_type = "cpu"; 61*4882a593Smuzhiyun compatible = "arm,cortex-a9"; 62*4882a593Smuzhiyun reg = <3>; 63*4882a593Smuzhiyun next-level-cache = <&L2>; 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun memory@60000000 { 68*4882a593Smuzhiyun device_type = "memory"; 69*4882a593Smuzhiyun reg = <0x60000000 0x40000000>; 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun reserved-memory { 73*4882a593Smuzhiyun #address-cells = <1>; 74*4882a593Smuzhiyun #size-cells = <1>; 75*4882a593Smuzhiyun ranges; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /* Chipselect 3 is physically at 0x4c000000 */ 78*4882a593Smuzhiyun vram: vram@4c000000 { 79*4882a593Smuzhiyun /* 8 MB of designated video RAM */ 80*4882a593Smuzhiyun compatible = "shared-dma-pool"; 81*4882a593Smuzhiyun reg = <0x4c000000 0x00800000>; 82*4882a593Smuzhiyun no-map; 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun clcd@10020000 { 87*4882a593Smuzhiyun compatible = "arm,pl111", "arm,primecell"; 88*4882a593Smuzhiyun reg = <0x10020000 0x1000>; 89*4882a593Smuzhiyun interrupt-names = "combined"; 90*4882a593Smuzhiyun interrupts = <0 44 4>; 91*4882a593Smuzhiyun clocks = <&oscclk1>, <&oscclk2>; 92*4882a593Smuzhiyun clock-names = "clcdclk", "apb_pclk"; 93*4882a593Smuzhiyun /* 1024x768 16bpp @65MHz */ 94*4882a593Smuzhiyun max-memory-bandwidth = <95000000>; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun port { 97*4882a593Smuzhiyun clcd_pads_ct: endpoint { 98*4882a593Smuzhiyun remote-endpoint = <&dvi_bridge_in_ct>; 99*4882a593Smuzhiyun arm,pl11x,tft-r0g0b0-pads = <0 8 16>; 100*4882a593Smuzhiyun }; 101*4882a593Smuzhiyun }; 102*4882a593Smuzhiyun }; 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun memory-controller@100e0000 { 105*4882a593Smuzhiyun compatible = "arm,pl341", "arm,primecell"; 106*4882a593Smuzhiyun reg = <0x100e0000 0x1000>; 107*4882a593Smuzhiyun clocks = <&oscclk2>; 108*4882a593Smuzhiyun clock-names = "apb_pclk"; 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun memory-controller@100e1000 { 112*4882a593Smuzhiyun compatible = "arm,pl354", "arm,primecell"; 113*4882a593Smuzhiyun reg = <0x100e1000 0x1000>; 114*4882a593Smuzhiyun interrupts = <0 45 4>, 115*4882a593Smuzhiyun <0 46 4>; 116*4882a593Smuzhiyun clocks = <&oscclk2>; 117*4882a593Smuzhiyun clock-names = "apb_pclk"; 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun timer@100e4000 { 121*4882a593Smuzhiyun compatible = "arm,sp804", "arm,primecell"; 122*4882a593Smuzhiyun reg = <0x100e4000 0x1000>; 123*4882a593Smuzhiyun interrupts = <0 48 4>, 124*4882a593Smuzhiyun <0 49 4>; 125*4882a593Smuzhiyun clocks = <&oscclk2>, <&oscclk2>, <&oscclk2>; 126*4882a593Smuzhiyun clock-names = "timer0clk", "timer1clk", "apb_pclk"; 127*4882a593Smuzhiyun status = "disabled"; 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun watchdog@100e5000 { 131*4882a593Smuzhiyun compatible = "arm,sp805", "arm,primecell"; 132*4882a593Smuzhiyun reg = <0x100e5000 0x1000>; 133*4882a593Smuzhiyun interrupts = <0 51 4>; 134*4882a593Smuzhiyun clocks = <&oscclk2>, <&oscclk2>; 135*4882a593Smuzhiyun clock-names = "wdog_clk", "apb_pclk"; 136*4882a593Smuzhiyun }; 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun scu@1e000000 { 139*4882a593Smuzhiyun compatible = "arm,cortex-a9-scu"; 140*4882a593Smuzhiyun reg = <0x1e000000 0x58>; 141*4882a593Smuzhiyun }; 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun timer@1e000600 { 144*4882a593Smuzhiyun compatible = "arm,cortex-a9-twd-timer"; 145*4882a593Smuzhiyun reg = <0x1e000600 0x20>; 146*4882a593Smuzhiyun interrupts = <1 13 0xf04>; 147*4882a593Smuzhiyun }; 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun watchdog@1e000620 { 150*4882a593Smuzhiyun compatible = "arm,cortex-a9-twd-wdt"; 151*4882a593Smuzhiyun reg = <0x1e000620 0x20>; 152*4882a593Smuzhiyun interrupts = <1 14 0xf04>; 153*4882a593Smuzhiyun }; 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun gic: interrupt-controller@1e001000 { 156*4882a593Smuzhiyun compatible = "arm,cortex-a9-gic"; 157*4882a593Smuzhiyun #interrupt-cells = <3>; 158*4882a593Smuzhiyun #address-cells = <0>; 159*4882a593Smuzhiyun interrupt-controller; 160*4882a593Smuzhiyun reg = <0x1e001000 0x1000>, 161*4882a593Smuzhiyun <0x1e000100 0x100>; 162*4882a593Smuzhiyun }; 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun L2: cache-controller@1e00a000 { 165*4882a593Smuzhiyun compatible = "arm,pl310-cache"; 166*4882a593Smuzhiyun reg = <0x1e00a000 0x1000>; 167*4882a593Smuzhiyun interrupts = <0 43 4>; 168*4882a593Smuzhiyun cache-unified; 169*4882a593Smuzhiyun cache-level = <2>; 170*4882a593Smuzhiyun arm,data-latency = <1 1 1>; 171*4882a593Smuzhiyun arm,tag-latency = <1 1 1>; 172*4882a593Smuzhiyun }; 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun pmu { 175*4882a593Smuzhiyun compatible = "arm,cortex-a9-pmu"; 176*4882a593Smuzhiyun interrupts = <0 60 4>, 177*4882a593Smuzhiyun <0 61 4>, 178*4882a593Smuzhiyun <0 62 4>, 179*4882a593Smuzhiyun <0 63 4>; 180*4882a593Smuzhiyun interrupt-affinity = <&A9_0>, <&A9_1>, <&A9_2>, <&A9_3>; 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun }; 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun dcc { 185*4882a593Smuzhiyun compatible = "arm,vexpress,config-bus"; 186*4882a593Smuzhiyun arm,vexpress,config-bridge = <&v2m_sysreg>; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun oscclk0: extsaxiclk { 189*4882a593Smuzhiyun /* ACLK clock to the AXI master port on the test chip */ 190*4882a593Smuzhiyun compatible = "arm,vexpress-osc"; 191*4882a593Smuzhiyun arm,vexpress-sysreg,func = <1 0>; 192*4882a593Smuzhiyun freq-range = <30000000 50000000>; 193*4882a593Smuzhiyun #clock-cells = <0>; 194*4882a593Smuzhiyun clock-output-names = "extsaxiclk"; 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun oscclk1: clcdclk { 198*4882a593Smuzhiyun /* Reference clock for the CLCD */ 199*4882a593Smuzhiyun compatible = "arm,vexpress-osc"; 200*4882a593Smuzhiyun arm,vexpress-sysreg,func = <1 1>; 201*4882a593Smuzhiyun freq-range = <10000000 80000000>; 202*4882a593Smuzhiyun #clock-cells = <0>; 203*4882a593Smuzhiyun clock-output-names = "clcdclk"; 204*4882a593Smuzhiyun }; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun smbclk: oscclk2: tcrefclk { 207*4882a593Smuzhiyun /* Reference clock for the test chip internal PLLs */ 208*4882a593Smuzhiyun compatible = "arm,vexpress-osc"; 209*4882a593Smuzhiyun arm,vexpress-sysreg,func = <1 2>; 210*4882a593Smuzhiyun freq-range = <33000000 100000000>; 211*4882a593Smuzhiyun #clock-cells = <0>; 212*4882a593Smuzhiyun clock-output-names = "tcrefclk"; 213*4882a593Smuzhiyun }; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun volt-vd10 { 216*4882a593Smuzhiyun /* Test Chip internal logic voltage */ 217*4882a593Smuzhiyun compatible = "arm,vexpress-volt"; 218*4882a593Smuzhiyun arm,vexpress-sysreg,func = <2 0>; 219*4882a593Smuzhiyun regulator-name = "VD10"; 220*4882a593Smuzhiyun regulator-always-on; 221*4882a593Smuzhiyun label = "VD10"; 222*4882a593Smuzhiyun }; 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun volt-vd10-s2 { 225*4882a593Smuzhiyun /* PL310, L2 cache, RAM cell supply (not PL310 logic) */ 226*4882a593Smuzhiyun compatible = "arm,vexpress-volt"; 227*4882a593Smuzhiyun arm,vexpress-sysreg,func = <2 1>; 228*4882a593Smuzhiyun regulator-name = "VD10_S2"; 229*4882a593Smuzhiyun regulator-always-on; 230*4882a593Smuzhiyun label = "VD10_S2"; 231*4882a593Smuzhiyun }; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun volt-vd10-s3 { 234*4882a593Smuzhiyun /* Cortex-A9 system supply, Cores, MPEs, SCU and PL310 logic */ 235*4882a593Smuzhiyun compatible = "arm,vexpress-volt"; 236*4882a593Smuzhiyun arm,vexpress-sysreg,func = <2 2>; 237*4882a593Smuzhiyun regulator-name = "VD10_S3"; 238*4882a593Smuzhiyun regulator-always-on; 239*4882a593Smuzhiyun label = "VD10_S3"; 240*4882a593Smuzhiyun }; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun volt-vcc1v8 { 243*4882a593Smuzhiyun /* DDR2 SDRAM and Test Chip DDR2 I/O supply */ 244*4882a593Smuzhiyun compatible = "arm,vexpress-volt"; 245*4882a593Smuzhiyun arm,vexpress-sysreg,func = <2 3>; 246*4882a593Smuzhiyun regulator-name = "VCC1V8"; 247*4882a593Smuzhiyun regulator-always-on; 248*4882a593Smuzhiyun label = "VCC1V8"; 249*4882a593Smuzhiyun }; 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun volt-ddr2vtt { 252*4882a593Smuzhiyun /* DDR2 SDRAM VTT termination voltage */ 253*4882a593Smuzhiyun compatible = "arm,vexpress-volt"; 254*4882a593Smuzhiyun arm,vexpress-sysreg,func = <2 4>; 255*4882a593Smuzhiyun regulator-name = "DDR2VTT"; 256*4882a593Smuzhiyun regulator-always-on; 257*4882a593Smuzhiyun label = "DDR2VTT"; 258*4882a593Smuzhiyun }; 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun volt-vcc3v3 { 261*4882a593Smuzhiyun /* Local board supply for miscellaneous logic external to the Test Chip */ 262*4882a593Smuzhiyun arm,vexpress-sysreg,func = <2 5>; 263*4882a593Smuzhiyun compatible = "arm,vexpress-volt"; 264*4882a593Smuzhiyun regulator-name = "VCC3V3"; 265*4882a593Smuzhiyun regulator-always-on; 266*4882a593Smuzhiyun label = "VCC3V3"; 267*4882a593Smuzhiyun }; 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun amp-vd10-s2 { 270*4882a593Smuzhiyun /* PL310, L2 cache, RAM cell supply (not PL310 logic) */ 271*4882a593Smuzhiyun compatible = "arm,vexpress-amp"; 272*4882a593Smuzhiyun arm,vexpress-sysreg,func = <3 0>; 273*4882a593Smuzhiyun label = "VD10_S2"; 274*4882a593Smuzhiyun }; 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun amp-vd10-s3 { 277*4882a593Smuzhiyun /* Cortex-A9 system supply, Cores, MPEs, SCU and PL310 logic */ 278*4882a593Smuzhiyun compatible = "arm,vexpress-amp"; 279*4882a593Smuzhiyun arm,vexpress-sysreg,func = <3 1>; 280*4882a593Smuzhiyun label = "VD10_S3"; 281*4882a593Smuzhiyun }; 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun power-vd10-s2 { 284*4882a593Smuzhiyun /* PL310, L2 cache, RAM cell supply (not PL310 logic) */ 285*4882a593Smuzhiyun compatible = "arm,vexpress-power"; 286*4882a593Smuzhiyun arm,vexpress-sysreg,func = <12 0>; 287*4882a593Smuzhiyun label = "PVD10_S2"; 288*4882a593Smuzhiyun }; 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun power-vd10-s3 { 291*4882a593Smuzhiyun /* Cortex-A9 system supply, Cores, MPEs, SCU and PL310 logic */ 292*4882a593Smuzhiyun compatible = "arm,vexpress-power"; 293*4882a593Smuzhiyun arm,vexpress-sysreg,func = <12 1>; 294*4882a593Smuzhiyun label = "PVD10_S3"; 295*4882a593Smuzhiyun }; 296*4882a593Smuzhiyun }; 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun smb: bus@40000000 { 299*4882a593Smuzhiyun compatible = "simple-bus"; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun #address-cells = <2>; 302*4882a593Smuzhiyun #size-cells = <1>; 303*4882a593Smuzhiyun ranges = <0 0 0x40000000 0x04000000>, 304*4882a593Smuzhiyun <1 0 0x44000000 0x04000000>, 305*4882a593Smuzhiyun <2 0 0x48000000 0x04000000>, 306*4882a593Smuzhiyun <3 0 0x4c000000 0x04000000>, 307*4882a593Smuzhiyun <7 0 0x10000000 0x00020000>; 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun #interrupt-cells = <1>; 310*4882a593Smuzhiyun interrupt-map-mask = <0 0 63>; 311*4882a593Smuzhiyun interrupt-map = <0 0 0 &gic 0 0 4>, 312*4882a593Smuzhiyun <0 0 1 &gic 0 1 4>, 313*4882a593Smuzhiyun <0 0 2 &gic 0 2 4>, 314*4882a593Smuzhiyun <0 0 3 &gic 0 3 4>, 315*4882a593Smuzhiyun <0 0 4 &gic 0 4 4>, 316*4882a593Smuzhiyun <0 0 5 &gic 0 5 4>, 317*4882a593Smuzhiyun <0 0 6 &gic 0 6 4>, 318*4882a593Smuzhiyun <0 0 7 &gic 0 7 4>, 319*4882a593Smuzhiyun <0 0 8 &gic 0 8 4>, 320*4882a593Smuzhiyun <0 0 9 &gic 0 9 4>, 321*4882a593Smuzhiyun <0 0 10 &gic 0 10 4>, 322*4882a593Smuzhiyun <0 0 11 &gic 0 11 4>, 323*4882a593Smuzhiyun <0 0 12 &gic 0 12 4>, 324*4882a593Smuzhiyun <0 0 13 &gic 0 13 4>, 325*4882a593Smuzhiyun <0 0 14 &gic 0 14 4>, 326*4882a593Smuzhiyun <0 0 15 &gic 0 15 4>, 327*4882a593Smuzhiyun <0 0 16 &gic 0 16 4>, 328*4882a593Smuzhiyun <0 0 17 &gic 0 17 4>, 329*4882a593Smuzhiyun <0 0 18 &gic 0 18 4>, 330*4882a593Smuzhiyun <0 0 19 &gic 0 19 4>, 331*4882a593Smuzhiyun <0 0 20 &gic 0 20 4>, 332*4882a593Smuzhiyun <0 0 21 &gic 0 21 4>, 333*4882a593Smuzhiyun <0 0 22 &gic 0 22 4>, 334*4882a593Smuzhiyun <0 0 23 &gic 0 23 4>, 335*4882a593Smuzhiyun <0 0 24 &gic 0 24 4>, 336*4882a593Smuzhiyun <0 0 25 &gic 0 25 4>, 337*4882a593Smuzhiyun <0 0 26 &gic 0 26 4>, 338*4882a593Smuzhiyun <0 0 27 &gic 0 27 4>, 339*4882a593Smuzhiyun <0 0 28 &gic 0 28 4>, 340*4882a593Smuzhiyun <0 0 29 &gic 0 29 4>, 341*4882a593Smuzhiyun <0 0 30 &gic 0 30 4>, 342*4882a593Smuzhiyun <0 0 31 &gic 0 31 4>, 343*4882a593Smuzhiyun <0 0 32 &gic 0 32 4>, 344*4882a593Smuzhiyun <0 0 33 &gic 0 33 4>, 345*4882a593Smuzhiyun <0 0 34 &gic 0 34 4>, 346*4882a593Smuzhiyun <0 0 35 &gic 0 35 4>, 347*4882a593Smuzhiyun <0 0 36 &gic 0 36 4>, 348*4882a593Smuzhiyun <0 0 37 &gic 0 37 4>, 349*4882a593Smuzhiyun <0 0 38 &gic 0 38 4>, 350*4882a593Smuzhiyun <0 0 39 &gic 0 39 4>, 351*4882a593Smuzhiyun <0 0 40 &gic 0 40 4>, 352*4882a593Smuzhiyun <0 0 41 &gic 0 41 4>, 353*4882a593Smuzhiyun <0 0 42 &gic 0 42 4>; 354*4882a593Smuzhiyun }; 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun site2: hsb@e0000000 { 357*4882a593Smuzhiyun compatible = "simple-bus"; 358*4882a593Smuzhiyun #address-cells = <1>; 359*4882a593Smuzhiyun #size-cells = <1>; 360*4882a593Smuzhiyun ranges = <0 0xe0000000 0x20000000>; 361*4882a593Smuzhiyun #interrupt-cells = <1>; 362*4882a593Smuzhiyun interrupt-map-mask = <0 3>; 363*4882a593Smuzhiyun interrupt-map = <0 0 &gic 0 36 4>, 364*4882a593Smuzhiyun <0 1 &gic 0 37 4>, 365*4882a593Smuzhiyun <0 2 &gic 0 38 4>, 366*4882a593Smuzhiyun <0 3 &gic 0 39 4>; 367*4882a593Smuzhiyun }; 368*4882a593Smuzhiyun}; 369