diff options
Diffstat (limited to 'arch/arm/mach-shmobile/hotplug.c')
-rw-r--r-- | arch/arm/mach-shmobile/hotplug.c | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/arch/arm/mach-shmobile/hotplug.c b/arch/arm/mach-shmobile/hotplug.c index 828d22f3af57..b09a0bdbf813 100644 --- a/arch/arm/mach-shmobile/hotplug.c +++ b/arch/arm/mach-shmobile/hotplug.c | |||
@@ -14,30 +14,16 @@ | |||
14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
15 | #include <linux/cpumask.h> | 15 | #include <linux/cpumask.h> |
16 | #include <linux/delay.h> | 16 | #include <linux/delay.h> |
17 | #include <linux/of.h> | ||
17 | #include <mach/common.h> | 18 | #include <mach/common.h> |
19 | #include <mach/r8a7779.h> | ||
20 | #include <mach/emev2.h> | ||
18 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
22 | #include <asm/mach-types.h> | ||
19 | 23 | ||
20 | static cpumask_t dead_cpus; | 24 | static cpumask_t dead_cpus; |
21 | 25 | ||
22 | int platform_cpu_kill(unsigned int cpu) | 26 | void shmobile_cpu_die(unsigned int cpu) |
23 | { | ||
24 | int k; | ||
25 | |||
26 | /* this function is running on another CPU than the offline target, | ||
27 | * here we need wait for shutdown code in platform_cpu_die() to | ||
28 | * finish before asking SoC-specific code to power off the CPU core. | ||
29 | */ | ||
30 | for (k = 0; k < 1000; k++) { | ||
31 | if (cpumask_test_cpu(cpu, &dead_cpus)) | ||
32 | return shmobile_platform_cpu_kill(cpu); | ||
33 | |||
34 | mdelay(1); | ||
35 | } | ||
36 | |||
37 | return 0; | ||
38 | } | ||
39 | |||
40 | void platform_cpu_die(unsigned int cpu) | ||
41 | { | 27 | { |
42 | /* hardware shutdown code running on the CPU that is being offlined */ | 28 | /* hardware shutdown code running on the CPU that is being offlined */ |
43 | flush_cache_all(); | 29 | flush_cache_all(); |
@@ -60,7 +46,7 @@ void platform_cpu_die(unsigned int cpu) | |||
60 | } | 46 | } |
61 | } | 47 | } |
62 | 48 | ||
63 | int platform_cpu_disable(unsigned int cpu) | 49 | int shmobile_cpu_disable(unsigned int cpu) |
64 | { | 50 | { |
65 | cpumask_clear_cpu(cpu, &dead_cpus); | 51 | cpumask_clear_cpu(cpu, &dead_cpus); |
66 | /* | 52 | /* |
@@ -69,3 +55,8 @@ int platform_cpu_disable(unsigned int cpu) | |||
69 | */ | 55 | */ |
70 | return cpu == 0 ? -EPERM : 0; | 56 | return cpu == 0 ? -EPERM : 0; |
71 | } | 57 | } |
58 | |||
59 | int shmobile_cpu_is_dead(unsigned int cpu) | ||
60 | { | ||
61 | return cpumask_test_cpu(cpu, &dead_cpus); | ||
62 | } | ||