diff options
author | Magnus Damm <damm@opensource.se> | 2010-12-14 02:56:55 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-12-14 04:15:44 -0500 |
commit | 1c51ed4fb9f11fa1e0873aa2d5b28f42a85ac299 (patch) | |
tree | 258c5de6db68146a86fc27ae1dc2b8fed2dc40e3 /arch/arm/mach-shmobile/hotplug.c | |
parent | 09dd7ded60019d6a4fd2ae20a08c4ad2bc3ed3e9 (diff) |
ARM: mach-shmobile: SMP base support
Add SMP base support for R-Mobile / SH-Mobile processors.
This patch contains all base code to support CONFIG_SMP
regardless of ARCH_SHMOBILE processor type. Both local timer
and CPU hotplug are supported, but no processor specific
code is included.
At this point only the default behavior is in place, so
a single core will always be used even though CONFIG_SMP
is enabled on multicore systems.
The SMP Kconfig entry for arch/arm/Kconfig is excluded from
this patch to simplify merging.
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/arm/mach-shmobile/hotplug.c')
-rw-r--r-- | arch/arm/mach-shmobile/hotplug.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/hotplug.c b/arch/arm/mach-shmobile/hotplug.c new file mode 100644 index 000000000000..238a0d97d2d5 --- /dev/null +++ b/arch/arm/mach-shmobile/hotplug.c | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * SMP support for R-Mobile / SH-Mobile | ||
3 | * | ||
4 | * Copyright (C) 2010 Magnus Damm | ||
5 | * | ||
6 | * Based on realview, Copyright (C) 2002 ARM Ltd, All Rights Reserved | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/errno.h> | ||
14 | #include <linux/smp.h> | ||
15 | |||
16 | int platform_cpu_kill(unsigned int cpu) | ||
17 | { | ||
18 | return 1; | ||
19 | } | ||
20 | |||
21 | void platform_cpu_die(unsigned int cpu) | ||
22 | { | ||
23 | while (1) { | ||
24 | /* | ||
25 | * here's the WFI | ||
26 | */ | ||
27 | asm(".word 0xe320f003\n" | ||
28 | : | ||
29 | : | ||
30 | : "memory", "cc"); | ||
31 | } | ||
32 | } | ||
33 | |||
34 | int platform_cpu_disable(unsigned int cpu) | ||
35 | { | ||
36 | /* | ||
37 | * we don't allow CPU 0 to be shutdown (it is still too special | ||
38 | * e.g. clock tick interrupts) | ||
39 | */ | ||
40 | return cpu == 0 ? -EPERM : 0; | ||
41 | } | ||