mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 17:23:55 +08:00
ARM: restart: ixp2000: use new restart hook
Hook these platforms restart code into the new restart hook rather than using arch_reset(). In doing so, we split out the IXDP2401, IXDP2801 and IXDP2805 platform specific restart code into their own platform files. Acked-by: Lennert Buytenhek <buytenh@wantstofly.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
00aa78eea2
commit
1139b926c4
@ -515,3 +515,7 @@ void __init ixp2000_init_irq(void)
|
||||
}
|
||||
}
|
||||
|
||||
void ixp2000_restart(char mode, const char *cmd)
|
||||
{
|
||||
ixp2000_reg_wrb(IXP2000_RESET0, RSTALL);
|
||||
}
|
||||
|
@ -259,6 +259,7 @@ MACHINE_START(ENP2611, "Radisys ENP-2611 PCI network processor board")
|
||||
.init_irq = ixp2000_init_irq,
|
||||
.timer = &enp2611_timer,
|
||||
.init_machine = enp2611_init_machine,
|
||||
.restart = ixp2000_restart,
|
||||
MACHINE_END
|
||||
|
||||
|
||||
|
@ -122,6 +122,7 @@ void ixp2000_map_io(void);
|
||||
void ixp2000_uart_init(void);
|
||||
void ixp2000_init_irq(void);
|
||||
void ixp2000_init_time(unsigned long);
|
||||
void ixp2000_restart(char, const char *);
|
||||
unsigned long ixp2000_gettimeoffset(void);
|
||||
|
||||
struct pci_sys_data;
|
||||
|
@ -8,10 +8,6 @@
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
static inline void arch_idle(void)
|
||||
{
|
||||
cpu_do_idle();
|
||||
@ -19,29 +15,4 @@ static inline void arch_idle(void)
|
||||
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* Reset flash banking register so that we are pointing at
|
||||
* RedBoot bank.
|
||||
*/
|
||||
if (machine_is_ixdp2401()) {
|
||||
ixp2000_reg_write(IXDP2X01_CPLD_FLASH_REG,
|
||||
((0 >> IXDP2X01_FLASH_WINDOW_BITS)
|
||||
| IXDP2X01_CPLD_FLASH_INTERN));
|
||||
ixp2000_reg_wrb(IXDP2X01_CPLD_RESET_REG, 0xffffffff);
|
||||
}
|
||||
|
||||
/*
|
||||
* On IXDP2801 we need to write this magic sequence to the CPLD
|
||||
* to cause a complete reset of the CPU and all external devices
|
||||
* and move the flash bank register back to 0.
|
||||
*/
|
||||
if (machine_is_ixdp2801() || machine_is_ixdp28x5()) {
|
||||
unsigned long reset_reg = *IXDP2X01_CPLD_RESET_REG;
|
||||
|
||||
reset_reg = 0x55AA0000 | (reset_reg & 0x0000FFFF);
|
||||
ixp2000_reg_write(IXDP2X01_CPLD_RESET_REG, reset_reg);
|
||||
ixp2000_reg_wrb(IXDP2X01_CPLD_RESET_REG, 0x80000000);
|
||||
}
|
||||
|
||||
ixp2000_reg_wrb(IXP2000_RESET0, RSTALL);
|
||||
}
|
||||
|
@ -176,5 +176,6 @@ MACHINE_START(IXDP2400, "Intel IXDP2400 Development Platform")
|
||||
.init_irq = ixdp2400_init_irq,
|
||||
.timer = &ixdp2400_timer,
|
||||
.init_machine = ixdp2x00_init_machine,
|
||||
.restart = ixp2000_restart,
|
||||
MACHINE_END
|
||||
|
||||
|
@ -291,5 +291,6 @@ MACHINE_START(IXDP2800, "Intel IXDP2800 Development Platform")
|
||||
.init_irq = ixdp2800_init_irq,
|
||||
.timer = &ixdp2800_timer,
|
||||
.init_machine = ixdp2x00_init_machine,
|
||||
.restart = ixp2000_restart,
|
||||
MACHINE_END
|
||||
|
||||
|
@ -413,6 +413,35 @@ static void __init ixdp2x01_init_machine(void)
|
||||
ixdp2x01_uart_init();
|
||||
}
|
||||
|
||||
static void ixdp2401_restart(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* Reset flash banking register so that we are pointing at
|
||||
* RedBoot bank.
|
||||
*/
|
||||
ixp2000_reg_write(IXDP2X01_CPLD_FLASH_REG,
|
||||
((0 >> IXDP2X01_FLASH_WINDOW_BITS)
|
||||
| IXDP2X01_CPLD_FLASH_INTERN));
|
||||
ixp2000_reg_wrb(IXDP2X01_CPLD_RESET_REG, 0xffffffff);
|
||||
|
||||
ixp2000_restart(mode, cmd);
|
||||
}
|
||||
|
||||
static void ixdp280x_restart(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* On IXDP2801 we need to write this magic sequence to the CPLD
|
||||
* to cause a complete reset of the CPU and all external devices
|
||||
* and move the flash bank register back to 0.
|
||||
*/
|
||||
unsigned long reset_reg = *IXDP2X01_CPLD_RESET_REG;
|
||||
|
||||
reset_reg = 0x55AA0000 | (reset_reg & 0x0000FFFF);
|
||||
ixp2000_reg_write(IXDP2X01_CPLD_RESET_REG, reset_reg);
|
||||
ixp2000_reg_wrb(IXDP2X01_CPLD_RESET_REG, 0x80000000);
|
||||
|
||||
ixp2000_restart(mode, cmd);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_IXDP2401
|
||||
MACHINE_START(IXDP2401, "Intel IXDP2401 Development Platform")
|
||||
@ -422,6 +451,7 @@ MACHINE_START(IXDP2401, "Intel IXDP2401 Development Platform")
|
||||
.init_irq = ixdp2x01_init_irq,
|
||||
.timer = &ixdp2x01_timer,
|
||||
.init_machine = ixdp2x01_init_machine,
|
||||
.restart = ixdp2401_restart,
|
||||
MACHINE_END
|
||||
#endif
|
||||
|
||||
@ -433,6 +463,7 @@ MACHINE_START(IXDP2801, "Intel IXDP2801 Development Platform")
|
||||
.init_irq = ixdp2x01_init_irq,
|
||||
.timer = &ixdp2x01_timer,
|
||||
.init_machine = ixdp2x01_init_machine,
|
||||
.restart = ixdp280x_restart,
|
||||
MACHINE_END
|
||||
|
||||
/*
|
||||
@ -446,6 +477,7 @@ MACHINE_START(IXDP28X5, "Intel IXDP2805/2855 Development Platform")
|
||||
.init_irq = ixdp2x01_init_irq,
|
||||
.timer = &ixdp2x01_timer,
|
||||
.init_machine = ixdp2x01_init_machine,
|
||||
.restart = ixdp280x_restart,
|
||||
MACHINE_END
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user