Thumb-2: Pass a Thumb-2 address to the secondary CPUs to jump to
authorCatalin Marinas <catalin.marinas@arm.com>
Fri, 24 Jul 2009 11:33:00 +0000 (12:33 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 24 Jul 2009 11:33:00 +0000 (12:33 +0100)
This patch sets bit 0 in the startup address passed to the secondary
CPUs so that they branch into Thumb-2 mode.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm/mach-realview/platsmp.c

index ac0e83f..a88458b 100644 (file)
@@ -20,6 +20,7 @@
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
 #include <asm/localtimer.h>
+#include <asm/unified.h>
 
 #include <mach/board-eb.h>
 #include <mach/board-pb11mp.h>
@@ -137,26 +138,19 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
 
 static void __init poke_milo(void)
 {
-       extern void secondary_startup(void);
-
        /* nobody is to be released from the pen yet */
        pen_release = -1;
 
        /*
-        * write the address of secondary startup into the system-wide
-        * flags register, then clear the bottom two bits, which is what
-        * BootMonitor is waiting for
+        * Write the address of secondary startup into the system-wide flags
+        * register. The BootMonitor waits for this register to become
+        * non-zero.
         */
-#if 1
 #define REALVIEW_SYS_FLAGSS_OFFSET 0x30
-       __raw_writel(virt_to_phys(realview_secondary_startup),
-                    __io_address(REALVIEW_SYS_BASE) +
-                    REALVIEW_SYS_FLAGSS_OFFSET);
 #define REALVIEW_SYS_FLAGSC_OFFSET 0x34
-       __raw_writel(3,
+       __raw_writel(BSYM(virt_to_phys(realview_secondary_startup)),
                     __io_address(REALVIEW_SYS_BASE) +
-                    REALVIEW_SYS_FLAGSC_OFFSET);
-#endif
+                    REALVIEW_SYS_FLAGSS_OFFSET);
 
        mb();
 }