Commit ef1a1281 authored by Paul Mackerras's avatar Paul Mackerras

ppc64: Simplify secondary CPU startup on powermacs

... for consistency with ppc32, and because this way is neater.
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 529294d5
...@@ -1556,20 +1556,17 @@ copy_to_here: ...@@ -1556,20 +1556,17 @@ copy_to_here:
.section ".text"; .section ".text";
.align 2 ; .align 2 ;
.globl pmac_secondary_start_1 .globl __secondary_start_pmac_0
pmac_secondary_start_1: __secondary_start_pmac_0:
li r24, 1 /* NB the entries for cpus 0, 1, 2 must each occupy 8 bytes. */
b .pmac_secondary_start li r24,0
b 1f
.globl pmac_secondary_start_2 li r24,1
pmac_secondary_start_2: b 1f
li r24, 2 li r24,2
b .pmac_secondary_start b 1f
li r24,3
.globl pmac_secondary_start_3 1:
pmac_secondary_start_3:
li r24, 3
b .pmac_secondary_start
_GLOBAL(pmac_secondary_start) _GLOBAL(pmac_secondary_start)
/* turn on 64-bit mode */ /* turn on 64-bit mode */
......
...@@ -59,9 +59,7 @@ ...@@ -59,9 +59,7 @@
#define DBG(fmt...) #define DBG(fmt...)
#endif #endif
extern void pmac_secondary_start_1(void); extern void __secondary_start_pmac_0(void);
extern void pmac_secondary_start_2(void);
extern void pmac_secondary_start_3(void);
extern struct smp_ops_t *smp_ops; extern struct smp_ops_t *smp_ops;
...@@ -236,7 +234,7 @@ static int __init smp_core99_probe(void) ...@@ -236,7 +234,7 @@ static int __init smp_core99_probe(void)
static void __init smp_core99_kick_cpu(int nr) static void __init smp_core99_kick_cpu(int nr)
{ {
int save_vector, j; unsigned int save_vector, j;
unsigned long new_vector; unsigned long new_vector;
unsigned long flags; unsigned long flags;
volatile unsigned int *vector volatile unsigned int *vector
...@@ -253,20 +251,9 @@ static void __init smp_core99_kick_cpu(int nr) ...@@ -253,20 +251,9 @@ static void __init smp_core99_kick_cpu(int nr)
save_vector = *vector; save_vector = *vector;
/* Setup fake reset vector that does /* Setup fake reset vector that does
* b .pmac_secondary_start - KERNELBASE * b __secondary_start_pmac_0 + nr*8 - KERNELBASE
*/ */
switch(nr) { new_vector = (unsigned long) __secondary_start_pmac_0 + nr * 8;
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;
}
*vector = 0x48000002 + (new_vector - KERNELBASE); *vector = 0x48000002 + (new_vector - KERNELBASE);
/* flush data cache and inval instruction cache */ /* flush data cache and inval instruction cache */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment