[PATCH] powerpc/85xx: Setup secondary cores PIR with hard SMP id
Bhushan Bharat-R65777
R65777 at freescale.com
Thu Oct 20 14:53:57 EST 2011
> -----Original Message-----
> From: linuxppc-dev-bounces+bharat.bhushan=freescale.com at lists.ozlabs.org
> [mailto:linuxppc-dev-
> bounces+bharat.bhushan=freescale.com at lists.ozlabs.org] On Behalf Of Kumar
> Gala
> Sent: Friday, October 14, 2011 1:23 PM
> To: linuxppc-dev at ozlabs.org
> Subject: [PATCH] powerpc/85xx: Setup secondary cores PIR with hard SMP id
>
> 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
>
> Move to setting up PIR with hard_smp_processor_id fixes the issue.
>
> Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
> ---
> arch/powerpc/platforms/85xx/smp.c | 9 +++++----
> 1 files changed, 5 insertions(+), 4 deletions(-)
>
> 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 = 0;
> + int n = 0, hw_cpu = get_hard_smp_processor_id(nr);
> int ioremappable;
>
> - WARN_ON (nr < 0 || nr >= NR_CPUS);
> + WARN_ON(nr < 0 || nr >= NR_CPUS);
> + WARN_ON(hw_cpu < 0 || hw_cpu >= NR_CPUS);
>
> pr_debug("smp_85xx_kick_cpu: kick CPU #%d\n", nr);
>
> @@ -79,7 +80,7 @@ smp_85xx_kick_cpu(int nr)
>
> local_irq_save(flags);
>
> - 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));
>
> @@ -88,7 +89,7 @@ smp_85xx_kick_cpu(int nr)
> (ulong)(bptr_vaddr + SIZE_BOOT_ENTRY));
>
> /* Wait a bit for the CPU to ack. */
> - while ((__secondary_hold_acknowledge != nr) && (++n < 1000))
> + while ((__secondary_hold_acknowledge != hw_cpu) && (++n < 1000))
> mdelay(1);
> #else
> smp_generic_kick_cpu(nr);
> --
> 1.7.3.4
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
More information about the Linuxppc-dev
mailing list