mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[ARM] pass reboot command line to arch_reset()
OMAP wishes to pass state to the boot loader upon reboot in order to instruct it whether to wait for USB-based reflashing or not. There is already a facility to do this via the reboot() syscall, except we ignore the string passed to machine_restart(). This patch fixes things to pass this string to arch_reset(). This means that we keep the reboot mode limited to telling the kernel _how_ to perform the reboot which should be independent of what we request the boot loader to do. Acked-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
14b6848bc0
commit
be093beb60
50 changed files with 65 additions and 65 deletions
|
@ -97,8 +97,8 @@ extern void __show_regs(struct pt_regs *);
|
|||
extern int cpu_architecture(void);
|
||||
extern void cpu_init(void);
|
||||
|
||||
void arm_machine_restart(char mode);
|
||||
extern void (*arm_pm_restart)(char str);
|
||||
void arm_machine_restart(char mode, const char *cmd);
|
||||
extern void (*arm_pm_restart)(char str, const char *cmd);
|
||||
|
||||
#define UDBG_UNDEFINED (1 << 0)
|
||||
#define UDBG_SYSCALL (1 << 1)
|
||||
|
|
|
@ -83,7 +83,7 @@ static int __init hlt_setup(char *__unused)
|
|||
__setup("nohlt", nohlt_setup);
|
||||
__setup("hlt", hlt_setup);
|
||||
|
||||
void arm_machine_restart(char mode)
|
||||
void arm_machine_restart(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* Clean and disable cache, and turn off interrupts
|
||||
|
@ -100,7 +100,7 @@ void arm_machine_restart(char mode)
|
|||
/*
|
||||
* Now call the architecture specific reboot code.
|
||||
*/
|
||||
arch_reset(mode);
|
||||
arch_reset(mode, cmd);
|
||||
|
||||
/*
|
||||
* Whoops - the architecture was unable to reboot.
|
||||
|
@ -120,7 +120,7 @@ EXPORT_SYMBOL(pm_idle);
|
|||
void (*pm_power_off)(void);
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
void (*arm_pm_restart)(char str) = arm_machine_restart;
|
||||
void (*arm_pm_restart)(char str, const char *cmd) = arm_machine_restart;
|
||||
EXPORT_SYMBOL_GPL(arm_pm_restart);
|
||||
|
||||
|
||||
|
@ -195,9 +195,9 @@ void machine_power_off(void)
|
|||
pm_power_off();
|
||||
}
|
||||
|
||||
void machine_restart(char * __unused)
|
||||
void machine_restart(char *cmd)
|
||||
{
|
||||
arm_pm_restart(reboot_mode);
|
||||
arm_pm_restart(reboot_mode, cmd);
|
||||
}
|
||||
|
||||
void __show_regs(struct pt_regs *regs)
|
||||
|
|
|
@ -16,7 +16,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
cpu_reset(0);
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ static inline void arch_idle(void)
|
|||
|
||||
void (*at91_arch_reset)(void);
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/* call the CPU-specific reset function */
|
||||
if (at91_arch_reset)
|
||||
|
|
|
@ -32,7 +32,7 @@ static inline void arch_idle(void)
|
|||
mov r0, r0");
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
cpu_reset(0);
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ static void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static void arch_reset(char mode)
|
||||
static void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
davinci_watchdog_reset();
|
||||
}
|
||||
|
|
|
@ -34,6 +34,6 @@ static inline void arch_idle(void)
|
|||
asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc");
|
||||
}
|
||||
|
||||
#define arch_reset(mode) cpu_reset(0x80000000)
|
||||
#define arch_reset(mode, cmd) cpu_reset(0x80000000)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -9,7 +9,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
u32 devicecfg;
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
if (mode == 's') {
|
||||
/*
|
||||
|
|
|
@ -25,7 +25,7 @@ static void arch_idle(void)
|
|||
}
|
||||
|
||||
|
||||
static __inline__ void arch_reset(char mode)
|
||||
static __inline__ void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
CPU_REG (PMU_BASE, PMU_STAT) |= PMU_WARMRESET;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ arch_idle(void)
|
|||
}
|
||||
|
||||
static inline void
|
||||
arch_reset(char mode)
|
||||
arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
cpu_reset(0);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* To reset, we hit the on-board reset register
|
||||
|
|
|
@ -13,7 +13,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* Reset the internal bus (warning both cores are reset)
|
||||
|
|
|
@ -16,7 +16,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
local_irq_disable();
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
*IOP3XX_PCSR = 0x30;
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
local_irq_disable();
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ static inline void arch_idle(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/* First try machine specific support */
|
||||
if (machine_is_ixdp2351()) {
|
||||
|
|
|
@ -20,7 +20,7 @@ static inline void arch_idle(void)
|
|||
}
|
||||
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
if ( 1 && mode == 's') {
|
||||
/* Jump into ROM at address 0 */
|
||||
|
|
|
@ -17,7 +17,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* Enable soft reset to assert RSTOUTn.
|
||||
|
|
|
@ -27,7 +27,7 @@ static void arch_idle(void)
|
|||
|
||||
}
|
||||
|
||||
static void arch_reset(char mode)
|
||||
static void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
unsigned int reg;
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ static inline void arch_idle(void)
|
|||
*(unsigned long *)(IO_BASE + 0x50004) = 1; /* idle mode */
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
if (mode == 's') {
|
||||
cpu_reset(0);
|
||||
|
|
|
@ -13,7 +13,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle ();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
cpu_reset (0);
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* Enable soft reset to assert RSTOUTn.
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
void arch_idle(void);
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
for (;;) ; /* depends on IPC w/ other core */
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* Enable soft reset to assert RSTOUTn.
|
||||
|
|
|
@ -46,7 +46,7 @@ void arch_idle(void)
|
|||
/*
|
||||
* Reset the system. It is called by machine_restart().
|
||||
*/
|
||||
void arch_reset(char mode)
|
||||
void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
struct clk *clk;
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
writel(NETX_SYSTEM_RES_CR_FIRMW_RES_EN | NETX_SYSTEM_RES_CR_FIRMW_RES,
|
||||
NETX_SYSTEM_RES_CR);
|
||||
|
|
|
@ -20,7 +20,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
#ifdef CONFIG_PROCESSOR_NS9360
|
||||
if (processor_is_ns9360())
|
||||
|
|
|
@ -19,7 +19,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/*
|
||||
* Enable and issue soft reset
|
||||
|
|
|
@ -186,7 +186,7 @@ static struct mv_sata_platform_data lsmini_sata_data = {
|
|||
|
||||
static void lsmini_power_off(void)
|
||||
{
|
||||
arch_reset(0);
|
||||
arch_reset(0, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ static void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
cpu_reset(0);
|
||||
}
|
||||
|
|
|
@ -635,16 +635,16 @@ static void corgi_poweroff(void)
|
|||
/* Green LED off tells the bootloader to halt */
|
||||
gpio_set_value(CORGI_GPIO_LED_GREEN, 0);
|
||||
|
||||
arm_machine_restart('h');
|
||||
arm_machine_restart('h', NULL);
|
||||
}
|
||||
|
||||
static void corgi_restart(char mode)
|
||||
static void corgi_restart(char mode, const char *cmd)
|
||||
{
|
||||
if (!machine_is_corgi())
|
||||
/* Green LED on tells the bootloader to reboot */
|
||||
gpio_set_value(CORGI_GPIO_LED_GREEN, 1);
|
||||
|
||||
arm_machine_restart('h');
|
||||
arm_machine_restart('h', cmd);
|
||||
}
|
||||
|
||||
static void __init corgi_init(void)
|
||||
|
|
|
@ -20,4 +20,4 @@ static inline void arch_idle(void)
|
|||
}
|
||||
|
||||
|
||||
void arch_reset(char mode);
|
||||
void arch_reset(char mode, const char *cmd);
|
||||
|
|
|
@ -788,13 +788,13 @@ static void mioa701_machine_exit(void);
|
|||
static void mioa701_poweroff(void)
|
||||
{
|
||||
mioa701_machine_exit();
|
||||
arm_machine_restart('s');
|
||||
arm_machine_restart('s', NULL);
|
||||
}
|
||||
|
||||
static void mioa701_restart(char c)
|
||||
static void mioa701_restart(char c, const char *cmd)
|
||||
{
|
||||
mioa701_machine_exit();
|
||||
arm_machine_restart('s');
|
||||
arm_machine_restart('s', cmd);
|
||||
}
|
||||
|
||||
struct gpio_ress global_gpios[] = {
|
||||
|
|
|
@ -501,12 +501,12 @@ static struct platform_device *devices[] __initdata = {
|
|||
|
||||
static void poodle_poweroff(void)
|
||||
{
|
||||
arm_machine_restart('h');
|
||||
arm_machine_restart('h', NULL);
|
||||
}
|
||||
|
||||
static void poodle_restart(char mode)
|
||||
static void poodle_restart(char mode, const char *cmd)
|
||||
{
|
||||
arm_machine_restart('h');
|
||||
arm_machine_restart('h', cmd);
|
||||
}
|
||||
|
||||
static void __init poodle_init(void)
|
||||
|
|
|
@ -81,7 +81,7 @@ static void do_hw_reset(void)
|
|||
OSMR3 = OSCR + 368640; /* ... in 100 ms */
|
||||
}
|
||||
|
||||
void arch_reset(char mode)
|
||||
void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
clear_reset_status(RESET_STATUS_ALL);
|
||||
|
||||
|
|
|
@ -701,10 +701,10 @@ static struct platform_device *devices[] __initdata = {
|
|||
|
||||
static void spitz_poweroff(void)
|
||||
{
|
||||
arm_machine_restart('g');
|
||||
arm_machine_restart('g', NULL);
|
||||
}
|
||||
|
||||
static void spitz_restart(char mode)
|
||||
static void spitz_restart(char mode, const char *cmd)
|
||||
{
|
||||
/* Bootloader magic for a reboot */
|
||||
if((MSC0 & 0xffff0000) == 0x7ff00000)
|
||||
|
|
|
@ -876,10 +876,10 @@ static struct platform_device *devices[] __initdata = {
|
|||
|
||||
static void tosa_poweroff(void)
|
||||
{
|
||||
arm_machine_restart('g');
|
||||
arm_machine_restart('g', NULL);
|
||||
}
|
||||
|
||||
static void tosa_restart(char mode)
|
||||
static void tosa_restart(char mode, const char *cmd)
|
||||
{
|
||||
/* Bootloader magic for a reboot */
|
||||
if((MSC0 & 0xffff0000) == 0x7ff00000)
|
||||
|
|
|
@ -34,7 +34,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
void __iomem *hdr_ctrl = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_RESETCTL_OFFSET;
|
||||
unsigned int val;
|
||||
|
|
|
@ -16,7 +16,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
iomd_writeb(0, IOMD_ROMCR0);
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
extern void (*s3c24xx_reset_hook)(void);
|
||||
|
||||
static void
|
||||
arch_reset(char mode)
|
||||
arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
struct clk *wdtclk;
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ static void arch_idle(void)
|
|||
/* nothing here yet */
|
||||
}
|
||||
|
||||
static void arch_reset(char mode)
|
||||
static void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
/* nothing here yet */
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
if (mode == 's') {
|
||||
/* Jump into ROM at address 0 */
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#define ROMCARD_SIZE 0x08000000
|
||||
#define ROMCARD_START 0x10000000
|
||||
|
||||
void arch_reset(char mode)
|
||||
void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
short temp;
|
||||
local_irq_disable();
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#define __ASM_ARCH_SYSTEM_H
|
||||
|
||||
/* Found in arch/mach-shark/core.c */
|
||||
extern void arch_reset(char mode);
|
||||
extern void arch_reset(char mode, const char *cmd);
|
||||
|
||||
static inline void arch_idle(void)
|
||||
{
|
||||
|
|
|
@ -34,7 +34,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ static void arch_idle(void)
|
|||
{
|
||||
}
|
||||
|
||||
static void arch_reset(char mode)
|
||||
static void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
cpu_reset(0);
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ static inline void arch_idle(void)
|
|||
cpu_do_idle();
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
cpu_reset(0);
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ static inline void omap1_arch_reset(char mode)
|
|||
omap_writew(1, ARM_RSTCT1);
|
||||
}
|
||||
|
||||
static inline void arch_reset(char mode)
|
||||
static inline void arch_reset(char mode, const char *cmd)
|
||||
{
|
||||
if (!cpu_class_is_omap2())
|
||||
omap1_arch_reset(mode);
|
||||
|
|
|
@ -182,7 +182,7 @@ static unsigned long s3c24xx_read_idcode_v4(void)
|
|||
* with the caches enabled. It seems at least the S3C2440 has a problem
|
||||
* resetting if there is bus activity interrupted by the reset.
|
||||
*/
|
||||
static void s3c24xx_pm_restart(char mode)
|
||||
static void s3c24xx_pm_restart(char mode, const char *cmd)
|
||||
{
|
||||
if (mode != 's') {
|
||||
unsigned long flags;
|
||||
|
@ -191,12 +191,12 @@ static void s3c24xx_pm_restart(char mode)
|
|||
__cpuc_flush_kern_all();
|
||||
__cpuc_flush_user_all();
|
||||
|
||||
arch_reset(mode);
|
||||
arch_reset(mode, cmd);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/* fallback, or unhandled */
|
||||
arm_machine_restart(mode);
|
||||
arm_machine_restart(mode, cmd);
|
||||
}
|
||||
|
||||
void __init s3c24xx_init_io(struct map_desc *mach_desc, int size)
|
||||
|
|
Loading…
Reference in a new issue