diff options
Diffstat (limited to 'arch/arm/mach-vexpress/platsmp.c')
-rw-r--r-- | arch/arm/mach-vexpress/platsmp.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/arm/mach-vexpress/platsmp.c b/arch/arm/mach-vexpress/platsmp.c index dc1ace55d557..993c9ae5dc5e 100644 --- a/arch/arm/mach-vexpress/platsmp.c +++ b/arch/arm/mach-vexpress/platsmp.c | |||
@@ -12,9 +12,11 @@ | |||
12 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/of.h> | ||
15 | #include <linux/of_fdt.h> | 16 | #include <linux/of_fdt.h> |
16 | #include <linux/vexpress.h> | 17 | #include <linux/vexpress.h> |
17 | 18 | ||
19 | #include <asm/mcpm.h> | ||
18 | #include <asm/smp_scu.h> | 20 | #include <asm/smp_scu.h> |
19 | #include <asm/mach/map.h> | 21 | #include <asm/mach/map.h> |
20 | 22 | ||
@@ -203,3 +205,21 @@ struct smp_operations __initdata vexpress_smp_ops = { | |||
203 | .cpu_die = vexpress_cpu_die, | 205 | .cpu_die = vexpress_cpu_die, |
204 | #endif | 206 | #endif |
205 | }; | 207 | }; |
208 | |||
209 | bool __init vexpress_smp_init_ops(void) | ||
210 | { | ||
211 | #ifdef CONFIG_MCPM | ||
212 | /* | ||
213 | * The best way to detect a multi-cluster configuration at the moment | ||
214 | * is to look for the presence of a CCI in the system. | ||
215 | * Override the default vexpress_smp_ops if so. | ||
216 | */ | ||
217 | struct device_node *node; | ||
218 | node = of_find_compatible_node(NULL, NULL, "arm,cci-400"); | ||
219 | if (node && of_device_is_available(node)) { | ||
220 | mcpm_smp_set_ops(); | ||
221 | return true; | ||
222 | } | ||
223 | #endif | ||
224 | return false; | ||
225 | } | ||