Browse Source

[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>
Russell King 16 years ago
parent
commit
be093beb60
50 changed files with 65 additions and 65 deletions
  1. 2 2
      arch/arm/include/asm/system.h
  2. 5 5
      arch/arm/kernel/process.c
  3. 1 1
      arch/arm/mach-aaec2000/include/mach/system.h
  4. 1 1
      arch/arm/mach-at91/include/mach/system.h
  5. 1 1
      arch/arm/mach-clps711x/include/mach/system.h
  6. 1 1
      arch/arm/mach-davinci/include/mach/system.h
  7. 1 1
      arch/arm/mach-ebsa110/include/mach/system.h
  8. 1 1
      arch/arm/mach-ep93xx/include/mach/system.h
  9. 1 1
      arch/arm/mach-footbridge/include/mach/system.h
  10. 1 1
      arch/arm/mach-h720x/include/mach/system.h
  11. 1 1
      arch/arm/mach-imx/include/mach/system.h
  12. 1 1
      arch/arm/mach-integrator/include/mach/system.h
  13. 1 1
      arch/arm/mach-iop13xx/include/mach/system.h
  14. 1 1
      arch/arm/mach-iop32x/include/mach/system.h
  15. 1 1
      arch/arm/mach-iop33x/include/mach/system.h
  16. 1 1
      arch/arm/mach-ixp2000/include/mach/system.h
  17. 1 1
      arch/arm/mach-ixp23xx/include/mach/system.h
  18. 1 1
      arch/arm/mach-ixp4xx/include/mach/system.h
  19. 1 1
      arch/arm/mach-kirkwood/include/mach/system.h
  20. 1 1
      arch/arm/mach-ks8695/include/mach/system.h
  21. 1 1
      arch/arm/mach-l7200/include/mach/system.h
  22. 1 1
      arch/arm/mach-lh7a40x/include/mach/system.h
  23. 1 1
      arch/arm/mach-loki/include/mach/system.h
  24. 1 1
      arch/arm/mach-msm/include/mach/system.h
  25. 1 1
      arch/arm/mach-mv78xx0/include/mach/system.h
  26. 1 1
      arch/arm/mach-mx2/system.c
  27. 1 1
      arch/arm/mach-netx/include/mach/system.h
  28. 1 1
      arch/arm/mach-ns9xxx/include/mach/system.h
  29. 1 1
      arch/arm/mach-orion5x/include/mach/system.h
  30. 1 1
      arch/arm/mach-orion5x/lsmini-setup.c
  31. 1 1
      arch/arm/mach-pnx4008/include/mach/system.h
  32. 3 3
      arch/arm/mach-pxa/corgi.c
  33. 1 1
      arch/arm/mach-pxa/include/mach/system.h
  34. 3 3
      arch/arm/mach-pxa/mioa701.c
  35. 3 3
      arch/arm/mach-pxa/poodle.c
  36. 1 1
      arch/arm/mach-pxa/reset.c
  37. 2 2
      arch/arm/mach-pxa/spitz.c
  38. 2 2
      arch/arm/mach-pxa/tosa.c
  39. 1 1
      arch/arm/mach-realview/include/mach/system.h
  40. 1 1
      arch/arm/mach-rpc/include/mach/system.h
  41. 1 1
      arch/arm/mach-s3c2410/include/mach/system-reset.h
  42. 1 1
      arch/arm/mach-s3c6400/include/mach/system.h
  43. 1 1
      arch/arm/mach-sa1100/include/mach/system.h
  44. 1 1
      arch/arm/mach-shark/core.c
  45. 1 1
      arch/arm/mach-shark/include/mach/system.h
  46. 1 1
      arch/arm/mach-versatile/include/mach/system.h
  47. 1 1
      arch/arm/mach-w90x900/include/mach/system.h
  48. 1 1
      arch/arm/plat-mxc/include/mach/system.h
  49. 1 1
      arch/arm/plat-omap/include/mach/system.h
  50. 3 3
      arch/arm/plat-s3c24xx/cpu.c

+ 2 - 2
arch/arm/include/asm/system.h

@@ -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)

+ 5 - 5
arch/arm/kernel/process.c

@@ -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)

+ 1 - 1
arch/arm/mach-aaec2000/include/mach/system.h

@@ -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);
 }

+ 1 - 1
arch/arm/mach-at91/include/mach/system.h

@@ -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)

+ 1 - 1
arch/arm/mach-clps711x/include/mach/system.h

@@ -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);
 }

+ 1 - 1
arch/arm/mach-davinci/include/mach/system.h

@@ -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();
 }

+ 1 - 1
arch/arm/mach-ebsa110/include/mach/system.h

