ppc64: Simplify secondary CPU startup on powermacs
authorPaul Mackerras <paulus@samba.org>
Sat, 22 Oct 2005 05:55:58 +0000 (15:55 +1000)
committerPaul Mackerras <paulus@samba.org>
Sat, 22 Oct 2005 05:55:58 +0000 (15:55 +1000)
... for consistency with ppc32, and because this way is neater.

Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/ppc64/kernel/head.S
arch/ppc64/kernel/pmac_smp.c

index 15c5f0c48043ec4e801692786faa229952916d68..f58af9c246cb0f46cae02759bf7e3819b9304eaa 100644 (file)
@@ -1556,20 +1556,17 @@ copy_to_here:
        .section ".text";
        .align 2 ;
 
-       .globl  pmac_secondary_start_1  
-pmac_secondary_start_1:        
-       li      r24, 1
-       b       .pmac_secondary_start
-       
-       .globl pmac_secondary_start_2
-pmac_secondary_start_2:        
-       li      r24, 2
-       b       .pmac_secondary_start
-       
-       .globl pmac_secondary_start_3
-pmac_secondary_start_3:
-       li      r24, 3
-       b       .pmac_secondary_start
+       .globl  __secondary_start_pmac_0
+__secondary_start_pmac_0:
+       /* NB the entries for cpus 0, 1, 2 must each occupy 8 bytes. */
+       li      r24,0
+       b       1f
+       li      r24,1
+       b       1f
+       li      r24,2
+       b       1f
+       li      r24,3
+1:
        
 _GLOBAL(pmac_secondary_start)
        /* turn on 64-bit mode */
index 3a1683f5b07ffb80c1563b1a39d2fe3e9f6b2216..83c2f8dc1ec6b16267b818ca677cd1ecffe386a2 100644 (file)
@@ -59,9 +59,7 @@
 #define DBG(fmt...)
 #endif
 
-extern void pmac_secondary_start_1(void);
-extern void pmac_secondary_start_2(void);
-extern void pmac_secondary_start_3(void);
+extern void __secondary_start_pmac_0(void);
 
 extern struct smp_ops_t *smp_ops;
 
@@ -236,7 +234,7 @@ static int __init smp_core99_probe(void)
 
 static void __init smp_core99_kick_cpu(int nr)
 {
-       int save_vector, j;
+       unsigned int save_vector, j;
        unsigned long new_vector;
        unsigned long flags;
        volatile unsigned int *vector
@@ -253,20 +251,9 @@ static void __init smp_core99_kick_cpu(int nr)
        save_vector = *vector;
 
        /* Setup fake reset vector that does    
-        *   b .pmac_secondary_start - KERNELBASE
+        *   b __secondary_start_pmac_0 + nr*8 - KERNELBASE
         */
-       switch(nr) {
-       case 1:
-               new_vector = (unsigned long)pmac_secondary_start_1;
-               break;
-       case 2:
-               new_vector = (unsigned long)pmac_secondary_start_2;
-               break;                  
-       case 3:
-       default:
-               new_vector = (unsigned long)pmac_secondary_start_3;
-               break;
-       }
+       new_vector = (unsigned long) __secondary_start_pmac_0 + nr * 8;
        *vector = 0x48000002 + (new_vector - KERNELBASE);
 
        /* flush data cache and inval instruction cache */