diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/momentum/ocelot_c/setup.c | 124 |
1 files changed, 121 insertions, 3 deletions
diff --git a/arch/mips/momentum/ocelot_c/setup.c b/arch/mips/momentum/ocelot_c/setup.c index 9c0c462af650..0a3ffa33771d 100644 --- a/arch/mips/momentum/ocelot_c/setup.c +++ b/arch/mips/momentum/ocelot_c/setup.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #include <linux/sched.h> | 50 | #include <linux/sched.h> |
51 | #include <linux/interrupt.h> | 51 | #include <linux/interrupt.h> |
52 | #include <linux/pci.h> | 52 | #include <linux/pci.h> |
53 | #include <linux/platform_device.h> | ||
53 | #include <linux/pm.h> | 54 | #include <linux/pm.h> |
54 | #include <linux/timex.h> | 55 | #include <linux/timex.h> |
55 | #include <linux/vmalloc.h> | 56 | #include <linux/vmalloc.h> |
@@ -69,7 +70,6 @@ | |||
69 | #include "ocelot_c_fpga.h" | 70 | #include "ocelot_c_fpga.h" |
70 | 71 | ||
71 | unsigned long marvell_base; | 72 | unsigned long marvell_base; |
72 | extern unsigned long mv64340_sram_base; | ||
73 | unsigned long cpu_clock; | 73 | unsigned long cpu_clock; |
74 | 74 | ||
75 | /* These functions are used for rebooting or halting the machine*/ | 75 | /* These functions are used for rebooting or halting the machine*/ |
@@ -119,7 +119,6 @@ void PMON_v2_setup(void) | |||
119 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfffffffffe000000, PM_16M); | 119 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfffffffffe000000, PM_16M); |
120 | 120 | ||
121 | marvell_base = 0xfffffffff4000000; | 121 | marvell_base = 0xfffffffff4000000; |
122 | mv64340_sram_base = 0xfffffffffe000000; | ||
123 | #else | 122 | #else |
124 | /* marvell and extra space */ | 123 | /* marvell and extra space */ |
125 | add_wired_entry(ENTRYLO(0xf4000000), ENTRYLO(0xf4010000), 0xf4000000, PM_64K); | 124 | add_wired_entry(ENTRYLO(0xf4000000), ENTRYLO(0xf4010000), 0xf4000000, PM_64K); |
@@ -129,7 +128,6 @@ void PMON_v2_setup(void) | |||
129 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfe000000, PM_16M); | 128 | add_wired_entry(ENTRYLO(0xfe000000), ENTRYLO(0xff000000), 0xfe000000, PM_16M); |
130 | 129 | ||
131 | marvell_base = 0xf4000000; | 130 | marvell_base = 0xf4000000; |
132 | mv64340_sram_base = 0xfe000000; | ||
133 | #endif | 131 | #endif |
134 | } | 132 | } |
135 | 133 | ||
@@ -365,3 +363,123 @@ static int io_base_ioremap(void) | |||
365 | 363 | ||
366 | module_init(io_base_ioremap); | 364 | module_init(io_base_ioremap); |
367 | #endif | 365 | #endif |
366 | |||
367 | #if defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) | ||
368 | |||
369 | static struct resource mv643xx_eth_shared_resources[] = { | ||
370 | [0] = { | ||
371 | .name = "ethernet shared base", | ||
372 | .start = 0xf1000000 + MV643XX_ETH_SHARED_REGS, | ||
373 | .end = 0xf1000000 + MV643XX_ETH_SHARED_REGS + | ||
374 | MV643XX_ETH_SHARED_REGS_SIZE - 1, | ||
375 | .flags = IORESOURCE_MEM, | ||
376 | }, | ||
377 | }; | ||
378 | |||
379 | static struct platform_device mv643xx_eth_shared_device = { | ||
380 | .name = MV643XX_ETH_SHARED_NAME, | ||
381 | .id = 0, | ||
382 | .num_resources = ARRAY_SIZE(mv643xx_eth_shared_resources), | ||
383 | .resource = mv643xx_eth_shared_resources, | ||
384 | }; | ||
385 | |||
386 | #define MV_SRAM_BASE 0xfe000000UL | ||
387 | #define MV_SRAM_SIZE (256 * 1024) | ||
388 | |||
389 | #define MV_SRAM_RXRING_SIZE (MV_SRAM_SIZE / 4) | ||
390 | #define MV_SRAM_TXRING_SIZE (MV_SRAM_SIZE / 4) | ||
391 | |||
392 | #define MV_SRAM_BASE_ETH0 MV_SRAM_BASE | ||
393 | #define MV_SRAM_BASE_ETH1 (MV_SRAM_BASE + (MV_SRAM_SIZE / 2)) | ||
394 | |||
395 | #define MV64x60_IRQ_ETH_0 48 | ||
396 | #define MV64x60_IRQ_ETH_1 49 | ||
397 | |||
398 | #ifdef CONFIG_MV643XX_ETH_0 | ||
399 | |||
400 | static struct resource mv64x60_eth0_resources[] = { | ||
401 | [0] = { | ||
402 | .name = "eth0 irq", | ||
403 | .start = MV64x60_IRQ_ETH_0, | ||
404 | .end = MV64x60_IRQ_ETH_0, | ||
405 | .flags = IORESOURCE_IRQ, | ||
406 | }, | ||
407 | }; | ||
408 | |||
409 | static struct mv643xx_eth_platform_data eth0_pd = { | ||
410 | .tx_sram_addr = MV_SRAM_BASE_ETH0, | ||
411 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
412 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
413 | |||
414 | .rx_sram_addr = MV_SRAM_BASE_ETH0 + MV_SRAM_TXRING_SIZE, | ||
415 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
416 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
417 | }; | ||
418 | |||
419 | static struct platform_device eth0_device = { | ||
420 | .name = MV643XX_ETH_NAME, | ||
421 | .id = 0, | ||
422 | .num_resources = ARRAY_SIZE(mv64x60_eth0_resources), | ||
423 | .resource = mv64x60_eth0_resources, | ||
424 | .dev = { | ||
425 | .platform_data = ð0_pd, | ||
426 | }, | ||
427 | }; | ||
428 | #endif /* CONFIG_MV643XX_ETH_0 */ | ||
429 | |||
430 | #ifdef CONFIG_MV643XX_ETH_1 | ||
431 | |||
432 | static struct resource mv64x60_eth1_resources[] = { | ||
433 | [0] = { | ||
434 | .name = "eth1 irq", | ||
435 | .start = MV64x60_IRQ_ETH_1, | ||
436 | .end = MV64x60_IRQ_ETH_1, | ||
437 | .flags = IORESOURCE_IRQ, | ||
438 | }, | ||
439 | }; | ||
440 | |||
441 | static struct mv643xx_eth_platform_data eth1_pd = { | ||
442 | .tx_sram_addr = MV_SRAM_BASE_ETH1, | ||
443 | .tx_sram_size = MV_SRAM_TXRING_SIZE, | ||
444 | .tx_queue_size = MV_SRAM_TXRING_SIZE / 16, | ||
445 | |||
446 | .rx_sram_addr = MV_SRAM_BASE_ETH1 + MV_SRAM_TXRING_SIZE, | ||
447 | .rx_sram_size = MV_SRAM_RXRING_SIZE, | ||
448 | .rx_queue_size = MV_SRAM_RXRING_SIZE / 16, | ||
449 | }; | ||
450 | |||
451 | static struct platform_device eth1_device = { | ||
452 | .name = MV643XX_ETH_NAME, | ||
453 | .id = 1, | ||
454 | .num_resources = ARRAY_SIZE(mv64x60_eth1_resources), | ||
455 | .resource = mv64x60_eth1_resources, | ||
456 | .dev = { | ||
457 | .platform_data = ð1_pd, | ||
458 | }, | ||
459 | }; | ||
460 | #endif /* CONFIG_MV643XX_ETH_1 */ | ||
461 | |||
462 | static struct platform_device *mv643xx_eth_pd_devs[] __initdata = { | ||
463 | &mv643xx_eth_shared_device, | ||
464 | #ifdef CONFIG_MV643XX_ETH_0 | ||
465 | ð0_device, | ||
466 | #endif | ||
467 | #ifdef CONFIG_MV643XX_ETH_1 | ||
468 | ð1_device, | ||
469 | #endif | ||
470 | /* The third port is not wired up on the Ocelot C */ | ||
471 | }; | ||
472 | |||
473 | int mv643xx_eth_add_pds(void) | ||
474 | { | ||
475 | int ret; | ||
476 | |||
477 | ret = platform_add_devices(mv643xx_eth_pd_devs, | ||
478 | ARRAY_SIZE(mv643xx_eth_pd_devs)); | ||
479 | |||
480 | return ret; | ||
481 | } | ||
482 | |||
483 | device_initcall(mv643xx_eth_add_pds); | ||
484 | |||
485 | #endif /* defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) */ | ||