14 #include <linux/errno.h>
16 #include <linux/device.h>
20 #include <asm/cacheflush.h>
24 #include <mach/hardware.h>
35 static void write_pen_release(
int val)
45 if (cpu_is_u8500_family() || cpu_is_ux540_family())
55 static void __cpuinit ux500_secondary_init(
unsigned int cpu)
68 write_pen_release(-1);
73 spin_lock(&boot_lock);
74 spin_unlock(&boot_lock);
85 spin_lock(&boot_lock);
106 spin_unlock(&boot_lock);
111 static void __init wakeup_secondary(
void)
115 if (cpu_is_u8500_family() || cpu_is_ux540_family())
126 #define UX500_CPU1_JUMPADDR_OFFSET 0x1FF4
128 backupram + UX500_CPU1_JUMPADDR_OFFSET);
130 #define UX500_CPU1_WAKEMAGIC_OFFSET 0x1FF0
132 backupram + UX500_CPU1_WAKEMAGIC_OFFSET);
142 static void __init ux500_smp_init_cpus(
void)
145 unsigned int i, ncores;
150 if (ncores > nr_cpu_ids) {
151 pr_warn(
"SMP: %u cores greater than maximum (%u), clipping\n",
156 for (i = 0; i < ncores; i++)
162 static void __init ux500_smp_prepare_cpus(
unsigned int max_cpus)
170 .smp_init_cpus = ux500_smp_init_cpus,
171 .smp_prepare_cpus = ux500_smp_prepare_cpus,
172 .smp_secondary_init = ux500_secondary_init,
173 .smp_boot_secondary = ux500_boot_secondary,
174 #ifdef CONFIG_HOTPLUG_CPU