From: Charlie Paul <cpaul.windri...@gmail.com>

Updated the code to support SMP being turned off.
When SMP was turned off the PM hotplug code would
not compile

Signed-off-by: Charlie Paul <cpaul.windri...@gmail.com>
---
 arch/arm/mach-axxia/Makefile    |    4 ++--
 arch/arm/mach-axxia/axxia-gic.c |   40 +++++++++++++++++++++++++++++++++++++--
 2 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-axxia/Makefile b/arch/arm/mach-axxia/Makefile
index 0cceb04..73392a4 100644
--- a/arch/arm/mach-axxia/Makefile
+++ b/arch/arm/mach-axxia/Makefile
@@ -5,12 +5,12 @@ obj-y                                 += axxia.o
 obj-y                                  += clock.o
 obj-y                                  += io.o
 obj-y                                  += ssp-gpio.o
-# obj-y                                        += ncr.o
+#obj-y                                 += ncr.o
 obj-y                                  += timers.o
 obj-y                                  += pci.o
 obj-y                                  += ddr_retention.o ddr_shutdown.o
 obj-$(CONFIG_SMP)                      += platsmp.o headsmp.o
 obj-$(CONFIG_ARCH_AXXIA_GIC)           += axxia-gic.o
-obj-$(CONFIG_HOTPLUG_CPU)              += hotplug.o lsi_power_management.o 
axxia_circular_queue.o
+obj-$(CONFIG_HOTPLUG_CPU)              += hotplug.o lsi_power_management.o
 obj-$(CONFIG_AXXIA_RIO)                 += rapidio.o
 obj-$(CONFIG_HW_PERF_EVENTS)            += perf_event_platform.o smon.o
diff --git a/arch/arm/mach-axxia/axxia-gic.c b/arch/arm/mach-axxia/axxia-gic.c
index 6b3a759..846edb8 100644
--- a/arch/arm/mach-axxia/axxia-gic.c
+++ b/arch/arm/mach-axxia/axxia-gic.c
@@ -105,6 +105,7 @@ static void muxed_ipi_message_pass(const struct cpumask 
*mask,
        }
 }
 
+#ifdef CONFIG_SMP
 static void axxia_ipi_demux(struct pt_regs *regs)
 {
        struct axxia_mux_msg *info = &__get_cpu_var(ipi_mux_msg);
@@ -126,6 +127,7 @@ static void axxia_ipi_demux(struct pt_regs *regs)
                        handle_IPI(0, regs); /* 0 = ARM IPI_WAKEUP */
        } while (info->msg);
 }
