Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef1a1281 authored by Paul Mackerras's avatar Paul Mackerras
Browse files

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
Loading
Loading
Loading
Loading
+11 −14
Original line number Original line Diff line number Diff line
@@ -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:
	/* NB the entries for cpus 0, 1, 2 must each occupy 8 bytes. */
	li	r24,0
	b	1f
	li	r24,1
	li	r24,1
	b	.pmac_secondary_start
	b	1f
	
	.globl pmac_secondary_start_2
pmac_secondary_start_2:	
	li	r24,2
	li	r24,2
	b	.pmac_secondary_start
	b	1f
	
	.globl pmac_secondary_start_3
pmac_secondary_start_3:
	li	r24,3
	li	r24,3
	b	.pmac_secondary_start
1:
	
	
_GLOBAL(pmac_secondary_start)
_GLOBAL(pmac_secondary_start)
	/* turn on 64-bit mode */
	/* turn on 64-bit mode */
+4 −17
Original line number Original line Diff line number Diff line
@@ -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)


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)
	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 */