diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2008-09-17 11:13:58 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2008-10-11 11:18:54 -0400 |
commit | 4bacc68766b11c191ee1567f54103f109c002f4f (patch) | |
tree | 1ec76e9f6db35a0c2e3988e5f4e19cbaa7fe211f | |
parent | 2a31b03335e570dce5fdd082e0d71d48b2cb4290 (diff) |
MIPS: TXx9: Add TX4939 ATA support (v2)
Add a helper routine to register tx4939ide driver and use it on
RBTX4939 board.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r-- | arch/mips/include/asm/txx9/tx4939.h | 1 | ||||
-rw-r--r-- | arch/mips/txx9/generic/setup_tx4939.c | 46 | ||||
-rw-r--r-- | arch/mips/txx9/rbtx4939/setup.c | 1 |
3 files changed, 48 insertions, 0 deletions
diff --git a/arch/mips/include/asm/txx9/tx4939.h b/arch/mips/include/asm/txx9/tx4939.h index 7ce2dff3b7cc..88badb423010 100644 --- a/arch/mips/include/asm/txx9/tx4939.h +++ b/arch/mips/include/asm/txx9/tx4939.h | |||
@@ -540,5 +540,6 @@ void tx4939_setup_pcierr_irq(void); | |||
540 | void tx4939_irq_init(void); | 540 | void tx4939_irq_init(void); |
541 | int tx4939_irq(void); | 541 | int tx4939_irq(void); |
542 | void tx4939_mtd_init(int ch); | 542 | void tx4939_mtd_init(int ch); |
543 | void tx4939_ata_init(void); | ||
543 | 544 | ||
544 | #endif /* __ASM_TXX9_TX4939_H */ | 545 | #endif /* __ASM_TXX9_TX4939_H */ |
diff --git a/arch/mips/txx9/generic/setup_tx4939.c b/arch/mips/txx9/generic/setup_tx4939.c index f14a497077da..6c0049a5bbc1 100644 --- a/arch/mips/txx9/generic/setup_tx4939.c +++ b/arch/mips/txx9/generic/setup_tx4939.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/param.h> | 20 | #include <linux/param.h> |
21 | #include <linux/ptrace.h> | 21 | #include <linux/ptrace.h> |
22 | #include <linux/mtd/physmap.h> | 22 | #include <linux/mtd/physmap.h> |
23 | #include <linux/platform_device.h> | ||
23 | #include <asm/bootinfo.h> | 24 | #include <asm/bootinfo.h> |
24 | #include <asm/reboot.h> | 25 | #include <asm/reboot.h> |
25 | #include <asm/traps.h> | 26 | #include <asm/traps.h> |
@@ -389,6 +390,51 @@ void __init tx4939_mtd_init(int ch) | |||
389 | txx9_physmap_flash_init(ch, start, size, &pdata); | 390 | txx9_physmap_flash_init(ch, start, size, &pdata); |
390 | } | 391 | } |
391 | 392 | ||
393 | #define TX4939_ATA_REG_PHYS(ch) (TX4939_ATA_REG(ch) & 0xfffffffffULL) | ||
394 | void __init tx4939_ata_init(void) | ||
395 | { | ||
396 | static struct resource ata0_res[] = { | ||
397 | { | ||
398 | .start = TX4939_ATA_REG_PHYS(0), | ||
399 | .end = TX4939_ATA_REG_PHYS(0) + 0x1000 - 1, | ||
400 | .flags = IORESOURCE_MEM, | ||
401 | }, { | ||
402 | .start = TXX9_IRQ_BASE + TX4939_IR_ATA(0), | ||
403 | .flags = IORESOURCE_IRQ, | ||
404 | }, | ||
405 | }; | ||
406 | static struct resource ata1_res[] = { | ||
407 | { | ||
408 | .start = TX4939_ATA_REG_PHYS(1), | ||
409 | .end = TX4939_ATA_REG_PHYS(1) + 0x1000 - 1, | ||
410 | .flags = IORESOURCE_MEM, | ||
411 | }, { | ||
412 | .start = TXX9_IRQ_BASE + TX4939_IR_ATA(1), | ||
413 | .flags = IORESOURCE_IRQ, | ||
414 | }, | ||
415 | }; | ||
416 | static struct platform_device ata0_dev = { | ||
417 | .name = "tx4939ide", | ||
418 | .id = 0, | ||
419 | .num_resources = ARRAY_SIZE(ata0_res), | ||
420 | .resource = ata0_res, | ||
421 | }; | ||
422 | static struct platform_device ata1_dev = { | ||
423 | .name = "tx4939ide", | ||
424 | .id = 1, | ||
425 | .num_resources = ARRAY_SIZE(ata1_res), | ||
426 | .resource = ata1_res, | ||
427 | }; | ||
428 | __u64 pcfg = __raw_readq(&tx4939_ccfgptr->pcfg); | ||
429 | |||
430 | if (pcfg & TX4939_PCFG_ATA0MODE) | ||
431 | platform_device_register(&ata0_dev); | ||
432 | if ((pcfg & (TX4939_PCFG_ATA1MODE | | ||
433 | TX4939_PCFG_ET1MODE | | ||
434 | TX4939_PCFG_ET0MODE)) == TX4939_PCFG_ATA1MODE) | ||
435 | platform_device_register(&ata1_dev); | ||
436 | } | ||
437 | |||
392 | static void __init tx4939_stop_unused_modules(void) | 438 | static void __init tx4939_stop_unused_modules(void) |
393 | { | 439 | { |
394 | __u64 pcfg, rst = 0, ckd = 0; | 440 | __u64 pcfg, rst = 0, ckd = 0; |
diff --git a/arch/mips/txx9/rbtx4939/setup.c b/arch/mips/txx9/rbtx4939/setup.c index 277864d5e779..9855d7bccc20 100644 --- a/arch/mips/txx9/rbtx4939/setup.c +++ b/arch/mips/txx9/rbtx4939/setup.c | |||
@@ -264,6 +264,7 @@ static void __init rbtx4939_device_init(void) | |||
264 | #endif | 264 | #endif |
265 | rbtx4939_led_setup(); | 265 | rbtx4939_led_setup(); |
266 | tx4939_wdt_init(); | 266 | tx4939_wdt_init(); |
267 | tx4939_ata_init(); | ||
267 | } | 268 | } |
268 | 269 | ||
269 | static void __init rbtx4939_setup(void) | 270 | static void __init rbtx4939_setup(void) |