Skip to content

Commit

Permalink
ppc64: Simplify secondary CPU startup on powermacs
Browse files Browse the repository at this point in the history
... for consistency with ppc32, and because this way is neater.

Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Paul Mackerras committed Oct 22, 2005
1 parent 529294d commit ef1a128
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 31 deletions.
25 changes: 11 additions & 14 deletions arch/ppc64/kernel/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
21 changes: 4 additions & 17 deletions arch/ppc64/kernel/pmac_smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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
Expand All @@ -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 */
Expand Down

0 comments on commit ef1a128

Please sign in to comment.