@@ -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

+ 1 - 1
arch/arm/mach-ep93xx/include/mach/system.h

@@ -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;
 

+ 1 - 1
arch/arm/mach-footbridge/include/mach/system.h

@@ -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') {
 		/*

+ 1 - 1
arch/arm/mach-h720x/include/mach/system.h

@@ -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;
 }

+ 1 - 1
arch/arm/mach-imx/include/mach/system.h

@@ -32,7 +32,7 @@ arch_idle(void)
 }
 
 static inline void
-arch_reset(char mode)
+arch_reset(char mode, const char *cmd)
 {
 	cpu_reset(0);
 }

+ 1 - 1
arch/arm/mach-integrator/include/mach/system.h

@@ -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

+ 1 - 1
arch/arm/mach-iop13xx/include/mach/system.h

@@ -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)

+ 1 - 1
arch/arm/mach-iop32x/include/mach/system.h

@@ -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();
 

+ 1 - 1
arch/arm/mach-iop33x/include/mach/system.h

@@ -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;
 

+ 1 - 1
arch/arm/mach-ixp2000/include/mach/system.h

@@ -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();
 

+ 1 - 1
arch/arm/mach-ixp23xx/include/mach/system.h

@@ -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()) {

+ 1 - 1
arch/arm/mach-ixp4xx/include/mach/system.h

@@ -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 */

+ 1 - 1
arch/arm/mach-kirkwood/include/mach/system.h

@@ -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.

+ 1 - 1
arch/arm/mach-ks8695/include/mach/system.h

@@ -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;
 

+ 1 - 1
arch/arm/mach-l7200/include/mach/system.h

@@ -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);

+ 1 - 1
arch/arm/mach-lh7a40x/include/mach/system.h

@@ -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);
 }

+ 1 - 1
arch/arm/mach-loki/include/mach/system.h

@@ -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.

+ 1 - 1
arch/arm/mach-msm/include/mach/system.h

@@ -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 */
 }

+ 1 - 1
arch/arm/mach-mv78xx0/include/mach/system.h

@@ -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.

+ 1 - 1
arch/arm/mach-mx2/system.c

@@ -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;
 

+ 1 - 1
arch/arm/mach-netx/include/mach/system.h

@@ -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);

+ 1 - 1
arch/arm/mach-ns9xxx/include/mach/system.h

@@ -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())

+ 1 - 1
arch/arm/mach-orion5x/include/mach/system.h

@@ -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

+ 1 - 1
arch/arm/mach-orion5x/lsmini-setup.c

@@ -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);
 }
 
 

+ 1 - 1
arch/arm/mach-pnx4008/include/mach/system.h

@@ -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);
 }

+ 3 - 3
arch/arm/mach-pxa/corgi.c

@@ -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)

+ 1 - 1
arch/arm/mach-pxa/include/mach/system.h

@@ -20,4 +20,4 @@ static inline void arch_idle(void)
 }
 
 
-void arch_reset(char mode);
+void arch_reset(char mode, const char *cmd);

+ 3 - 3
arch/arm/mach-pxa/mioa701.c

@@ -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[] = {

+ 3 - 3
arch/arm/mach-pxa/poodle.c

@@ -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)

+ 1 - 1
arch/arm/mach-pxa/reset.c

@@ -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);
 

+ 2 - 2
arch/arm/mach-pxa/spitz.c

@@ -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)

+ 2 - 2
arch/arm/mach-pxa/tosa.c

@@ -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)

+ 1 - 1
arch/arm/mach-realview/include/mach/system.h

@@ -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;

+ 1 - 1
arch/arm/mach-rpc/include/mach/system.h

@@ -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);
 

+ 1 - 1
arch/arm/mach-s3c2410/include/mach/system-reset.h

@@ -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;
 

+ 1 - 1
arch/arm/mach-s3c6400/include/mach/system.h

@@ -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 */
 }

+ 1 - 1
arch/arm/mach-sa1100/include/mach/system.h

@@ -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 */

+ 1 - 1
arch/arm/mach-shark/core.c

@@ -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();

+ 1 - 1
arch/arm/mach-shark/include/mach/system.h

@@ -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)
 {

+ 1 - 1
arch/arm/mach-versatile/include/mach/system.h

@@ -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;
 

+ 1 - 1
arch/arm/mach-w90x900/include/mach/system.h

@@ -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);
 }

+ 1 - 1
arch/arm/plat-mxc/include/mach/system.h

@@ -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);
 }

+ 1 - 1
arch/arm/plat-omap/include/mach/system.h

@@ -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);

+ 3 - 3
arch/arm/plat-s3c24xx/cpu.c

@@ -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)