powerpc/85xx: don't init the mpic ipi for the SoC which has doorbell support
authorKevin Hao <haokexin@gmail.com>
Thu, 7 Nov 2013 07:17:17 +0000 (15:17 +0800)
committerScott Wood <scottwood@freescale.com>
Wed, 8 Jan 2014 01:06:03 +0000 (19:06 -0600)
It makes no sense to initialize the mpic ipi for the SoC which has
doorbell support. So set the smp_85xx_ops.probe to NULL for this
case. Since the smp_85xx_ops.probe is also used in function
smp_85xx_setup_cpu() to check if we need to invoke
mpic_setup_this_cpu(), we introduce a new setup_cpu function
smp_85xx_basic_setup() to remove this dependency.

Signed-off-by: Kevin Hao <haokexin@gmail.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
arch/powerpc/platforms/85xx/smp.c

index 393f975..6382098 100644 (file)
@@ -389,15 +389,18 @@ static void mpc85xx_smp_machine_kexec(struct kimage *image)
 }
 #endif /* CONFIG_KEXEC */
 
-static void smp_85xx_setup_cpu(int cpu_nr)
+static void smp_85xx_basic_setup(int cpu_nr)
 {
-       if (smp_85xx_ops.probe == smp_mpic_probe)
-               mpic_setup_this_cpu();
-
        if (cpu_has_feature(CPU_FTR_DBELL))
                doorbell_setup_this_cpu();
 }
 
+static void smp_85xx_setup_cpu(int cpu_nr)
+{
+       mpic_setup_this_cpu();
+       smp_85xx_basic_setup(cpu_nr);
+}
+
 static const struct of_device_id mpc85xx_smp_guts_ids[] = {
        { .compatible = "fsl,mpc8572-guts", },
        { .compatible = "fsl,p1020-guts", },
@@ -412,13 +415,14 @@ void __init mpc85xx_smp_init(void)
 {
        struct device_node *np;
 
-       smp_85xx_ops.setup_cpu = smp_85xx_setup_cpu;
 
        np = of_find_node_by_type(NULL, "open-pic");
        if (np) {
                smp_85xx_ops.probe = smp_mpic_probe;
+               smp_85xx_ops.setup_cpu = smp_85xx_setup_cpu;
                smp_85xx_ops.message_pass = smp_mpic_message_pass;
-       }
+       } else
+               smp_85xx_ops.setup_cpu = smp_85xx_basic_setup;
 
        if (cpu_has_feature(CPU_FTR_DBELL)) {
                /*
@@ -427,6 +431,7 @@ void __init mpc85xx_smp_init(void)
                 */
                smp_85xx_ops.message_pass = NULL;
                smp_85xx_ops.cause_ipi = doorbell_cause_ipi;
+               smp_85xx_ops.probe = NULL;
        }
 
        np = of_find_matching_node(NULL, mpc85xx_smp_guts_ids);