arm smp support patch

Scott Valentine svalentine at concentris-systems.com
Tue Nov 9 18:33:20 EST 2010


On arm multi-core platforms that have a gic, the secondary cores fail to
wake if they are booted in WFI mode, as the gic_dist_init disables all
interrupts including IPI. I've included a simple patch to the
gic_dist_init function that enables interrupts 0-15 on SMP enabled
systems. This patch was made against linux-2.6-HEAD-151f52f.


diff -uNr a/arch/arm/common/gic.c b/arch/arm/common/gic.c
--- a/arch/arm/common/gic.c     2010-11-05 15:57:04.000000000 -1000
+++ b/arch/arm/common/gic.c     2010-11-09 13:08:33.000000000 -1000
@@ -262,6 +262,13 @@
        for (i = 0; i < max_irq; i += 32)
                writel(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 /
32);

+#ifdef CONFIG_SMP
+       /*
+        * Enable IPI interrupts on SMP systems so we can wake secondary
cores
+        */
+       writel(0x0000ffff, base + GIC_DIST_ENABLE_SET);
+#endif
+
        /*
         * Setup the Linux IRQ subsystem.
         */





NOTES:

After browsing through the Kconfigs, I am confident that this will only
affect the following platforms (which have ARM_GIC and SMP):
MACH_REALVIEW, ARCH_OMAP4, ARCH_S5PV310, ARCH_VEXPRESS_CA9X4, ARCH_U8500,
and ARCH_TEGRA_2x_SOC. The TEGRA_2x appears to use a diffent smp-boot
mechanism, however. The patch was tested successfully on MACH_CNS3XXX
using the bsp for the gateworks laguna platform
(http://svn.gateworks.com/bsp/laguna/trunk/openwrt_patches).


Scott Valentine

Concentris Systems LLC
Manoa Innovation Center, Suite #238
2800 Woodlawn Drive
Honolulu, HI  96822

http://www.Concentris-Systems.com

(808) 988-6100




More information about the linux-arm-kernel mailing list