diff options
Diffstat (limited to 'arch/arm/mach-footbridge/netwinder-hw.c')
-rw-r--r-- | arch/arm/mach-footbridge/netwinder-hw.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/arm/mach-footbridge/netwinder-hw.c b/arch/arm/mach-footbridge/netwinder-hw.c index 0d3846f3b60d..80a1c5cc9071 100644 --- a/arch/arm/mach-footbridge/netwinder-hw.c +++ b/arch/arm/mach-footbridge/netwinder-hw.c | |||
@@ -645,6 +645,32 @@ fixup_netwinder(struct tag *tags, char **cmdline, struct meminfo *mi) | |||
645 | #endif | 645 | #endif |
646 | } | 646 | } |
647 | 647 | ||
648 | static void netwinder_restart(char mode, const char *cmd) | ||
649 | { | ||
650 | if (mode == 's') { | ||
651 | /* Jump into the ROM */ | ||
652 | soft_restart(0x41000000); | ||
653 | } else { | ||
654 | local_irq_disable(); | ||
655 | local_fiq_disable(); | ||
656 | |||
657 | /* open up the SuperIO chip */ | ||
658 | outb(0x87, 0x370); | ||
659 | outb(0x87, 0x370); | ||
660 | |||
661 | /* aux function group 1 (logical device 7) */ | ||
662 | outb(0x07, 0x370); | ||
663 | outb(0x07, 0x371); | ||
664 | |||
665 | /* set GP16 for WD-TIMER output */ | ||
666 | outb(0xe6, 0x370); | ||
667 | outb(0x00, 0x371); | ||
668 | |||
669 | /* set a RED LED and toggle WD_TIMER for rebooting */ | ||
670 | outb(0xc4, 0x338); | ||
671 | } | ||
672 | } | ||
673 | |||
648 | MACHINE_START(NETWINDER, "Rebel-NetWinder") | 674 | MACHINE_START(NETWINDER, "Rebel-NetWinder") |
649 | /* Maintainer: Russell King/Rebel.com */ | 675 | /* Maintainer: Russell King/Rebel.com */ |
650 | .atag_offset = 0x100, | 676 | .atag_offset = 0x100, |
@@ -656,4 +682,5 @@ MACHINE_START(NETWINDER, "Rebel-NetWinder") | |||
656 | .map_io = footbridge_map_io, | 682 | .map_io = footbridge_map_io, |
657 | .init_irq = footbridge_init_irq, | 683 | .init_irq = footbridge_init_irq, |
658 | .timer = &isa_timer, | 684 | .timer = &isa_timer, |
685 | .restart = netwinder_restart, | ||
659 | MACHINE_END | 686 | MACHINE_END |