1 /* 2 * linux/arch/arm/mach-vexpress/platsmp.c 3 * 4 * Copyright (C) 2002 ARM Ltd. 5 * All Rights Reserved 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as 9 * published by the Free Software Foundation. 10 */ 11 #include <linux/init.h> 12 #include <linux/errno.h> 13 #include <linux/smp.h> 14 #include <linux/io.h> 15 16 #include <mach/motherboard.h> 17 #define V2M_PA_CS7 0x10000000 18 19 #include "core.h" 20 21 extern void versatile_secondary_startup(void); 22 23 /* 24 * Initialise the CPU possible map early - this describes the CPUs 25 * which may be present or become present in the system. 26 */ smp_init_cpus(void)27void __init smp_init_cpus(void) 28 { 29 ct_desc->init_cpu_map(); 30 } 31 platform_smp_prepare_cpus(unsigned int max_cpus)32void __init platform_smp_prepare_cpus(unsigned int max_cpus) 33 { 34 /* 35 * Initialise the present map, which describes the set of CPUs 36 * actually populated at the present time. 37 */ 38 ct_desc->smp_enable(max_cpus); 39 40 /* 41 * Write the address of secondary startup into the 42 * system-wide flags register. The boot monitor waits 43 * until it receives a soft interrupt, and then the 44 * secondary CPU branches to this address. 45 */ 46 writel(~0, MMIO_P2V(V2M_SYS_FLAGSCLR)); 47 writel(virt_to_phys(versatile_secondary_startup), 48 MMIO_P2V(V2M_SYS_FLAGSSET)); 49 } 50