+#endif
 
 union gic_base {
        void __iomem *common_base;
@@ -754,6 +756,7 @@ static int gic_set_wake(struct irq_data *d, unsigned int on)
 #define gic_set_wake   NULL
 #endif
 
+#ifdef CONFIG_HOTPLUG_CPU
 static u32 get_cluster_id(void)
 {
        u32 mpidr, cluster;
@@ -770,6 +773,7 @@ static u32 get_cluster_id(void)
 
        return cluster;
 }
+#endif
 
 #ifdef CONFIG_CPU_PM
 
@@ -1113,6 +1117,7 @@ asmlinkage void __exception_irq_entry 
axxia_gic_handle_irq(struct pt_regs *regs)
                         * updated as well.
                         */
                        switch (irqnr) {
+#ifdef CONFIG_SMP
                        case IPI0_CPU0:
                        case IPI0_CPU1:
                        case IPI0_CPU2:
@@ -1144,6 +1149,7 @@ asmlinkage void __exception_irq_entry 
axxia_gic_handle_irq(struct pt_regs *regs)
                                /* Not currently used */
                                writel_relaxed(irqnr, cpu_base + GIC_CPU_EOI);
                                break;
+#endif
 
                        case IRQ_PMU:
                                /*
@@ -1175,7 +1181,9 @@ asmlinkage void __exception_irq_entry 
axxia_gic_handle_irq(struct pt_regs *regs)
                }
                if (irqnr < 16) {
                        writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
+#ifdef CONFIG_SMP
                        handle_IPI(irqnr, regs);
+#endif
                        continue;
                }
                break;
@@ -1227,13 +1235,17 @@ static void  gic_dist_init(struct gic_chip_data *gic)
        u32 enablemask;
        u32 enableoff;
        u32 val;
+#ifdef CONFIG_HOTPLUG_CPU
        u32 this_cluster = get_cluster_id();
-       u32 powered_on;
+       u32 powered_on = 0;
        u32 ccpu;
+#endif
 
        /* Initialize the distributor interface once per CPU cluster */
+#ifdef CONFIG_HOTPLUG_CPU
        if ((test_and_set_bit(get_cluster_id(), &gic->dist_init_done)) && 
(!cluster_power_up[this_cluster]))
                return;
+#endif
 
        writel_relaxed(0, base + GIC_DIST_CTRL);
 
@@ -1283,14 +1295,22 @@ static void  gic_dist_init(struct gic_chip_data *gic)
        /*
         * Set Axxia IPI interrupts for all CPUs in this cluster.
         */
+#ifdef CONFIG_HOTPLUG_CPU
        powered_on = (~pm_cpu_powered_down) & 0xFFFF;
+#endif
+
        for (i = IPI0_CPU0; i < MAX_AXM_IPI_NUM; i++) {
                cpumask_8 = 1 << ((i - IPI0_CPU0) % 4);
+#ifdef CONFIG_HOTPLUG_CPU
                ccpu = (this_cluster * 4) + ((i - IPI0_CPU0) % 
CORES_PER_CLUSTER);
                if ((1 << ccpu) & powered_on)
                        writeb_relaxed(cpumask_8, base + GIC_DIST_TARGET + i);
                else
                        writeb_relaxed(0x00, base + GIC_DIST_TARGET + i);
+#else
+               writeb_relaxed(cpumask_8, base + GIC_DIST_TARGET + i);
+#endif
+
        }
 
        /*################################# ENABLE IRQS 
####################################*/
@@ -1300,13 +1320,20 @@ static void  gic_dist_init(struct gic_chip_data *gic)
         * no need to read and OR in bits, just writing is OK.
         */
 
+#ifdef CONFIG_HOTPLUG_CPU
        powered_on = (~pm_cpu_powered_down) & 0xFFFF;
+#endif
+
        for (i = IPI0_CPU0; i < MAX_AXM_IPI_NUM; i++) {
                enablemask = 1 << (i % 32);
                enableoff = (i / 32) * 4;
+#ifdef CONFIG_HOTPLUG_CPU
                ccpu = (this_cluster * 4) + ((i - IPI0_CPU0) % 
CORES_PER_CLUSTER);
                if ((1 << ccpu) & powered_on)
                        writel_relaxed(enablemask, base + GIC_DIST_ENABLE_SET + 
enableoff);
+#else
+               writel_relaxed(enablemask, base + GIC_DIST_ENABLE_SET + 
enableoff);
+#endif
        }
 
        /*
@@ -1323,6 +1350,7 @@ static void  gic_dist_init(struct gic_chip_data *gic)
 
 static void  gic_cpu_init(struct gic_chip_data *gic)
 {
+
        void __iomem *dist_base = gic_data_dist_base(gic);
        void __iomem *base = gic_data_cpu_base(gic);
        int i;
@@ -1340,7 +1368,9 @@ static void  gic_cpu_init(struct gic_chip_data *gic)
         */
        writel_relaxed(0xffffffff, dist_base + GIC_DIST_ENABLE_CLEAR);
 
+#ifdef CONFIG_HOTPLUG_CPU
        if (!cluster_power_up[cluster]) {
+#endif
                writel_relaxed(0, dist_base + GIC_DIST_CTRL);
                for (i = IPI0_CPU0; i < MAX_AXM_IPI_NUM; i++) {
                        cpumask_8 = 1 << ((i - IPI0_CPU0) % 4);
@@ -1353,11 +1383,14 @@ static void  gic_cpu_init(struct gic_chip_data *gic)
                        }
                }
                writel_relaxed(1, dist_base + GIC_DIST_CTRL);
+#ifdef CONFIG_HOTPLUG_CPU
        }
+#endif
 
        writel_relaxed(0xf0, base + GIC_CPU_PRIMASK);
 
        writel_relaxed(1, base + GIC_CPU_CTRL);
+
 }
 
 void axxia_gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
@@ -1547,8 +1580,9 @@ void __init axxia_gic_init_bases(int irq_start,
                                    hwirq_base, &gic_irq_domain_ops, gic);
        if (WARN_ON(!gic->domain))
                return;
-
+#ifdef CONFIG_SMP
        set_smp_cross_call(axxia_gic_raise_softirq);
+#endif
        set_handle_irq(axxia_gic_handle_irq);
 
        gic_axxia_init(gic);
@@ -1560,6 +1594,7 @@ void __init axxia_gic_init_bases(int irq_start,
 
 }
 
+#ifdef CONFIG_SMP
 void  axxia_gic_secondary_init(void)
 {
        struct gic_chip_data *gic = &gic_data;
@@ -1567,6 +1602,7 @@ void  axxia_gic_secondary_init(void)
        gic_dist_init(gic);
        gic_cpu_init(&gic_data);
 }
+#endif
 
 #ifdef CONFIG_OF
 
-- 
1.7.9.5

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to