1 /* 2 * arch/arm/plat-orion/common.c 3 * 4 * Marvell Orion SoC common setup code used by multiple mach-/common.c 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 any 8 * warranty of any kind, whether express or implied. 9 */ 10 11 #include <linux/kernel.h> 12 #include <linux/init.h> 13 #include <linux/platform_device.h> 14 #include <linux/dma-mapping.h> 15 #include <linux/serial_8250.h> 16 #include <linux/mbus.h> 17 #include <linux/ata_platform.h> 18 #include <linux/mv643xx_eth.h> 19 #include <linux/mv643xx_i2c.h> 20 #include <net/dsa.h> 21 #include <linux/spi/orion_spi.h> 22 #include <plat/orion_wdt.h> 23 #include <plat/mv_xor.h> 24 #include <plat/ehci-orion.h> 25 26 /* Fill in the resources structure and link it into the platform 27 device structure. There is always a memory region, and nearly 28 always an interrupt.*/ 29 static void fill_resources(struct platform_device *device, 30 struct resource *resources, 31 resource_size_t mapbase, 32 resource_size_t size, 33 unsigned int irq) 34 { 35 device->resource = resources; 36 device->num_resources = 1; 37 resources[0].flags = IORESOURCE_MEM; 38 resources[0].start = mapbase; 39 resources[0].end = mapbase + size; 40 41 if (irq != NO_IRQ) { 42 device->num_resources++; 43 resources[1].flags = IORESOURCE_IRQ; 44 resources[1].start = irq; 45 resources[1].end = irq; 46 } 47 } 48 49 /***************************************************************************** 50 * UART 51 ****************************************************************************/ 52 static void __init uart_complete( 53 struct platform_device *orion_uart, 54 struct plat_serial8250_port *data, 55 struct resource *resources, 56 unsigned int membase, 57 resource_size_t mapbase, 58 unsigned int irq, 59 unsigned int uartclk) 60 { 61 data->mapbase = mapbase; 62 data->membase = (void __iomem *)membase; 63 data->irq = irq; 64 data->uartclk = uartclk; 65 orion_uart->dev.platform_data = data; 66 67 fill_resources(orion_uart, resources, mapbase, 0xff, irq); 68 platform_device_register(orion_uart); 69 } 70 71 /***************************************************************************** 72 * UART0 73 ****************************************************************************/ 74 static struct plat_serial8250_port orion_uart0_data[] = { 75 { 76 .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, 77 .iotype = UPIO_MEM, 78 .regshift = 2, 79 }, { 80 }, 81 }; 82 83 static struct resource orion_uart0_resources[2]; 84 85 static struct platform_device orion_uart0 = { 86 .name = "serial8250", 87 .id = PLAT8250_DEV_PLATFORM, 88 }; 89 90 void __init orion_uart0_init(unsigned int membase, 91 resource_size_t mapbase, 92 unsigned int irq, 93 unsigned int uartclk) 94 { 95 uart_complete(&orion_uart0, orion_uart0_data, orion_uart0_resources, 96 membase, mapbase, irq, uartclk); 97 } 98 99 /***************************************************************************** 100 * UART1 101 ****************************************************************************/ 102 static struct plat_serial8250_port orion_uart1_data[] = { 103 { 104 .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, 105 .iotype = UPIO_MEM, 106 .regshift = 2, 107 }, { 108 }, 109 }; 110 111 static struct resource orion_uart1_resources[2]; 112 113 static struct platform_device orion_uart1 = { 114 .name = "serial8250", 115 .id = PLAT8250_DEV_PLATFORM1, 116 }; 117 118 void __init orion_uart1_init(unsigned int membase, 119 resource_size_t mapbase, 120 unsigned int irq, 121 unsigned int uartclk) 122 { 123 uart_complete(&orion_uart1, orion_uart1_data, orion_uart1_resources, 124 membase, mapbase, irq, uartclk); 125 } 126 127 /***************************************************************************** 128 * UART2 129 ****************************************************************************/ 130 static struct plat_serial8250_port orion_uart2_data[] = { 131 { 132 .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, 133 .iotype = UPIO_MEM, 134 .regshift = 2, 135 }, { 136 }, 137 }; 138 139 static struct resource orion_uart2_resources[2]; 140 141 static struct platform_device orion_uart2 = { 142 .name = "serial8250", 143 .id = PLAT8250_DEV_PLATFORM2, 144 }; 145 146 void __init orion_uart2_init(unsigned int membase, 147 resource_size_t mapbase, 148 unsigned int irq, 149 unsigned int uartclk) 150 { 151 uart_complete(&orion_uart2, orion_uart2_data, orion_uart2_resources, 152 membase, mapbase, irq, uartclk); 153 } 154 155 /***************************************************************************** 156 * UART3 157 ****************************************************************************/ 158 static struct plat_serial8250_port orion_uart3_data[] = { 159 { 160 .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, 161 .iotype = UPIO_MEM, 162 .regshift = 2, 163 }, { 164 }, 165 }; 166 167 static struct resource orion_uart3_resources[2]; 168 169 static struct platform_device orion_uart3 = { 170 .name = "serial8250", 171 .id = 3, 172 }; 173 174 void __init orion_uart3_init(unsigned int membase, 175 resource_size_t mapbase, 176 unsigned int irq, 177 unsigned int uartclk) 178 { 179 uart_complete(&orion_uart3, orion_uart3_data, orion_uart3_resources, 180 membase, mapbase, irq, uartclk); 181 } 182 183 /***************************************************************************** 184 * SoC RTC 185 ****************************************************************************/ 186 static struct resource orion_rtc_resource[2]; 187 188 void __init orion_rtc_init(unsigned long mapbase, 189 unsigned long irq) 190 { 191 orion_rtc_resource[0].start = mapbase; 192 orion_rtc_resource[0].end = mapbase + SZ_32 - 1; 193 orion_rtc_resource[0].flags = IORESOURCE_MEM; 194 orion_rtc_resource[1].start = irq; 195 orion_rtc_resource[1].end = irq; 196 orion_rtc_resource[1].flags = IORESOURCE_IRQ; 197 198 platform_device_register_simple("rtc-mv", -1, orion_rtc_resource, 2); 199 } 200 201 /***************************************************************************** 202 * GE 203 ****************************************************************************/ 204 static __init void ge_complete( 205 struct mv643xx_eth_shared_platform_data *orion_ge_shared_data, 206 struct mbus_dram_target_info *mbus_dram_info, int tclk, 207 struct resource *orion_ge_resource, unsigned long irq, 208 struct platform_device *orion_ge_shared, 209 struct mv643xx_eth_platform_data *eth_data, 210 struct platform_device *orion_ge) 211 { 212 orion_ge_shared_data->dram = mbus_dram_info; 213 orion_ge_shared_data->t_clk = tclk; 214 orion_ge_resource->start = irq; 215 orion_ge_resource->end = irq; 216 eth_data->shared = orion_ge_shared; 217 orion_ge->dev.platform_data = eth_data; 218 219 platform_device_register(orion_ge_shared); 220 platform_device_register(orion_ge); 221 } 222 223 /***************************************************************************** 224 * GE00 225 ****************************************************************************/ 226 struct mv643xx_eth_shared_platform_data orion_ge00_shared_data; 227 228 static struct resource orion_ge00_shared_resources[] = { 229 { 230 .name = "ge00 base", 231 }, { 232 .name = "ge00 err irq", 233 }, 234 }; 235 236 static struct platform_device orion_ge00_shared = { 237 .name = MV643XX_ETH_SHARED_NAME, 238 .id = 0, 239 .dev = { 240 .platform_data = &orion_ge00_shared_data, 241 }, 242 }; 243 244 static struct resource orion_ge00_resources[] = { 245 { 246 .name = "ge00 irq", 247 .flags = IORESOURCE_IRQ, 248 }, 249 }; 250 251 static struct platform_device orion_ge00 = { 252 .name = MV643XX_ETH_NAME, 253 .id = 0, 254 .num_resources = 1, 255 .resource = orion_ge00_resources, 256 .dev = { 257 .coherent_dma_mask = DMA_BIT_MASK(32), 258 }, 259 }; 260 261 void __init orion_ge00_init(struct mv643xx_eth_platform_data *eth_data, 262 struct mbus_dram_target_info *mbus_dram_info, 263 unsigned long mapbase, 264 unsigned long irq, 265 unsigned long irq_err, 266 int tclk) 267 { 268 fill_resources(&orion_ge00_shared, orion_ge00_shared_resources, 269 mapbase + 0x2000, SZ_16K - 1, irq_err); 270 ge_complete(&orion_ge00_shared_data, mbus_dram_info, tclk, 271 orion_ge00_resources, irq, &orion_ge00_shared, 272 eth_data, &orion_ge00); 273 } 274 275 /***************************************************************************** 276 * GE01 277 ****************************************************************************/ 278 struct mv643xx_eth_shared_platform_data orion_ge01_shared_data = { 279 .shared_smi = &orion_ge00_shared, 280 }; 281 282 static struct resource orion_ge01_shared_resources[] = { 283 { 284 .name = "ge01 base", 285 }, { 286 .name = "ge01 err irq", 287 }, 288 }; 289 290 static struct platform_device orion_ge01_shared = { 291 .name = MV643XX_ETH_SHARED_NAME, 292 .id = 1, 293 .dev = { 294 .platform_data = &orion_ge01_shared_data, 295 }, 296 }; 297 298 static struct resource orion_ge01_resources[] = { 299 { 300 .name = "ge01 irq", 301 .flags = IORESOURCE_IRQ, 302 }, 303 }; 304 305 static struct platform_device orion_ge01 = { 306 .name = MV643XX_ETH_NAME, 307 .id = 1, 308 .num_resources = 1, 309 .resource = orion_ge01_resources, 310 .dev = { 311 .coherent_dma_mask = DMA_BIT_MASK(32), 312 }, 313 }; 314 315 void __init orion_ge01_init(struct mv643xx_eth_platform_data *eth_data, 316 struct mbus_dram_target_info *mbus_dram_info, 317 unsigned long mapbase, 318 unsigned long irq, 319 unsigned long irq_err, 320 int tclk) 321 { 322 fill_resources(&orion_ge01_shared, orion_ge01_shared_resources, 323 mapbase + 0x2000, SZ_16K - 1, irq_err); 324 ge_complete(&orion_ge01_shared_data, mbus_dram_info, tclk, 325 orion_ge01_resources, irq, &orion_ge01_shared, 326 eth_data, &orion_ge01); 327 } 328 329 /***************************************************************************** 330 * GE10 331 ****************************************************************************/ 332 struct mv643xx_eth_shared_platform_data orion_ge10_shared_data = { 333 .shared_smi = &orion_ge00_shared, 334 }; 335 336 static struct resource orion_ge10_shared_resources[] = { 337 { 338 .name = "ge10 base", 339 }, { 340 .name = "ge10 err irq", 341 }, 342 }; 343 344 static struct platform_device orion_ge10_shared = { 345 .name = MV643XX_ETH_SHARED_NAME, 346 .id = 1, 347 .dev = { 348 .platform_data = &orion_ge10_shared_data, 349 }, 350 }; 351 352 static struct resource orion_ge10_resources[] = { 353 { 354 .name = "ge10 irq", 355 .flags = IORESOURCE_IRQ, 356 }, 357 }; 358 359 static struct platform_device orion_ge10 = { 360 .name = MV643XX_ETH_NAME, 361 .id = 1, 362 .num_resources = 2, 363 .resource = orion_ge10_resources, 364 .dev = { 365 .coherent_dma_mask = DMA_BIT_MASK(32), 366 }, 367 }; 368 369 void __init orion_ge10_init(struct mv643xx_eth_platform_data *eth_data, 370 struct mbus_dram_target_info *mbus_dram_info, 371 unsigned long mapbase, 372 unsigned long irq, 373 unsigned long irq_err, 374 int tclk) 375 { 376 fill_resources(&orion_ge10_shared, orion_ge10_shared_resources, 377 mapbase + 0x2000, SZ_16K - 1, irq_err); 378 ge_complete(&orion_ge10_shared_data, mbus_dram_info, tclk, 379 orion_ge10_resources, irq, &orion_ge10_shared, 380 eth_data, &orion_ge10); 381 } 382 383 /***************************************************************************** 384 * GE11 385 ****************************************************************************/ 386 struct mv643xx_eth_shared_platform_data orion_ge11_shared_data = { 387 .shared_smi = &orion_ge00_shared, 388 }; 389 390 static struct resource orion_ge11_shared_resources[] = { 391 { 392 .name = "ge11 base", 393 }, { 394 .name = "ge11 err irq", 395 }, 396 }; 397 398 static struct platform_device orion_ge11_shared = { 399 .name = MV643XX_ETH_SHARED_NAME, 400 .id = 1, 401 .dev = { 402 .platform_data = &orion_ge11_shared_data, 403 }, 404 }; 405 406 static struct resource orion_ge11_resources[] = { 407 { 408 .name = "ge11 irq", 409 .flags = IORESOURCE_IRQ, 410 }, 411 }; 412 413 static struct platform_device orion_ge11 = { 414 .name = MV643XX_ETH_NAME, 415 .id = 1, 416 .num_resources = 2, 417 .resource = orion_ge11_resources, 418 .dev = { 419 .coherent_dma_mask = DMA_BIT_MASK(32), 420 }, 421 }; 422 423 void __init orion_ge11_init(struct mv643xx_eth_platform_data *eth_data, 424 struct mbus_dram_target_info *mbus_dram_info, 425 unsigned long mapbase, 426 unsigned long irq, 427 unsigned long irq_err, 428 int tclk) 429 { 430 fill_resources(&orion_ge11_shared, orion_ge11_shared_resources, 431 mapbase + 0x2000, SZ_16K - 1, irq_err); 432 ge_complete(&orion_ge11_shared_data, mbus_dram_info, tclk, 433 orion_ge11_resources, irq, &orion_ge11_shared, 434 eth_data, &orion_ge11); 435 } 436 437 /***************************************************************************** 438 * Ethernet switch 439 ****************************************************************************/ 440 static struct resource orion_switch_resources[] = { 441 { 442 .start = 0, 443 .end = 0, 444 .flags = IORESOURCE_IRQ, 445 }, 446 }; 447 448 static struct platform_device orion_switch_device = { 449 .name = "dsa", 450 .id = 0, 451 .num_resources = 0, 452 .resource = orion_switch_resources, 453 }; 454 455 void __init orion_ge00_switch_init(struct dsa_platform_data *d, int irq) 456 { 457 int i; 458 459 if (irq != NO_IRQ) { 460 orion_switch_resources[0].start = irq; 461 orion_switch_resources[0].end = irq; 462 orion_switch_device.num_resources = 1; 463 } 464 465 d->netdev = &orion_ge00.dev; 466 for (i = 0; i < d->nr_chips; i++) 467 d->chip[i].mii_bus = &orion_ge00_shared.dev; 468 orion_switch_device.dev.platform_data = d; 469 470 platform_device_register(&orion_switch_device); 471 } 472 473 /***************************************************************************** 474 * I2C 475 ****************************************************************************/ 476 static struct mv64xxx_i2c_pdata orion_i2c_pdata = { 477 .freq_n = 3, 478 .timeout = 1000, /* Default timeout of 1 second */ 479 }; 480 481 static struct resource orion_i2c_resources[2]; 482 483 static struct platform_device orion_i2c = { 484 .name = MV64XXX_I2C_CTLR_NAME, 485 .id = 0, 486 .dev = { 487 .platform_data = &orion_i2c_pdata, 488 }, 489 }; 490 491 static struct mv64xxx_i2c_pdata orion_i2c_1_pdata = { 492 .freq_n = 3, 493 .timeout = 1000, /* Default timeout of 1 second */ 494 }; 495 496 static struct resource orion_i2c_1_resources[2]; 497 498 static struct platform_device orion_i2c_1 = { 499 .name = MV64XXX_I2C_CTLR_NAME, 500 .id = 1, 501 .dev = { 502 .platform_data = &orion_i2c_1_pdata, 503 }, 504 }; 505 506 void __init orion_i2c_init(unsigned long mapbase, 507 unsigned long irq, 508 unsigned long freq_m) 509 { 510 orion_i2c_pdata.freq_m = freq_m; 511 fill_resources(&orion_i2c, orion_i2c_resources, mapbase, 512 SZ_32 - 1, irq); 513 platform_device_register(&orion_i2c); 514 } 515 516 void __init orion_i2c_1_init(unsigned long mapbase, 517 unsigned long irq, 518 unsigned long freq_m) 519 { 520 orion_i2c_1_pdata.freq_m = freq_m; 521 fill_resources(&orion_i2c_1, orion_i2c_1_resources, mapbase, 522 SZ_32 - 1, irq); 523 platform_device_register(&orion_i2c_1); 524 } 525 526 /***************************************************************************** 527 * SPI 528 ****************************************************************************/ 529 static struct orion_spi_info orion_spi_plat_data; 530 static struct resource orion_spi_resources; 531 532 static struct platform_device orion_spi = { 533 .name = "orion_spi", 534 .id = 0, 535 .dev = { 536 .platform_data = &orion_spi_plat_data, 537 }, 538 }; 539 540 static struct orion_spi_info orion_spi_1_plat_data; 541 static struct resource orion_spi_1_resources; 542 543 static struct platform_device orion_spi_1 = { 544 .name = "orion_spi", 545 .id = 1, 546 .dev = { 547 .platform_data = &orion_spi_1_plat_data, 548 }, 549 }; 550 551 /* Note: The SPI silicon core does have interrupts. However the 552 * current Linux software driver does not use interrupts. */ 553 554 void __init orion_spi_init(unsigned long mapbase, 555 unsigned long tclk) 556 { 557 orion_spi_plat_data.tclk = tclk; 558 fill_resources(&orion_spi, &orion_spi_resources, 559 mapbase, SZ_512 - 1, NO_IRQ); 560 platform_device_register(&orion_spi); 561 } 562 563 void __init orion_spi_1_init(unsigned long mapbase, 564 unsigned long tclk) 565 { 566 orion_spi_1_plat_data.tclk = tclk; 567 fill_resources(&orion_spi_1, &orion_spi_1_resources, 568 mapbase, SZ_512 - 1, NO_IRQ); 569 platform_device_register(&orion_spi_1); 570 } 571 572 /***************************************************************************** 573 * Watchdog 574 ****************************************************************************/ 575 static struct orion_wdt_platform_data orion_wdt_data; 576 577 static struct platform_device orion_wdt_device = { 578 .name = "orion_wdt", 579 .id = -1, 580 .dev = { 581 .platform_data = &orion_wdt_data, 582 }, 583 .num_resources = 0, 584 }; 585 586 void __init orion_wdt_init(unsigned long tclk) 587 { 588 orion_wdt_data.tclk = tclk; 589 platform_device_register(&orion_wdt_device); 590 } 591 592 /***************************************************************************** 593 * XOR 594 ****************************************************************************/ 595 static struct mv_xor_platform_shared_data orion_xor_shared_data; 596 597 static u64 orion_xor_dmamask = DMA_BIT_MASK(32); 598 599 void __init orion_xor_init_channels( 600 struct mv_xor_platform_data *orion_xor0_data, 601 struct platform_device *orion_xor0_channel, 602 struct mv_xor_platform_data *orion_xor1_data, 603 struct platform_device *orion_xor1_channel) 604 { 605 /* 606 * two engines can't do memset simultaneously, this limitation 607 * satisfied by removing memset support from one of the engines. 608 */ 609 dma_cap_set(DMA_MEMCPY, orion_xor0_data->cap_mask); 610 dma_cap_set(DMA_XOR, orion_xor0_data->cap_mask); 611 platform_device_register(orion_xor0_channel); 612 613 dma_cap_set(DMA_MEMCPY, orion_xor1_data->cap_mask); 614 dma_cap_set(DMA_MEMSET, orion_xor1_data->cap_mask); 615 dma_cap_set(DMA_XOR, orion_xor1_data->cap_mask); 616 platform_device_register(orion_xor1_channel); 617 } 618 619 /***************************************************************************** 620 * XOR0 621 ****************************************************************************/ 622 static struct resource orion_xor0_shared_resources[] = { 623 { 624 .name = "xor 0 low", 625 .flags = IORESOURCE_MEM, 626 }, { 627 .name = "xor 0 high", 628 .flags = IORESOURCE_MEM, 629 }, 630 }; 631 632 static struct platform_device orion_xor0_shared = { 633 .name = MV_XOR_SHARED_NAME, 634 .id = 0, 635 .dev = { 636 .platform_data = &orion_xor_shared_data, 637 }, 638 .num_resources = ARRAY_SIZE(orion_xor0_shared_resources), 639 .resource = orion_xor0_shared_resources, 640 }; 641 642 static struct resource orion_xor00_resources[] = { 643 [0] = { 644 .flags = IORESOURCE_IRQ, 645 }, 646 }; 647 648 static struct mv_xor_platform_data orion_xor00_data = { 649 .shared = &orion_xor0_shared, 650 .hw_id = 0, 651 .pool_size = PAGE_SIZE, 652 }; 653 654 static struct platform_device orion_xor00_channel = { 655 .name = MV_XOR_NAME, 656 .id = 0, 657 .num_resources = ARRAY_SIZE(orion_xor00_resources), 658 .resource = orion_xor00_resources, 659 .dev = { 660 .dma_mask = &orion_xor_dmamask, 661 .coherent_dma_mask = DMA_BIT_MASK(64), 662 .platform_data = &orion_xor00_data, 663 }, 664 }; 665 666 static struct resource orion_xor01_resources[] = { 667 [0] = { 668 .flags = IORESOURCE_IRQ, 669 }, 670 }; 671 672 static struct mv_xor_platform_data orion_xor01_data = { 673 .shared = &orion_xor0_shared, 674 .hw_id = 1, 675 .pool_size = PAGE_SIZE, 676 }; 677 678 static struct platform_device orion_xor01_channel = { 679 .name = MV_XOR_NAME, 680 .id = 1, 681 .num_resources = ARRAY_SIZE(orion_xor01_resources), 682 .resource = orion_xor01_resources, 683 .dev = { 684 .dma_mask = &orion_xor_dmamask, 685 .coherent_dma_mask = DMA_BIT_MASK(64), 686 .platform_data = &orion_xor01_data, 687 }, 688 }; 689 690 void __init orion_xor0_init(struct mbus_dram_target_info *mbus_dram_info, 691 unsigned long mapbase_low, 692 unsigned long mapbase_high, 693 unsigned long irq_0, 694 unsigned long irq_1) 695 { 696 orion_xor_shared_data.dram = mbus_dram_info; 697 698 orion_xor0_shared_resources[0].start = mapbase_low; 699 orion_xor0_shared_resources[0].end = mapbase_low + 0xff; 700 orion_xor0_shared_resources[1].start = mapbase_high; 701 orion_xor0_shared_resources[1].end = mapbase_high + 0xff; 702 703 orion_xor00_resources[0].start = irq_0; 704 orion_xor00_resources[0].end = irq_0; 705 orion_xor01_resources[0].start = irq_1; 706 orion_xor01_resources[0].end = irq_1; 707 708 platform_device_register(&orion_xor0_shared); 709 710 orion_xor_init_channels(&orion_xor00_data, &orion_xor00_channel, 711 &orion_xor01_data, &orion_xor01_channel); 712 } 713 714 /***************************************************************************** 715 * XOR1 716 ****************************************************************************/ 717 static struct resource orion_xor1_shared_resources[] = { 718 { 719 .name = "xor 1 low", 720 .flags = IORESOURCE_MEM, 721 }, { 722 .name = "xor 1 high", 723 .flags = IORESOURCE_MEM, 724 }, 725 }; 726 727 static struct platform_device orion_xor1_shared = { 728 .name = MV_XOR_SHARED_NAME, 729 .id = 1, 730 .dev = { 731 .platform_data = &orion_xor_shared_data, 732 }, 733 .num_resources = ARRAY_SIZE(orion_xor1_shared_resources), 734 .resource = orion_xor1_shared_resources, 735 }; 736 737 static struct resource orion_xor10_resources[] = { 738 [0] = { 739 .flags = IORESOURCE_IRQ, 740 }, 741 }; 742 743 static struct mv_xor_platform_data orion_xor10_data = { 744 .shared = &orion_xor1_shared, 745 .hw_id = 0, 746 .pool_size = PAGE_SIZE, 747 }; 748 749 static struct platform_device orion_xor10_channel = { 750 .name = MV_XOR_NAME, 751 .id = 2, 752 .num_resources = ARRAY_SIZE(orion_xor10_resources), 753 .resource = orion_xor10_resources, 754 .dev = { 755 .dma_mask = &orion_xor_dmamask, 756 .coherent_dma_mask = DMA_BIT_MASK(64), 757 .platform_data = &orion_xor10_data, 758 }, 759 }; 760 761 static struct resource orion_xor11_resources[] = { 762 [0] = { 763 .flags = IORESOURCE_IRQ, 764 }, 765 }; 766 767 static struct mv_xor_platform_data orion_xor11_data = { 768 .shared = &orion_xor1_shared, 769 .hw_id = 1, 770 .pool_size = PAGE_SIZE, 771 }; 772 773 static struct platform_device orion_xor11_channel = { 774 .name = MV_XOR_NAME, 775 .id = 3, 776 .num_resources = ARRAY_SIZE(orion_xor11_resources), 777 .resource = orion_xor11_resources, 778 .dev = { 779 .dma_mask = &orion_xor_dmamask, 780 .coherent_dma_mask = DMA_BIT_MASK(64), 781 .platform_data = &orion_xor11_data, 782 }, 783 }; 784 785 void __init orion_xor1_init(unsigned long mapbase_low, 786 unsigned long mapbase_high, 787 unsigned long irq_0, 788 unsigned long irq_1) 789 { 790 orion_xor1_shared_resources[0].start = mapbase_low; 791 orion_xor1_shared_resources[0].end = mapbase_low + 0xff; 792 orion_xor1_shared_resources[1].start = mapbase_high; 793 orion_xor1_shared_resources[1].end = mapbase_high + 0xff; 794 795 orion_xor10_resources[0].start = irq_0; 796 orion_xor10_resources[0].end = irq_0; 797 orion_xor11_resources[0].start = irq_1; 798 orion_xor11_resources[0].end = irq_1; 799 800 platform_device_register(&orion_xor1_shared); 801 802 orion_xor_init_channels(&orion_xor10_data, &orion_xor10_channel, 803 &orion_xor11_data, &orion_xor11_channel); 804 } 805 806 /***************************************************************************** 807 * EHCI 808 ****************************************************************************/ 809 static struct orion_ehci_data orion_ehci_data = { 810 .phy_version = EHCI_PHY_NA, 811 }; 812 813 static u64 ehci_dmamask = DMA_BIT_MASK(32); 814 815 816 /***************************************************************************** 817 * EHCI0 818 ****************************************************************************/ 819 static struct resource orion_ehci_resources[2]; 820 821 static struct platform_device orion_ehci = { 822 .name = "orion-ehci", 823 .id = 0, 824 .dev = { 825 .dma_mask = &ehci_dmamask, 826 .coherent_dma_mask = DMA_BIT_MASK(32), 827 .platform_data = &orion_ehci_data, 828 }, 829 }; 830 831 void __init orion_ehci_init(struct mbus_dram_target_info *mbus_dram_info, 832 unsigned long mapbase, 833 unsigned long irq) 834 { 835 orion_ehci_data.dram = mbus_dram_info; 836 fill_resources(&orion_ehci, orion_ehci_resources, mapbase, SZ_4K - 1, 837 irq); 838 839 platform_device_register(&orion_ehci); 840 } 841 842 /***************************************************************************** 843 * EHCI1 844 ****************************************************************************/ 845 static struct resource orion_ehci_1_resources[2]; 846 847 static struct platform_device orion_ehci_1 = { 848 .name = "orion-ehci", 849 .id = 1, 850 .dev = { 851 .dma_mask = &ehci_dmamask, 852 .coherent_dma_mask = DMA_BIT_MASK(32), 853 .platform_data = &orion_ehci_data, 854 }, 855 }; 856 857 void __init orion_ehci_1_init(struct mbus_dram_target_info *mbus_dram_info, 858 unsigned long mapbase, 859 unsigned long irq) 860 { 861 orion_ehci_data.dram = mbus_dram_info; 862 fill_resources(&orion_ehci_1, orion_ehci_1_resources, 863 mapbase, SZ_4K - 1, irq); 864 865 platform_device_register(&orion_ehci_1); 866 } 867 868 /***************************************************************************** 869 * EHCI2 870 ****************************************************************************/ 871 static struct resource orion_ehci_2_resources[2]; 872 873 static struct platform_device orion_ehci_2 = { 874 .name = "orion-ehci", 875 .id = 2, 876 .dev = { 877 .dma_mask = &ehci_dmamask, 878 .coherent_dma_mask = DMA_BIT_MASK(32), 879 .platform_data = &orion_ehci_data, 880 }, 881 }; 882 883 void __init orion_ehci_2_init(struct mbus_dram_target_info *mbus_dram_info, 884 unsigned long mapbase, 885 unsigned long irq) 886 { 887 orion_ehci_data.dram = mbus_dram_info; 888 fill_resources(&orion_ehci_2, orion_ehci_2_resources, 889 mapbase, SZ_4K - 1, irq); 890 891 platform_device_register(&orion_ehci_2); 892 } 893 894 /***************************************************************************** 895 * SATA 896 ****************************************************************************/ 897 static struct resource orion_sata_resources[2] = { 898 { 899 .name = "sata base", 900 }, { 901 .name = "sata irq", 902 }, 903 }; 904 905 static struct platform_device orion_sata = { 906 .name = "sata_mv", 907 .id = 0, 908 .dev = { 909 .coherent_dma_mask = DMA_BIT_MASK(32), 910 }, 911 }; 912 913 void __init orion_sata_init(struct mv_sata_platform_data *sata_data, 914 struct mbus_dram_target_info *mbus_dram_info, 915 unsigned long mapbase, 916 unsigned long irq) 917 { 918 sata_data->dram = mbus_dram_info; 919 orion_sata.dev.platform_data = sata_data; 920 fill_resources(&orion_sata, orion_sata_resources, 921 mapbase, 0x5000 - 1, irq); 922 923 platform_device_register(&orion_sata); 924 } 925 926 /***************************************************************************** 927 * Cryptographic Engines and Security Accelerator (CESA) 928 ****************************************************************************/ 929 static struct resource orion_crypto_resources[] = { 930 { 931 .name = "regs", 932 }, { 933 .name = "crypto interrupt", 934 }, { 935 .name = "sram", 936 .flags = IORESOURCE_MEM, 937 }, 938 }; 939 940 static struct platform_device orion_crypto = { 941 .name = "mv_crypto", 942 .id = -1, 943 }; 944 945 void __init orion_crypto_init(unsigned long mapbase, 946 unsigned long srambase, 947 unsigned long sram_size, 948 unsigned long irq) 949 { 950 fill_resources(&orion_crypto, orion_crypto_resources, 951 mapbase, 0xffff, irq); 952 orion_crypto.num_resources = 3; 953 orion_crypto_resources[2].start = srambase; 954 orion_crypto_resources[2].end = srambase + sram_size - 1; 955 956 platform_device_register(&orion_crypto); 957 } 958