1/* 2 * Device Tree Source for AMCC Canyonlands (460EX) 3 * 4 * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de> 5 * 6 * This file is licensed under the terms of the GNU General Public 7 * License version 2. This program is licensed "as is" without 8 * any warranty of any kind, whether express or implied. 9 */ 10 11/ { 12 #address-cells = <2>; 13 #size-cells = <1>; 14 model = "amcc,canyonlands"; 15 compatible = "amcc,canyonlands"; 16 dcr-parent = <&/cpus/cpu@0>; 17 18 aliases { 19 ethernet0 = &EMAC0; 20 ethernet1 = &EMAC1; 21 serial0 = &UART0; 22 serial1 = &UART1; 23 }; 24 25 cpus { 26 #address-cells = <1>; 27 #size-cells = <0>; 28 29 cpu@0 { 30 device_type = "cpu"; 31 model = "PowerPC,460EX"; 32 reg = <0>; 33 clock-frequency = <0>; /* Filled in by U-Boot */ 34 timebase-frequency = <0>; /* Filled in by U-Boot */ 35 i-cache-line-size = <20>; 36 d-cache-line-size = <20>; 37 i-cache-size = <8000>; 38 d-cache-size = <8000>; 39 dcr-controller; 40 dcr-access-method = "native"; 41 }; 42 }; 43 44 memory { 45 device_type = "memory"; 46 reg = <0 0 0>; /* Filled in by U-Boot */ 47 }; 48 49 UIC0: interrupt-controller0 { 50 compatible = "ibm,uic-460ex","ibm,uic"; 51 interrupt-controller; 52 cell-index = <0>; 53 dcr-reg = <0c0 009>; 54 #address-cells = <0>; 55 #size-cells = <0>; 56 #interrupt-cells = <2>; 57 }; 58 59 UIC1: interrupt-controller1 { 60 compatible = "ibm,uic-460ex","ibm,uic"; 61 interrupt-controller; 62 cell-index = <1>; 63 dcr-reg = <0d0 009>; 64 #address-cells = <0>; 65 #size-cells = <0>; 66 #interrupt-cells = <2>; 67 interrupts = <1e 4 1f 4>; /* cascade */ 68 interrupt-parent = <&UIC0>; 69 }; 70 71 UIC2: interrupt-controller2 { 72 compatible = "ibm,uic-460ex","ibm,uic"; 73 interrupt-controller; 74 cell-index = <2>; 75 dcr-reg = <0e0 009>; 76 #address-cells = <0>; 77 #size-cells = <0>; 78 #interrupt-cells = <2>; 79 interrupts = <a 4 b 4>; /* cascade */ 80 interrupt-parent = <&UIC0>; 81 }; 82 83 UIC3: interrupt-controller3 { 84 compatible = "ibm,uic-460ex","ibm,uic"; 85 interrupt-controller; 86 cell-index = <3>; 87 dcr-reg = <0f0 009>; 88 #address-cells = <0>; 89 #size-cells = <0>; 90 #interrupt-cells = <2>; 91 interrupts = <10 4 11 4>; /* cascade */ 92 interrupt-parent = <&UIC0>; 93 }; 94 95 SDR0: sdr { 96 compatible = "ibm,sdr-460ex"; 97 dcr-reg = <00e 002>; 98 }; 99 100 CPR0: cpr { 101 compatible = "ibm,cpr-460ex"; 102 dcr-reg = <00c 002>; 103 }; 104 105 plb { 106 compatible = "ibm,plb-460ex", "ibm,plb4"; 107 #address-cells = <2>; 108 #size-cells = <1>; 109 ranges; 110 clock-frequency = <0>; /* Filled in by U-Boot */ 111 112 SDRAM0: sdram { 113 compatible = "ibm,sdram-460ex", "ibm,sdram-405gp"; 114 dcr-reg = <010 2>; 115 }; 116 117 MAL0: mcmal { 118 compatible = "ibm,mcmal-460ex", "ibm,mcmal2"; 119 dcr-reg = <180 62>; 120 num-tx-chans = <2>; 121 num-rx-chans = <10>; 122 #address-cells = <0>; 123 #size-cells = <0>; 124 interrupt-parent = <&UIC2>; 125 interrupts = < /*TXEOB*/ 6 4 126 /*RXEOB*/ 7 4 127 /*SERR*/ 3 4 128 /*TXDE*/ 4 4 129 /*RXDE*/ 5 4>; 130 }; 131 132 POB0: opb { 133 compatible = "ibm,opb-460ex", "ibm,opb"; 134 #address-cells = <1>; 135 #size-cells = <1>; 136 ranges = <b0000000 4 b0000000 50000000>; 137 clock-frequency = <0>; /* Filled in by U-Boot */ 138 139 EBC0: ebc { 140 compatible = "ibm,ebc-460ex", "ibm,ebc"; 141 dcr-reg = <012 2>; 142 #address-cells = <2>; 143 #size-cells = <1>; 144 clock-frequency = <0>; /* Filled in by U-Boot */ 145 interrupts = <6 4>; 146 interrupt-parent = <&UIC1>; 147 }; 148 149 UART0: serial@ef600300 { 150 device_type = "serial"; 151 compatible = "ns16550"; 152 reg = <ef600300 8>; 153 virtual-reg = <ef600300>; 154 clock-frequency = <0>; /* Filled in by U-Boot */ 155 current-speed = <0>; /* Filled in by U-Boot */ 156 interrupt-parent = <&UIC1>; 157 interrupts = <1 4>; 158 }; 159 160 UART1: serial@ef600400 { 161 device_type = "serial"; 162 compatible = "ns16550"; 163 reg = <ef600400 8>; 164 virtual-reg = <ef600400>; 165 clock-frequency = <0>; /* Filled in by U-Boot */ 166 current-speed = <0>; /* Filled in by U-Boot */ 167 interrupt-parent = <&UIC0>; 168 interrupts = <1 4>; 169 }; 170 171 UART2: serial@ef600500 { 172 device_type = "serial"; 173 compatible = "ns16550"; 174 reg = <ef600500 8>; 175 virtual-reg = <ef600500>; 176 clock-frequency = <0>; /* Filled in by U-Boot */ 177 current-speed = <0>; /* Filled in by U-Boot */ 178 interrupt-parent = <&UIC1>; 179 interrupts = <1d 4>; 180 }; 181 182 UART3: serial@ef600600 { 183 device_type = "serial"; 184 compatible = "ns16550"; 185 reg = <ef600600 8>; 186 virtual-reg = <ef600600>; 187 clock-frequency = <0>; /* Filled in by U-Boot */ 188 current-speed = <0>; /* Filled in by U-Boot */ 189 interrupt-parent = <&UIC1>; 190 interrupts = <1e 4>; 191 }; 192 193 IIC0: i2c@ef600700 { 194 compatible = "ibm,iic-460ex", "ibm,iic"; 195 reg = <ef600700 14>; 196 interrupt-parent = <&UIC0>; 197 interrupts = <2 4>; 198 }; 199 200 IIC1: i2c@ef600800 { 201 compatible = "ibm,iic-460ex", "ibm,iic"; 202 reg = <ef600800 14>; 203 interrupt-parent = <&UIC0>; 204 interrupts = <3 4>; 205 }; 206 207 ZMII0: emac-zmii@ef600d00 { 208 compatible = "ibm,zmii-460ex", "ibm,zmii"; 209 reg = <ef600d00 c>; 210 }; 211 212 RGMII0: emac-rgmii@ef601500 { 213 compatible = "ibm,rgmii-460ex", "ibm,rgmii"; 214 reg = <ef601500 8>; 215 has-mdio; 216 }; 217 218 EMAC0: ethernet@ef600e00 { 219 device_type = "network"; 220 compatible = "ibm,emac-460ex", "ibm,emac4"; 221 interrupt-parent = <&EMAC0>; 222 interrupts = <0 1>; 223 #interrupt-cells = <1>; 224 #address-cells = <0>; 225 #size-cells = <0>; 226 interrupt-map = </*Status*/ 0 &UIC2 10 4 227 /*Wake*/ 1 &UIC2 14 4>; 228 reg = <ef600e00 70>; 229 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 230 mal-device = <&MAL0>; 231 mal-tx-channel = <0>; 232 mal-rx-channel = <0>; 233 cell-index = <0>; 234 max-frame-size = <2328>; 235 rx-fifo-size = <1000>; 236 tx-fifo-size = <800>; 237 phy-mode = "rgmii"; 238 phy-map = <00000000>; 239 zmii-device = <&ZMII0>; 240 zmii-channel = <0>; 241 rgmii-device = <&RGMII0>; 242 rgmii-channel = <0>; 243 has-inverted-stacr-oc; 244 has-new-stacr-staopc; 245 }; 246 247 EMAC1: ethernet@ef600f00 { 248 device_type = "network"; 249 compatible = "ibm,emac-460ex", "ibm,emac4"; 250 interrupt-parent = <&EMAC1>; 251 interrupts = <0 1>; 252 #interrupt-cells = <1>; 253 #address-cells = <0>; 254 #size-cells = <0>; 255 interrupt-map = </*Status*/ 0 &UIC2 11 4 256 /*Wake*/ 1 &UIC2 15 4>; 257 reg = <ef600f00 70>; 258 local-mac-address = [000000000000]; /* Filled in by U-Boot */ 259 mal-device = <&MAL0>; 260 mal-tx-channel = <1>; 261 mal-rx-channel = <8>; 262 cell-index = <1>; 263 max-frame-size = <2328>; 264 rx-fifo-size = <1000>; 265 tx-fifo-size = <800>; 266 phy-mode = "rgmii"; 267 phy-map = <00000000>; 268 zmii-device = <&ZMII0>; 269 zmii-channel = <1>; 270 rgmii-device = <&RGMII0>; 271 rgmii-channel = <1>; 272 has-inverted-stacr-oc; 273 has-new-stacr-staopc; 274 }; 275 }; 276 277 PCIX0: pci@c0ec00000 { 278 device_type = "pci"; 279 #interrupt-cells = <1>; 280 #size-cells = <2>; 281 #address-cells = <3>; 282 compatible = "ibm,plb-pcix-460ex", "ibm,plb-pcix"; 283 primary; 284 large-inbound-windows; 285 enable-msi-hole; 286 reg = <c 0ec00000 8 /* Config space access */ 287 0 0 0 /* no IACK cycles */ 288 c 0ed00000 4 /* Special cycles */ 289 c 0ec80000 100 /* Internal registers */ 290 c 0ec80100 fc>; /* Internal messaging registers */ 291 292 /* Outbound ranges, one memory and one IO, 293 * later cannot be changed 294 */ 295 ranges = <02000000 0 80000000 0000000d 80000000 0 80000000 296 01000000 0 00000000 0000000c 08000000 0 00010000>; 297 298 /* Inbound 2GB range starting at 0 */ 299 dma-ranges = <42000000 0 0 0 0 0 80000000>; 300 301 /* This drives busses 0 to 0x3f */ 302 bus-range = <0 3f>; 303 304 /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */ 305 interrupt-map-mask = <0000 0 0 0>; 306 interrupt-map = < 0000 0 0 0 &UIC1 0 8 >; 307 }; 308 309 PCIE0: pciex@d00000000 { 310 device_type = "pci"; 311 #interrupt-cells = <1>; 312 #size-cells = <2>; 313 #address-cells = <3>; 314 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex"; 315 primary; 316 port = <0>; /* port number */ 317 reg = <d 00000000 20000000 /* Config space access */ 318 c 08010000 00001000>; /* Registers */ 319 dcr-reg = <100 020>; 320 sdr-base = <300>; 321 322 /* Outbound ranges, one memory and one IO, 323 * later cannot be changed 324 */ 325 ranges = <02000000 0 80000000 0000000e 00000000 0 80000000 326 01000000 0 00000000 0000000f 80000000 0 00010000>; 327 328 /* Inbound 2GB range starting at 0 */ 329 dma-ranges = <42000000 0 0 0 0 0 80000000>; 330 331 /* This drives busses 40 to 0x7f */ 332 bus-range = <40 7f>; 333 334 /* Legacy interrupts (note the weird polarity, the bridge seems 335 * to invert PCIe legacy interrupts). 336 * We are de-swizzling here because the numbers are actually for 337 * port of the root complex virtual P2P bridge. But I want 338 * to avoid putting a node for it in the tree, so the numbers 339 * below are basically de-swizzled numbers. 340 * The real slot is on idsel 0, so the swizzling is 1:1 341 */ 342 interrupt-map-mask = <0000 0 0 7>; 343 interrupt-map = < 344 0000 0 0 1 &UIC3 c 4 /* swizzled int A */ 345 0000 0 0 2 &UIC3 d 4 /* swizzled int B */ 346 0000 0 0 3 &UIC3 e 4 /* swizzled int C */ 347 0000 0 0 4 &UIC3 f 4 /* swizzled int D */>; 348 }; 349 350 PCIE1: pciex@d20000000 { 351 device_type = "pci"; 352 #interrupt-cells = <1>; 353 #size-cells = <2>; 354 #address-cells = <3>; 355 compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex"; 356 primary; 357 port = <1>; /* port number */ 358 reg = <d 20000000 20000000 /* Config space access */ 359 c 08011000 00001000>; /* Registers */ 360 dcr-reg = <120 020>; 361 sdr-base = <340>; 362 363 /* Outbound ranges, one memory and one IO, 364 * later cannot be changed 365 */ 366 ranges = <02000000 0 80000000 0000000e 80000000 0 80000000 367 01000000 0 00000000 0000000f 80010000 0 00010000>; 368 369 /* Inbound 2GB range starting at 0 */ 370 dma-ranges = <42000000 0 0 0 0 0 80000000>; 371 372 /* This drives busses 80 to 0xbf */ 373 bus-range = <80 bf>; 374 375 /* Legacy interrupts (note the weird polarity, the bridge seems 376 * to invert PCIe legacy interrupts). 377 * We are de-swizzling here because the numbers are actually for 378 * port of the root complex virtual P2P bridge. But I want 379 * to avoid putting a node for it in the tree, so the numbers 380 * below are basically de-swizzled numbers. 381 * The real slot is on idsel 0, so the swizzling is 1:1 382 */ 383 interrupt-map-mask = <0000 0 0 7>; 384 interrupt-map = < 385 0000 0 0 1 &UIC3 10 4 /* swizzled int A */ 386 0000 0 0 2 &UIC3 11 4 /* swizzled int B */ 387 0000 0 0 3 &UIC3 12 4 /* swizzled int C */ 388 0000 0 0 4 &UIC3 13 4 /* swizzled int D */>; 389 }; 390 }; 391}; 392