@@ -28,6 +28,7 @@
#include <linux/hardirq.h>
#endif
#include <linux/kbuild.h>
+#include <linux/of_fdt.h>
#include <asm/io.h>
#include <asm/page.h>
@@ -619,5 +620,8 @@ int main(void)
DEFINE(PACA_OPAL_MC_EVT, offsetof(struct paca_struct, opal_mc_evt));
#endif
+ DEFINE(DT_BOOTCPU, offsetof(struct boot_param_header,
+ boot_cpuid_phys));
+
return 0;
}
@@ -87,6 +87,7 @@ _ENTRY(_start);
li r25,0 /* phys kernel start (low) */
li r24,0 /* CPU number */
li r23,0 /* phys kernel start (high) */
+ lwz r22,DT_BOOTCPU(r3) /* boot_cpuid_phys */
/* We try to not make any assumptions about how the boot loader
* setup or used the TLBs. We invalidate all mappings from the
@@ -166,11 +167,8 @@ _ENTRY(__early_start)
/* Check to see if we're the second processor, and jump
* to the secondary_start code if so
*/
- lis r24, boot_cpuid@h
- ori r24, r24, boot_cpuid@l
- lwz r24, 0(r24)
- cmpwi r24, -1
mfspr r24,SPRN_PIR
+ cmpw r22,r24
bne __secondary_start
#endif
@@ -192,9 +190,6 @@ _ENTRY(__early_start)
li r0,0
stwu r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1)
- rlwinm r22,r1,0,0,31-THREAD_SHIFT /* current thread_info */
- stw r24, TI_CPU(r22)
-
bl early_init
#ifdef CONFIG_RELOCATABLE
Currently, we assume the first CPU to come up is the boot cpu. Instead we can use the boot_cpu_phys from the device tree. Signed-off-by: Matthew McClintock <msm@freescale.com> --- arch/powerpc/kernel/asm-offsets.c | 4 ++++ arch/powerpc/kernel/head_fsl_booke.S | 9 ++------- 2 files changed, 6 insertions(+), 7 deletions(-)