xen/arm: implement smp initialization callbacks for omap5
authorChen Baozi <baozich@gmail.com>
Tue, 15 Oct 2013 08:45:31 +0000 (16:45 +0800)
committerIan Campbell <ian.campbell@citrix.com>
Thu, 24 Oct 2013 13:03:30 +0000 (14:03 +0100)
Signed-off-by: Chen Baozi <baozich@gmail.com>
Acked-by: Julien Grall <julien.grall@linaro.org>
xen/arch/arm/platforms/omap5.c
xen/include/asm-arm/platforms/omap5.h

index a40d0169f0169b1bfacb2c6ab6dc069be4eb800d..bd9db74f033b058e0302571d89f875e1ba690f97 100644 (file)
@@ -121,6 +121,38 @@ static int omap5_specific_mapping(struct domain *d)
     return 0;
 }
 
+static int __init omap5_smp_init(void)
+{
+    void __iomem *wugen_base;
+
+    wugen_base = ioremap_nocache(OMAP5_WKUPGEN_BASE, PAGE_SIZE);
+    if ( !wugen_base )
+    {
+        dprintk(XENLOG_ERR, "Unable to map omap5 MMIO\n");
+        return -EFAULT;
+    }
+
+    printk("Set AuxCoreBoot1 to %"PRIpaddr" (%p)\n",
+           __pa(init_secondary), init_secondary);
+    writel(__pa(init_secondary), wugen_base + OMAP_AUX_CORE_BOOT_1_OFFSET);
+
+    printk("Set AuxCoreBoot0 to 0x20\n");
+    writel(0x20, wugen_base + OMAP_AUX_CORE_BOOT_0_OFFSET);
+
+    iounmap(wugen_base);
+
+    return 0;
+}
+
+static int __init omap5_cpu_up(int cpu)
+{
+    /* Nothing to do here, the generic sev() will suffice to kick CPUs
+     * out of either the firmware or our own smp_up_cpu gate,
+     * depending on where they have ended up. */
+
+    return 0;
+}
+
 static uint32_t omap5_quirks(void)
 {
     return PLATFORM_QUIRK_DOM0_MAPPING_11;
@@ -136,6 +168,8 @@ PLATFORM_START(omap5, "TI OMAP5")
     .compatible = omap5_dt_compat,
     .init_time = omap5_init_time,
     .specific_mapping = omap5_specific_mapping,
+    .smp_init = omap5_smp_init,
+    .cpu_up = omap5_cpu_up,
     .quirks = omap5_quirks,
 PLATFORM_END
 
index dd8c6ca733d30d4a1cc63f68f753cdddb88896d0..c559c84b61cc2367b3e32087b9c41b5a2225f48b 100644 (file)
@@ -17,6 +17,9 @@
 #define OMAP5_WKUPGEN_BASE                      0x48281000
 #define OMAP5_SRAM_PA                           0x40300000
 
+#define OMAP_AUX_CORE_BOOT_0_OFFSET             0x800
+#define OMAP_AUX_CORE_BOOT_1_OFFSET             0x804
+
 #endif /* __ASM_ARM_PLATFORMS_OMAP5_H */
 
 /*