]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
omap: pass the reboot command to the boot loader
authorAaro Koskinen <Aaro.Koskinen@nokia.com>
Fri, 26 Feb 2010 10:25:28 +0000 (10:25 +0000)
committerTony Lindgren <tony@atomide.com>
Thu, 11 Mar 2010 22:50:00 +0000 (14:50 -0800)
This patch follows the commit be093beb608edf821b45fe00a8a080fb5c6ed4af
by Russell King:

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

The patch adds the missing parameter to omap1_arch_reset() and
omap_prcm_arch_reset(), and modifies the latter to pass the reboot
command parameter to the boot loader instead of reboot mode (which is
for kernel internal use only and cannot be modified by the userspace).

Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/prcm.c
arch/arm/plat-omap/include/plat/prcm.h
arch/arm/plat-omap/include/plat/system.h

index 81872aacb80121422f9a874a7676600623af8bba..9537f6f2352db48ecbef577598b9e7b60dba202e 100644 (file)
@@ -133,7 +133,7 @@ u32 omap_prcm_get_reset_sources(void)
 EXPORT_SYMBOL(omap_prcm_get_reset_sources);
 
 /* Resets clock rates and reboots the system. Only called from system.h */
-void omap_prcm_arch_reset(char mode)
+void omap_prcm_arch_reset(char mode, const char *cmd)
 {
        s16 prcm_offs = 0;
 
@@ -145,7 +145,7 @@ void omap_prcm_arch_reset(char mode)
                u32 l;
 
                prcm_offs = OMAP3430_GR_MOD;
-               l = ('B' << 24) | ('M' << 16) | mode;
+               l = ('B' << 24) | ('M' << 16) | (cmd ? (u8)*cmd : 0);
                /* Reserve the first word in scratchpad for communicating
                 * with the boot ROM. A pointer to a data structure
                 * describing the boot process can be stored there,
index d6a0e27d5a7f4d27ed8a821a603d928670fdce7e..9fbd91419cd15b2849460eed590165e47b820c2a 100644 (file)
@@ -24,7 +24,7 @@
 #define __ASM_ARM_ARCH_OMAP_PRCM_H
 
 u32 omap_prcm_get_reset_sources(void);
-void omap_prcm_arch_reset(char mode);
+void omap_prcm_arch_reset(char mode, const char *cmd);
 int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest,
                         const char *name);
 
index c58a4ef42a4594cee264502035aba26f5103d9c4..d0a119f735b45d3db8e8a2aa7073f41d188a7a6c 100644 (file)
@@ -22,7 +22,7 @@ static inline void arch_idle(void)
        cpu_do_idle();
 }
 
-static inline void omap1_arch_reset(char mode)
+static inline void omap1_arch_reset(char mode, const char *cmd)
 {
        /*
         * Workaround for 5912/1611b bug mentioned in sprz209d.pdf p. 28
@@ -43,9 +43,9 @@ static inline void omap1_arch_reset(char mode)
 static inline void arch_reset(char mode, const char *cmd)
 {
        if (!cpu_class_is_omap2())
-               omap1_arch_reset(mode);
+               omap1_arch_reset(mode, cmd);
        else
-               omap_prcm_arch_reset(mode);
+               omap_prcm_arch_reset(mode, cmd);
 }
 
 #endif