1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Xilinx ML510 Reference Design support 4 * 5 * This DTS file was created for the ml510_bsb1_pcores_ppc440 reference design. 6 * The reference design contains a bug which prevent PCI DMA from working 7 * properly. A description of the bug is given in the plbv46_pci section. It 8 * needs to be fixed by the user until Xilinx updates their reference design. 9 * 10 * Copyright 2009, Roderick Colenbrander 11 */ 12 13/dts-v1/; 14/ { 15 #address-cells = <1>; 16 #size-cells = <1>; 17 compatible = "xlnx,ml510-ref-design", "xlnx,virtex440"; 18 dcr-parent = <&ppc440_0>; 19 DDR2_SDRAM_DIMM0: memory@0 { 20 device_type = "memory"; 21 reg = < 0x0 0x20000000 >; 22 } ; 23 alias { 24 ethernet0 = &Hard_Ethernet_MAC; 25 serial0 = &RS232_Uart_1; 26 } ; 27 chosen { 28 bootargs = "console=ttyS0 root=/dev/ram"; 29 stdout-path = "/plb@0/serial@83e00000"; 30 } ; 31 cpus { 32 #address-cells = <1>; 33 #cpus = <0x1>; 34 #size-cells = <0>; 35 ppc440_0: cpu@0 { 36 #address-cells = <1>; 37 #size-cells = <1>; 38 clock-frequency = <300000000>; 39 compatible = "PowerPC,440", "ibm,ppc440"; 40 d-cache-line-size = <0x20>; 41 d-cache-size = <0x8000>; 42 dcr-access-method = "native"; 43 dcr-controller ; 44 device_type = "cpu"; 45 i-cache-line-size = <0x20>; 46 i-cache-size = <0x8000>; 47 model = "PowerPC,440"; 48 reg = <0>; 49 timebase-frequency = <300000000>; 50 xlnx,apu-control = <0x2000>; 51 xlnx,apu-udi-0 = <0x0>; 52 xlnx,apu-udi-1 = <0x0>; 53 xlnx,apu-udi-10 = <0x0>; 54 xlnx,apu-udi-11 = <0x0>; 55 xlnx,apu-udi-12 = <0x0>; 56 xlnx,apu-udi-13 = <0x0>; 57 xlnx,apu-udi-14 = <0x0>; 58 xlnx,apu-udi-15 = <0x0>; 59 xlnx,apu-udi-2 = <0x0>; 60 xlnx,apu-udi-3 = <0x0>; 61 xlnx,apu-udi-4 = <0x0>; 62 xlnx,apu-udi-5 = <0x0>; 63 xlnx,apu-udi-6 = <0x0>; 64 xlnx,apu-udi-7 = <0x0>; 65 xlnx,apu-udi-8 = <0x0>; 66 xlnx,apu-udi-9 = <0x0>; 67 xlnx,dcr-autolock-enable = <0x1>; 68 xlnx,dcu-rd-ld-cache-plb-prio = <0x0>; 69 xlnx,dcu-rd-noncache-plb-prio = <0x0>; 70 xlnx,dcu-rd-touch-plb-prio = <0x0>; 71 xlnx,dcu-rd-urgent-plb-prio = <0x0>; 72 xlnx,dcu-wr-flush-plb-prio = <0x0>; 73 xlnx,dcu-wr-store-plb-prio = <0x0>; 74 xlnx,dcu-wr-urgent-plb-prio = <0x0>; 75 xlnx,dma0-control = <0x0>; 76 xlnx,dma0-plb-prio = <0x0>; 77 xlnx,dma0-rxchannelctrl = <0x1010000>; 78 xlnx,dma0-rxirqtimer = <0x3ff>; 79 xlnx,dma0-txchannelctrl = <0x1010000>; 80 xlnx,dma0-txirqtimer = <0x3ff>; 81 xlnx,dma1-control = <0x0>; 82 xlnx,dma1-plb-prio = <0x0>; 83 xlnx,dma1-rxchannelctrl = <0x1010000>; 84 xlnx,dma1-rxirqtimer = <0x3ff>; 85 xlnx,dma1-txchannelctrl = <0x1010000>; 86 xlnx,dma1-txirqtimer = <0x3ff>; 87 xlnx,dma2-control = <0x0>; 88 xlnx,dma2-plb-prio = <0x0>; 89 xlnx,dma2-rxchannelctrl = <0x1010000>; 90 xlnx,dma2-rxirqtimer = <0x3ff>; 91 xlnx,dma2-txchannelctrl = <0x1010000>; 92 xlnx,dma2-txirqtimer = <0x3ff>; 93 xlnx,dma3-control = <0x0>; 94 xlnx,dma3-plb-prio = <0x0>; 95 xlnx,dma3-rxchannelctrl = <0x1010000>; 96 xlnx,dma3-rxirqtimer = <0x3ff>; 97 xlnx,dma3-txchannelctrl = <0x1010000>; 98 xlnx,dma3-txirqtimer = <0x3ff>; 99 xlnx,endian-reset = <0x0>; 100 xlnx,generate-plb-timespecs = <0x1>; 101 xlnx,icu-rd-fetch-plb-prio = <0x0>; 102 xlnx,icu-rd-spec-plb-prio = <0x0>; 103 xlnx,icu-rd-touch-plb-prio = <0x0>; 104 xlnx,interconnect-imask = <0xffffffff>; 105 xlnx,mplb-allow-lock-xfer = <0x1>; 106 xlnx,mplb-arb-mode = <0x0>; 107 xlnx,mplb-awidth = <0x20>; 108 xlnx,mplb-counter = <0x500>; 109 xlnx,mplb-dwidth = <0x80>; 110 xlnx,mplb-max-burst = <0x8>; 111 xlnx,mplb-native-dwidth = <0x80>; 112 xlnx,mplb-p2p = <0x0>; 113 xlnx,mplb-prio-dcur = <0x2>; 114 xlnx,mplb-prio-dcuw = <0x3>; 115 xlnx,mplb-prio-icu = <0x4>; 116 xlnx,mplb-prio-splb0 = <0x1>; 117 xlnx,mplb-prio-splb1 = <0x0>; 118 xlnx,mplb-read-pipe-enable = <0x1>; 119 xlnx,mplb-sync-tattribute = <0x0>; 120 xlnx,mplb-wdog-enable = <0x1>; 121 xlnx,mplb-write-pipe-enable = <0x1>; 122 xlnx,mplb-write-post-enable = <0x1>; 123 xlnx,num-dma = <0x0>; 124 xlnx,pir = <0xf>; 125 xlnx,ppc440mc-addr-base = <0x0>; 126 xlnx,ppc440mc-addr-high = <0x1fffffff>; 127 xlnx,ppc440mc-arb-mode = <0x0>; 128 xlnx,ppc440mc-bank-conflict-mask = <0x1800000>; 129 xlnx,ppc440mc-control = <0xf810008f>; 130 xlnx,ppc440mc-max-burst = <0x8>; 131 xlnx,ppc440mc-prio-dcur = <0x2>; 132 xlnx,ppc440mc-prio-dcuw = <0x3>; 133 xlnx,ppc440mc-prio-icu = <0x4>; 134 xlnx,ppc440mc-prio-splb0 = <0x1>; 135 xlnx,ppc440mc-prio-splb1 = <0x0>; 136 xlnx,ppc440mc-row-conflict-mask = <0x7ffe00>; 137 xlnx,ppcdm-asyncmode = <0x0>; 138 xlnx,ppcds-asyncmode = <0x0>; 139 xlnx,user-reset = <0x0>; 140 } ; 141 } ; 142 plb_v46_0: plb@0 { 143 #address-cells = <1>; 144 #size-cells = <1>; 145 compatible = "xlnx,plb-v46-1.03.a", "simple-bus"; 146 ranges ; 147 FLASH: flash@fc000000 { 148 bank-width = <2>; 149 compatible = "xlnx,xps-mch-emc-2.00.a", "cfi-flash"; 150 reg = < 0xfc000000 0x2000000 >; 151 xlnx,family = "virtex5"; 152 xlnx,include-datawidth-matching-0 = <0x1>; 153 xlnx,include-datawidth-matching-1 = <0x0>; 154 xlnx,include-datawidth-matching-2 = <0x0>; 155 xlnx,include-datawidth-matching-3 = <0x0>; 156 xlnx,include-negedge-ioregs = <0x0>; 157 xlnx,include-plb-ipif = <0x1>; 158 xlnx,include-wrbuf = <0x1>; 159 xlnx,max-mem-width = <0x10>; 160 xlnx,mch-native-dwidth = <0x20>; 161 xlnx,mch-plb-clk-period-ps = <0x2710>; 162 xlnx,mch-splb-awidth = <0x20>; 163 xlnx,mch0-accessbuf-depth = <0x10>; 164 xlnx,mch0-protocol = <0x0>; 165 xlnx,mch0-rddatabuf-depth = <0x10>; 166 xlnx,mch1-accessbuf-depth = <0x10>; 167 xlnx,mch1-protocol = <0x0>; 168 xlnx,mch1-rddatabuf-depth = <0x10>; 169 xlnx,mch2-accessbuf-depth = <0x10>; 170 xlnx,mch2-protocol = <0x0>; 171 xlnx,mch2-rddatabuf-depth = <0x10>; 172 xlnx,mch3-accessbuf-depth = <0x10>; 173 xlnx,mch3-protocol = <0x0>; 174 xlnx,mch3-rddatabuf-depth = <0x10>; 175 xlnx,mem0-width = <0x10>; 176 xlnx,mem1-width = <0x20>; 177 xlnx,mem2-width = <0x20>; 178 xlnx,mem3-width = <0x20>; 179 xlnx,num-banks-mem = <0x1>; 180 xlnx,num-channels = <0x2>; 181 xlnx,priority-mode = <0x0>; 182 xlnx,synch-mem-0 = <0x0>; 183 xlnx,synch-mem-1 = <0x0>; 184 xlnx,synch-mem-2 = <0x0>; 185 xlnx,synch-mem-3 = <0x0>; 186 xlnx,synch-pipedelay-0 = <0x2>; 187 xlnx,synch-pipedelay-1 = <0x2>; 188 xlnx,synch-pipedelay-2 = <0x2>; 189 xlnx,synch-pipedelay-3 = <0x2>; 190 xlnx,tavdv-ps-mem-0 = <0x1adb0>; 191 xlnx,tavdv-ps-mem-1 = <0x3a98>; 192 xlnx,tavdv-ps-mem-2 = <0x3a98>; 193 xlnx,tavdv-ps-mem-3 = <0x3a98>; 194 xlnx,tcedv-ps-mem-0 = <0x1adb0>; 195 xlnx,tcedv-ps-mem-1 = <0x3a98>; 196 xlnx,tcedv-ps-mem-2 = <0x3a98>; 197 xlnx,tcedv-ps-mem-3 = <0x3a98>; 198 xlnx,thzce-ps-mem-0 = <0x88b8>; 199 xlnx,thzce-ps-mem-1 = <0x1b58>; 200 xlnx,thzce-ps-mem-2 = <0x1b58>; 201 xlnx,thzce-ps-mem-3 = <0x1b58>; 202 xlnx,thzoe-ps-mem-0 = <0x1b58>; 203 xlnx,thzoe-ps-mem-1 = <0x1b58>; 204 xlnx,thzoe-ps-mem-2 = <0x1b58>; 205 xlnx,thzoe-ps-mem-3 = <0x1b58>; 206 xlnx,tlzwe-ps-mem-0 = <0x88b8>; 207 xlnx,tlzwe-ps-mem-1 = <0x0>; 208 xlnx,tlzwe-ps-mem-2 = <0x0>; 209 xlnx,tlzwe-ps-mem-3 = <0x0>; 210 xlnx,twc-ps-mem-0 = <0x1adb0>; 211 xlnx,twc-ps-mem-1 = <0x3a98>; 212 xlnx,twc-ps-mem-2 = <0x3a98>; 213 xlnx,twc-ps-mem-3 = <0x3a98>; 214 xlnx,twp-ps-mem-0 = <0x11170>; 215 xlnx,twp-ps-mem-1 = <0x2ee0>; 216 xlnx,twp-ps-mem-2 = <0x2ee0>; 217 xlnx,twp-ps-mem-3 = <0x2ee0>; 218 xlnx,xcl0-linesize = <0x4>; 219 xlnx,xcl0-writexfer = <0x1>; 220 xlnx,xcl1-linesize = <0x4>; 221 xlnx,xcl1-writexfer = <0x1>; 222 xlnx,xcl2-linesize = <0x4>; 223 xlnx,xcl2-writexfer = <0x1>; 224 xlnx,xcl3-linesize = <0x4>; 225 xlnx,xcl3-writexfer = <0x1>; 226 } ; 227 Hard_Ethernet_MAC: xps-ll-temac@81c00000 { 228 #address-cells = <1>; 229 #size-cells = <1>; 230 compatible = "xlnx,compound"; 231 ethernet@81c00000 { 232 compatible = "xlnx,xps-ll-temac-1.01.b"; 233 device_type = "network"; 234 interrupt-parent = <&xps_intc_0>; 235 interrupts = < 8 2 >; 236 llink-connected = <&Hard_Ethernet_MAC_fifo>; 237 local-mac-address = [ 02 00 00 00 00 00 ]; 238 reg = < 0x81c00000 0x40 >; 239 xlnx,bus2core-clk-ratio = <0x1>; 240 xlnx,phy-type = <0x3>; 241 xlnx,phyaddr = <0x1>; 242 xlnx,rxcsum = <0x0>; 243 xlnx,rxfifo = <0x8000>; 244 xlnx,temac-type = <0x0>; 245 xlnx,txcsum = <0x0>; 246 xlnx,txfifo = <0x8000>; 247 } ; 248 } ; 249 Hard_Ethernet_MAC_fifo: xps-ll-fifo@81a00000 { 250 compatible = "xlnx,xps-ll-fifo-1.01.a"; 251 interrupt-parent = <&xps_intc_0>; 252 interrupts = < 6 2 >; 253 reg = < 0x81a00000 0x10000 >; 254 xlnx,family = "virtex5"; 255 } ; 256 IIC_EEPROM: i2c@81600000 { 257 compatible = "xlnx,xps-iic-2.00.a"; 258 interrupt-parent = <&xps_intc_0>; 259 interrupts = < 9 2 >; 260 reg = < 0x81600000 0x10000 >; 261 xlnx,clk-freq = <0x5f5e100>; 262 xlnx,family = "virtex5"; 263 xlnx,gpo-width = <0x1>; 264 xlnx,iic-freq = <0x186a0>; 265 xlnx,scl-inertial-delay = <0x5>; 266 xlnx,sda-inertial-delay = <0x5>; 267 xlnx,ten-bit-adr = <0x0>; 268 } ; 269 LCD_OPTIONAL: gpio@81420000 { 270 compatible = "xlnx,xps-gpio-1.00.a"; 271 reg = < 0x81420000 0x10000 >; 272 xlnx,all-inputs = <0x0>; 273 xlnx,all-inputs-2 = <0x0>; 274 xlnx,dout-default = <0x0>; 275 xlnx,dout-default-2 = <0x0>; 276 xlnx,family = "virtex5"; 277 xlnx,gpio-width = <0xb>; 278 xlnx,interrupt-present = <0x0>; 279 xlnx,is-bidir = <0x1>; 280 xlnx,is-bidir-2 = <0x1>; 281 xlnx,is-dual = <0x0>; 282 xlnx,tri-default = <0xffffffff>; 283 xlnx,tri-default-2 = <0xffffffff>; 284 } ; 285 LEDs_4Bit: gpio@81400000 { 286 compatible = "xlnx,xps-gpio-1.00.a"; 287 reg = < 0x81400000 0x10000 >; 288 xlnx,all-inputs = <0x0>; 289 xlnx,all-inputs-2 = <0x0>; 290 xlnx,dout-default = <0x0>; 291 xlnx,dout-default-2 = <0x0>; 292 xlnx,family = "virtex5"; 293 xlnx,gpio-width = <0x4>; 294 xlnx,interrupt-present = <0x0>; 295 xlnx,is-bidir = <0x1>; 296 xlnx,is-bidir-2 = <0x1>; 297 xlnx,is-dual = <0x0>; 298 xlnx,tri-default = <0xffffffff>; 299 xlnx,tri-default-2 = <0xffffffff>; 300 } ; 301 RS232_Uart_1: serial@83e00000 { 302 clock-frequency = <100000000>; 303 compatible = "xlnx,xps-uart16550-2.00.b", "ns16550"; 304 current-speed = <9600>; 305 device_type = "serial"; 306 interrupt-parent = <&xps_intc_0>; 307 interrupts = < 11 2 >; 308 reg = < 0x83e00000 0x10000 >; 309 reg-offset = <0x1003>; 310 reg-shift = <2>; 311 xlnx,family = "virtex5"; 312 xlnx,has-external-rclk = <0x0>; 313 xlnx,has-external-xin = <0x0>; 314 xlnx,is-a-16550 = <0x1>; 315 } ; 316 SPI_EEPROM: xps-spi@feff8000 { 317 compatible = "xlnx,xps-spi-2.00.b"; 318 interrupt-parent = <&xps_intc_0>; 319 interrupts = < 10 2 >; 320 reg = < 0xfeff8000 0x80 >; 321 xlnx,family = "virtex5"; 322 xlnx,fifo-exist = <0x1>; 323 xlnx,num-ss-bits = <0x1>; 324 xlnx,num-transfer-bits = <0x8>; 325 xlnx,sck-ratio = <0x80>; 326 } ; 327 SysACE_CompactFlash: sysace@83600000 { 328 compatible = "xlnx,xps-sysace-1.00.a"; 329 interrupt-parent = <&xps_intc_0>; 330 interrupts = < 7 2 >; 331 reg = < 0x83600000 0x10000 >; 332 xlnx,family = "virtex5"; 333 xlnx,mem-width = <0x10>; 334 } ; 335 plbv46_pci_0: plbv46-pci@85e00000 { 336 #size-cells = <2>; 337 #address-cells = <3>; 338 compatible = "xlnx,plbv46-pci-1.03.a"; 339 device_type = "pci"; 340 reg = < 0x85e00000 0x10000 >; 341 342 /* 343 * The default ML510 BSB has C_IPIFBAR2PCIBAR_0 set to 344 * 0 which means that a read/write to the memory mapped 345 * i/o region (which starts at 0xa0000000) for pci 346 * bar 0 on the plb side translates to 0. 347 * It is important to set this value to 0xa0000000, so 348 * that inbound and outbound pci transactions work 349 * properly including DMA. 350 */ 351 ranges = <0x02000000 0 0xa0000000 0xa0000000 0 0x20000000 352 0x01000000 0 0x00000000 0xf0000000 0 0x00010000>; 353 354 #interrupt-cells = <1>; 355 interrupt-parent = <&xps_intc_0>; 356 interrupt-map-mask = <0xff00 0x0 0x0 0x7>; 357 interrupt-map = < 358 /* IRQ mapping for pci slots and ALI M1533 359 * periperhals. In total there are 5 interrupt 360 * lines connected to a xps_intc controller. 361 * Four of them are PCI IRQ A, B, C, D and 362 * which correspond to respectively xpx_intc 363 * 5, 4, 3 and 2. The fifth interrupt line is 364 * connected to the south bridge and this one 365 * uses irq 1 and is active high instead of 366 * active low. 367 * 368 * The M1533 contains various peripherals 369 * including AC97 audio, a modem, USB, IDE and 370 * some power management stuff. The modem 371 * isn't connected on the ML510 and the power 372 * management core also isn't used. 373 */ 374 375 /* IDSEL 0x16 / dev=6, bus=0 / PCI slot 3 */ 376 0x3000 0 0 1 &xps_intc_0 3 2 377 0x3000 0 0 2 &xps_intc_0 2 2 378 0x3000 0 0 3 &xps_intc_0 5 2 379 0x3000 0 0 4 &xps_intc_0 4 2 380 381 /* IDSEL 0x13 / dev=3, bus=1 / PCI slot 4 */ 382 /* 383 0x11800 0 0 1 &xps_intc_0 5 0 2 384 0x11800 0 0 2 &xps_intc_0 4 0 2 385 0x11800 0 0 3 &xps_intc_0 3 0 2 386 0x11800 0 0 4 &xps_intc_0 2 0 2 387 */ 388 389 /* According to the datasheet + schematic 390 * ABCD [FPGA] of slot 5 is mapped to DABC. 391 * Testing showed that at least A maps to B, 392 * the mapping of the other pins is a guess 393 * and for that reason the lines have been 394 * commented out. 395 */ 396 /* IDSEL 0x15 / dev=5, bus=0 / PCI slot 5 */ 397 0x2800 0 0 1 &xps_intc_0 4 2 398 /* 399 0x2800 0 0 2 &xps_intc_0 3 2 400 0x2800 0 0 3 &xps_intc_0 2 2 401 0x2800 0 0 4 &xps_intc_0 5 2 402 */ 403 404 /* IDSEL 0x12 / dev=2, bus=1 / PCI slot 6 */ 405 /* 406 0x11000 0 0 1 &xps_intc_0 4 0 2 407 0x11000 0 0 2 &xps_intc_0 3 0 2 408 0x11000 0 0 3 &xps_intc_0 2 0 2 409 0x11000 0 0 4 &xps_intc_0 5 0 2 410 */ 411 412 /* IDSEL 0x11 / dev=1, bus=0 / AC97 audio */ 413 0x0800 0 0 1 &i8259 7 2 414 415 /* IDSEL 0x1b / dev=11, bus=0 / IDE */ 416 0x5800 0 0 1 &i8259 14 2 417 418 /* IDSEL 0x1f / dev 15, bus=0 / 2x USB 1.1 */ 419 0x7800 0 0 1 &i8259 7 2 420 >; 421 ali_m1533 { 422 #size-cells = <1>; 423 #address-cells = <2>; 424 i8259: interrupt-controller@20 { 425 reg = <1 0x20 2 426 1 0xa0 2 427 1 0x4d0 2>; 428 interrupt-controller; 429 device_type = "interrupt-controller"; 430 #address-cells = <0>; 431 #interrupt-cells = <2>; 432 compatible = "chrp,iic"; 433 434 /* south bridge irq is active high */ 435 interrupts = <1 3>; 436 interrupt-parent = <&xps_intc_0>; 437 }; 438 }; 439 } ; 440 xps_bram_if_cntlr_1: xps-bram-if-cntlr@ffff0000 { 441 compatible = "xlnx,xps-bram-if-cntlr-1.00.a"; 442 reg = < 0xffff0000 0x10000 >; 443 xlnx,family = "virtex5"; 444 } ; 445 xps_intc_0: interrupt-controller@81800000 { 446 #interrupt-cells = <0x2>; 447 compatible = "xlnx,xps-intc-1.00.a"; 448 interrupt-controller ; 449 reg = < 0x81800000 0x10000 >; 450 xlnx,num-intr-inputs = <0xc>; 451 } ; 452 xps_tft_0: tft@86e00000 { 453 compatible = "xlnx,xps-tft-1.00.a"; 454 reg = < 0x86e00000 0x10000 >; 455 xlnx,dcr-splb-slave-if = <0x1>; 456 xlnx,default-tft-base-addr = <0x0>; 457 xlnx,family = "virtex5"; 458 xlnx,i2c-slave-addr = <0x76>; 459 xlnx,mplb-awidth = <0x20>; 460 xlnx,mplb-dwidth = <0x80>; 461 xlnx,mplb-native-dwidth = <0x40>; 462 xlnx,mplb-smallest-slave = <0x20>; 463 xlnx,tft-interface = <0x1>; 464 } ; 465 } ; 466} ; 467