Thread (5 messages) 5 messages, 2 authors, 2011-11-03

RE: [PATCH] powerpc/85xx: Setup secondary cores PIR with hard SMP id

From: Bhushan Bharat-R65777 <hidden>
Date: 2011-10-20 03:54:38

-----Original Message-----
From: linuxppc-dev-bounces+bharat.bhushan=3Dfreescale.com@lists.ozlabs.or=
g
[mailto:linuxppc-dev-
bounces+bharat.bhushan=3Dfreescale.com@lists.ozlabs.org] On Behalf Of Kum=
ar
Gala
Sent: Friday, October 14, 2011 1:23 PM
To: linuxppc-dev@ozlabs.org
Subject: [PATCH] powerpc/85xx: Setup secondary cores PIR with hard SMP id
=20
Normally logical and hard cpu ID are the same, however in same cases like
on the P3060 they may differ.  Where the logical is 0..5, the hard id
goes 0,1,4..7.  This can causes issues for places we utilize PIR to index
into array like in debug exception handlers for finding the exception
stack.
Kumar, What should be the CONFIG_NR_CPUS for this? 8 or 6 ?

Thanks
-Bharat
quoted hunk ↗ jump to hunk
=20
Move to setting up PIR with hard_smp_processor_id fixes the issue.
=20
Signed-off-by: Kumar Gala <redacted>
---
 arch/powerpc/platforms/85xx/smp.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)
=20
diff --git a/arch/powerpc/platforms/85xx/smp.c
b/arch/powerpc/platforms/85xx/smp.c
index d6e4746..190d111 100644
--- a/arch/powerpc/platforms/85xx/smp.c
+++ b/arch/powerpc/platforms/85xx/smp.c
@@ -48,10 +48,11 @@ smp_85xx_kick_cpu(int nr)
 	const u64 *cpu_rel_addr;
 	__iomem u32 *bptr_vaddr;
 	struct device_node *np;
-	int n =3D 0;
+	int n =3D 0, hw_cpu =3D get_hard_smp_processor_id(nr);
 	int ioremappable;
=20
-	WARN_ON (nr < 0 || nr >=3D NR_CPUS);
+	WARN_ON(nr < 0 || nr >=3D NR_CPUS);
+	WARN_ON(hw_cpu < 0 || hw_cpu >=3D NR_CPUS);
=20
 	pr_debug("smp_85xx_kick_cpu: kick CPU #%d\n", nr);
=20
@@ -79,7 +80,7 @@ smp_85xx_kick_cpu(int nr)
=20
 	local_irq_save(flags);
=20
-	out_be32(bptr_vaddr + BOOT_ENTRY_PIR, nr);
+	out_be32(bptr_vaddr + BOOT_ENTRY_PIR, hw_cpu);
 #ifdef CONFIG_PPC32
 	out_be32(bptr_vaddr + BOOT_ENTRY_ADDR_LOWER, __pa(__early_start));
=20
@@ -88,7 +89,7 @@ smp_85xx_kick_cpu(int nr)
 				(ulong)(bptr_vaddr + SIZE_BOOT_ENTRY));
=20
 	/* Wait a bit for the CPU to ack. */
-	while ((__secondary_hold_acknowledge !=3D nr) && (++n < 1000))
+	while ((__secondary_hold_acknowledge !=3D hw_cpu) && (++n < 1000))
 		mdelay(1);
 #else
 	smp_generic_kick_cpu(nr);
--
1.7.3.4
=20
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help