1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Device Tree for the ARM Integrator/CP platform 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun/dts-v1/; 7*4882a593Smuzhiyun/include/ "integrator.dtsi" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun/ { 10*4882a593Smuzhiyun model = "ARM Integrator/CP"; 11*4882a593Smuzhiyun compatible = "arm,integrator-cp"; 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun chosen { 14*4882a593Smuzhiyun bootargs = "root=/dev/ram0 console=ttyAMA0,38400n8 earlyprintk"; 15*4882a593Smuzhiyun }; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun cpus { 18*4882a593Smuzhiyun #address-cells = <1>; 19*4882a593Smuzhiyun #size-cells = <0>; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun cpu@0 { 22*4882a593Smuzhiyun device_type = "cpu"; 23*4882a593Smuzhiyun /* 24*4882a593Smuzhiyun * Since the board has pluggable CPU modules, we 25*4882a593Smuzhiyun * cannot define a proper compatible here. Let the 26*4882a593Smuzhiyun * boot loader fill in the apropriate compatible 27*4882a593Smuzhiyun * string if necessary. 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun /* compatible = "arm,arm920t"; */ 30*4882a593Smuzhiyun reg = <0>; 31*4882a593Smuzhiyun /* 32*4882a593Smuzhiyun * TBD comment. 33*4882a593Smuzhiyun */ 34*4882a593Smuzhiyun /* kHz uV */ 35*4882a593Smuzhiyun operating-points = <50000 0 36*4882a593Smuzhiyun 48000 0>; 37*4882a593Smuzhiyun clocks = <&cmcore>; 38*4882a593Smuzhiyun clock-names = "cpu"; 39*4882a593Smuzhiyun clock-latency = <1000000>; /* 1 ms */ 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* 44*4882a593Smuzhiyun * The Integrator/CP overall clocking architecture can be found in 45*4882a593Smuzhiyun * ARM DUI 0184B page 7-28 "Integrator/CP922T system clocks" which 46*4882a593Smuzhiyun * appear to illustrate the layout used in most configurations. 47*4882a593Smuzhiyun */ 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* The codec chrystal operates at 24.576 MHz */ 50*4882a593Smuzhiyun xtal_codec: xtal24.576@24.576M { 51*4882a593Smuzhiyun #clock-cells = <0>; 52*4882a593Smuzhiyun compatible = "fixed-clock"; 53*4882a593Smuzhiyun clock-frequency = <24576000>; 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /* The chrystal is divided by 2 by the codec for the AACI bit clock */ 57*4882a593Smuzhiyun aaci_bitclk: aaci_bitclk@12.288M { 58*4882a593Smuzhiyun #clock-cells = <0>; 59*4882a593Smuzhiyun compatible = "fixed-factor-clock"; 60*4882a593Smuzhiyun clock-div = <2>; 61*4882a593Smuzhiyun clock-mult = <1>; 62*4882a593Smuzhiyun clocks = <&xtal_codec>; 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* This is a 25MHz chrystal on the base board */ 66*4882a593Smuzhiyun xtal25mhz: xtal25mhz@25M { 67*4882a593Smuzhiyun #clock-cells = <0>; 68*4882a593Smuzhiyun compatible = "fixed-clock"; 69*4882a593Smuzhiyun clock-frequency = <25000000>; 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* The UART clock is 14.74 MHz divided from 25MHz by an ICS525 */ 73*4882a593Smuzhiyun uartclk: uartclk@14.74M { 74*4882a593Smuzhiyun #clock-cells = <0>; 75*4882a593Smuzhiyun compatible = "fixed-clock"; 76*4882a593Smuzhiyun clock-frequency = <14745600>; 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /* Actually sysclk I think */ 80*4882a593Smuzhiyun pclk: pclk@0 { 81*4882a593Smuzhiyun #clock-cells = <0>; 82*4882a593Smuzhiyun compatible = "fixed-clock"; 83*4882a593Smuzhiyun clock-frequency = <0>; 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun core-module@10000000 { 87*4882a593Smuzhiyun /* 24 MHz chrystal on the core module */ 88*4882a593Smuzhiyun cm24mhz: cm24mhz@24M { 89*4882a593Smuzhiyun #clock-cells = <0>; 90*4882a593Smuzhiyun compatible = "fixed-clock"; 91*4882a593Smuzhiyun clock-frequency = <24000000>; 92*4882a593Smuzhiyun }; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* Oscillator on the core module, clocks the CPU core */ 95*4882a593Smuzhiyun cmcore: cmosc@24M { 96*4882a593Smuzhiyun compatible = "arm,syscon-icst525-integratorcp-cm-core"; 97*4882a593Smuzhiyun #clock-cells = <0>; 98*4882a593Smuzhiyun lock-offset = <0x14>; 99*4882a593Smuzhiyun vco-offset = <0x08>; 100*4882a593Smuzhiyun clocks = <&cm24mhz>; 101*4882a593Smuzhiyun }; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun /* Oscillator on the core module, clocks the memory bus */ 104*4882a593Smuzhiyun cmmem: cmosc@24M { 105*4882a593Smuzhiyun compatible = "arm,syscon-icst525-integratorcp-cm-mem"; 106*4882a593Smuzhiyun #clock-cells = <0>; 107*4882a593Smuzhiyun lock-offset = <0x14>; 108*4882a593Smuzhiyun vco-offset = <0x08>; 109*4882a593Smuzhiyun clocks = <&cm24mhz>; 110*4882a593Smuzhiyun }; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun /* Auxilary oscillator on the core module, clocks the CLCD */ 113*4882a593Smuzhiyun auxosc: auxosc@24M { 114*4882a593Smuzhiyun compatible = "arm,syscon-icst525"; 115*4882a593Smuzhiyun #clock-cells = <0>; 116*4882a593Smuzhiyun lock-offset = <0x14>; 117*4882a593Smuzhiyun vco-offset = <0x1c>; 118*4882a593Smuzhiyun clocks = <&cm24mhz>; 119*4882a593Smuzhiyun }; 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun /* The KMI clock is the 24 MHz oscillator divided to 8MHz */ 122*4882a593Smuzhiyun kmiclk: kmiclk@1M { 123*4882a593Smuzhiyun #clock-cells = <0>; 124*4882a593Smuzhiyun compatible = "fixed-factor-clock"; 125*4882a593Smuzhiyun clock-div = <3>; 126*4882a593Smuzhiyun clock-mult = <1>; 127*4882a593Smuzhiyun clocks = <&cm24mhz>; 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun /* The timer clock is the 24 MHz oscillator divided to 1MHz */ 131*4882a593Smuzhiyun timclk: timclk@1M { 132*4882a593Smuzhiyun #clock-cells = <0>; 133*4882a593Smuzhiyun compatible = "fixed-factor-clock"; 134*4882a593Smuzhiyun clock-div = <24>; 135*4882a593Smuzhiyun clock-mult = <1>; 136*4882a593Smuzhiyun clocks = <&cm24mhz>; 137*4882a593Smuzhiyun }; 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun syscon { 141*4882a593Smuzhiyun compatible = "arm,integrator-cp-syscon", "syscon"; 142*4882a593Smuzhiyun reg = <0xcb000000 0x100>; 143*4882a593Smuzhiyun }; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun timer0: timer@13000000 { 146*4882a593Smuzhiyun /* TIMER0 runs directly on the 25MHz chrystal */ 147*4882a593Smuzhiyun compatible = "arm,integrator-cp-timer"; 148*4882a593Smuzhiyun clocks = <&xtal25mhz>; 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun timer1: timer@13000100 { 152*4882a593Smuzhiyun /* TIMER1 runs @ 1MHz */ 153*4882a593Smuzhiyun compatible = "arm,integrator-cp-timer"; 154*4882a593Smuzhiyun clocks = <&timclk>; 155*4882a593Smuzhiyun }; 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun timer2: timer@13000200 { 158*4882a593Smuzhiyun /* TIMER2 runs @ 1MHz */ 159*4882a593Smuzhiyun compatible = "arm,integrator-cp-timer"; 160*4882a593Smuzhiyun clocks = <&timclk>; 161*4882a593Smuzhiyun }; 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun pic: pic@14000000 { 164*4882a593Smuzhiyun valid-mask = <0x1fc003ff>; 165*4882a593Smuzhiyun }; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun cic: cic@10000040 { 168*4882a593Smuzhiyun compatible = "arm,versatile-fpga-irq"; 169*4882a593Smuzhiyun #interrupt-cells = <1>; 170*4882a593Smuzhiyun interrupt-controller; 171*4882a593Smuzhiyun reg = <0x10000040 0x100>; 172*4882a593Smuzhiyun clear-mask = <0xffffffff>; 173*4882a593Smuzhiyun valid-mask = <0x00000007>; 174*4882a593Smuzhiyun }; 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun /* The SIC is cascaded off IRQ 26 on the PIC */ 177*4882a593Smuzhiyun sic: sic@ca000000 { 178*4882a593Smuzhiyun compatible = "arm,versatile-fpga-irq"; 179*4882a593Smuzhiyun interrupt-parent = <&pic>; 180*4882a593Smuzhiyun interrupts = <26>; 181*4882a593Smuzhiyun #interrupt-cells = <1>; 182*4882a593Smuzhiyun interrupt-controller; 183*4882a593Smuzhiyun reg = <0xca000000 0x100>; 184*4882a593Smuzhiyun clear-mask = <0x00000fff>; 185*4882a593Smuzhiyun valid-mask = <0x00000fff>; 186*4882a593Smuzhiyun }; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun ethernet@c8000000 { 189*4882a593Smuzhiyun compatible = "smsc,lan91c111"; 190*4882a593Smuzhiyun reg = <0xc8000000 0x10>; 191*4882a593Smuzhiyun interrupt-parent = <&pic>; 192*4882a593Smuzhiyun interrupts = <27>; 193*4882a593Smuzhiyun }; 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun bridge { 196*4882a593Smuzhiyun compatible = "ti,ths8134a", "ti,ths8134"; 197*4882a593Smuzhiyun #address-cells = <1>; 198*4882a593Smuzhiyun #size-cells = <0>; 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun ports { 201*4882a593Smuzhiyun #address-cells = <1>; 202*4882a593Smuzhiyun #size-cells = <0>; 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun port@0 { 205*4882a593Smuzhiyun reg = <0>; 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun vga_bridge_in: endpoint { 208*4882a593Smuzhiyun remote-endpoint = <&clcd_pads_vga_dac>; 209*4882a593Smuzhiyun }; 210*4882a593Smuzhiyun }; 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun port@1 { 213*4882a593Smuzhiyun reg = <1>; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun vga_bridge_out: endpoint { 216*4882a593Smuzhiyun remote-endpoint = <&vga_con_in>; 217*4882a593Smuzhiyun }; 218*4882a593Smuzhiyun }; 219*4882a593Smuzhiyun }; 220*4882a593Smuzhiyun }; 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun vga { 223*4882a593Smuzhiyun compatible = "vga-connector"; 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun port { 226*4882a593Smuzhiyun vga_con_in: endpoint { 227*4882a593Smuzhiyun remote-endpoint = <&vga_bridge_out>; 228*4882a593Smuzhiyun }; 229*4882a593Smuzhiyun }; 230*4882a593Smuzhiyun }; 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun fpga { 233*4882a593Smuzhiyun /* 234*4882a593Smuzhiyun * These PrimeCells are at the same location and using 235*4882a593Smuzhiyun * the same interrupts in all Integrators, but in the CP 236*4882a593Smuzhiyun * slightly newer versions are deployed. 237*4882a593Smuzhiyun */ 238*4882a593Smuzhiyun rtc@15000000 { 239*4882a593Smuzhiyun compatible = "arm,pl031", "arm,primecell"; 240*4882a593Smuzhiyun clocks = <&pclk>; 241*4882a593Smuzhiyun clock-names = "apb_pclk"; 242*4882a593Smuzhiyun }; 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun uart@16000000 { 245*4882a593Smuzhiyun compatible = "arm,pl011", "arm,primecell"; 246*4882a593Smuzhiyun clocks = <&uartclk>, <&pclk>; 247*4882a593Smuzhiyun clock-names = "uartclk", "apb_pclk"; 248*4882a593Smuzhiyun }; 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun uart@17000000 { 251*4882a593Smuzhiyun compatible = "arm,pl011", "arm,primecell"; 252*4882a593Smuzhiyun clocks = <&uartclk>, <&pclk>; 253*4882a593Smuzhiyun clock-names = "uartclk", "apb_pclk"; 254*4882a593Smuzhiyun }; 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun kmi@18000000 { 257*4882a593Smuzhiyun compatible = "arm,pl050", "arm,primecell"; 258*4882a593Smuzhiyun clocks = <&kmiclk>, <&pclk>; 259*4882a593Smuzhiyun clock-names = "KMIREFCLK", "apb_pclk"; 260*4882a593Smuzhiyun }; 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun kmi@19000000 { 263*4882a593Smuzhiyun compatible = "arm,pl050", "arm,primecell"; 264*4882a593Smuzhiyun clocks = <&kmiclk>, <&pclk>; 265*4882a593Smuzhiyun clock-names = "KMIREFCLK", "apb_pclk"; 266*4882a593Smuzhiyun }; 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun /* 269*4882a593Smuzhiyun * These PrimeCells are only available on the Integrator/CP 270*4882a593Smuzhiyun */ 271*4882a593Smuzhiyun mmc@1c000000 { 272*4882a593Smuzhiyun compatible = "arm,pl180", "arm,primecell"; 273*4882a593Smuzhiyun reg = <0x1c000000 0x1000>; 274*4882a593Smuzhiyun interrupts = <23 24>; 275*4882a593Smuzhiyun max-frequency = <515633>; 276*4882a593Smuzhiyun clocks = <&uartclk>, <&pclk>; 277*4882a593Smuzhiyun clock-names = "mclk", "apb_pclk"; 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun aaci@1d000000 { 281*4882a593Smuzhiyun compatible = "arm,pl041", "arm,primecell"; 282*4882a593Smuzhiyun reg = <0x1d000000 0x1000>; 283*4882a593Smuzhiyun interrupts = <25>; 284*4882a593Smuzhiyun clocks = <&pclk>; 285*4882a593Smuzhiyun clock-names = "apb_pclk"; 286*4882a593Smuzhiyun }; 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun clcd@c0000000 { 289*4882a593Smuzhiyun compatible = "arm,pl110", "arm,primecell"; 290*4882a593Smuzhiyun reg = <0xC0000000 0x1000>; 291*4882a593Smuzhiyun interrupts = <22>; 292*4882a593Smuzhiyun clocks = <&auxosc>, <&pclk>; 293*4882a593Smuzhiyun clock-names = "clcdclk", "apb_pclk"; 294*4882a593Smuzhiyun /* 640x480 16bpp @ 25.175MHz is 36827428 bytes/s */ 295*4882a593Smuzhiyun max-memory-bandwidth = <40000000>; 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /* 298*4882a593Smuzhiyun * This port is routed through a PLD (Programmable 299*4882a593Smuzhiyun * Logic Device) that routes the output from the CLCD 300*4882a593Smuzhiyun * (after transformations) to the VGA DAC and also an 301*4882a593Smuzhiyun * external panel connector. The PLD is essential for 302*4882a593Smuzhiyun * supporting RGB565/BGR565. 303*4882a593Smuzhiyun * 304*4882a593Smuzhiyun * The signals from the port thus reaches two endpoints. 305*4882a593Smuzhiyun * The PLD is managed through a few special bits in the 306*4882a593Smuzhiyun * FPGA "sysreg". 307*4882a593Smuzhiyun * 308*4882a593Smuzhiyun * This arrangement can be clearly seen in 309*4882a593Smuzhiyun * ARM DUI 0225D, page 3-41, figure 3-19. 310*4882a593Smuzhiyun */ 311*4882a593Smuzhiyun port@0 { 312*4882a593Smuzhiyun clcd_pads_vga_dac: endpoint { 313*4882a593Smuzhiyun remote-endpoint = <&vga_bridge_in>; 314*4882a593Smuzhiyun arm,pl11x,tft-r0g0b0-pads = <0 8 16>; 315*4882a593Smuzhiyun }; 316*4882a593Smuzhiyun }; 317*4882a593Smuzhiyun }; 318*4882a593Smuzhiyun }; 319*4882a593Smuzhiyun}; 320