diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2011-09-08 08:15:22 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-09-14 05:14:58 -0400 |
commit | a62580e58065dc00430b16ced6e7a00837b8323f (patch) | |
tree | d3ec9d533870478e86a2cb5f0fefc937fca7cbfc /arch/arm/mach-shmobile/platsmp.c | |
parent | 5ac21a943e4052ef6743b09b6a06fbb683a3519d (diff) |
ARM: SoC: convert shmobile SMP to SMP operations
Convert shmobile SMP platforms to use struct smp_operations to provide
their SMP and CPU hotplug operations.
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Magnus Damm <magnus.damm@gmail.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm/mach-shmobile/platsmp.c')
-rw-r--r-- | arch/arm/mach-shmobile/platsmp.c | 96 |
1 files changed, 1 insertions, 95 deletions
diff --git a/arch/arm/mach-shmobile/platsmp.c b/arch/arm/mach-shmobile/platsmp.c index fde0d23121dc..ed8d2351915e 100644 --- a/arch/arm/mach-shmobile/platsmp.c +++ b/arch/arm/mach-shmobile/platsmp.c | |||
@@ -11,100 +11,11 @@ | |||
11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
12 | */ | 12 | */ |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/errno.h> | ||
15 | #include <linux/delay.h> | ||
16 | #include <linux/device.h> | ||
17 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
18 | #include <linux/io.h> | ||
19 | #include <linux/of.h> | ||
20 | #include <asm/hardware/gic.h> | 15 | #include <asm/hardware/gic.h> |
21 | #include <asm/mach-types.h> | ||
22 | #include <mach/common.h> | ||
23 | #include <mach/emev2.h> | ||
24 | 16 | ||
25 | #ifdef CONFIG_ARCH_SH73A0 | 17 | void __init shmobile_smp_init_cpus(unsigned int ncores) |
26 | #define is_sh73a0() (machine_is_ag5evm() || machine_is_kota2() || \ | ||
27 | of_machine_is_compatible("renesas,sh73a0")) | ||
28 | #else | ||
29 | #define is_sh73a0() (0) | ||
30 | #endif | ||
31 | |||
32 | #define is_r8a7779() machine_is_marzen() | ||
33 | |||
34 | #ifdef CONFIG_ARCH_EMEV2 | ||
35 | #define is_emev2() of_machine_is_compatible("renesas,emev2") | ||
36 | #else | ||
37 | #define is_emev2() (0) | ||
38 | #endif | ||
39 | |||
40 | static unsigned int __init shmobile_smp_get_core_count(void) | ||
41 | { | ||
42 | if (is_sh73a0()) | ||
43 | return sh73a0_get_core_count(); | ||
44 | |||
45 | if (is_r8a7779()) | ||
46 | return r8a7779_get_core_count(); | ||
47 | |||
48 | if (is_emev2()) | ||
49 | return emev2_get_core_count(); | ||
50 | |||
51 | return 1; | ||
52 | } | ||
53 | |||
54 | static void __init shmobile_smp_prepare_cpus(void) | ||
55 | { | ||
56 | if (is_sh73a0()) | ||
57 | sh73a0_smp_prepare_cpus(); | ||
58 | |||
59 | if (is_r8a7779()) | ||
60 | r8a7779_smp_prepare_cpus(); | ||
61 | |||
62 | if (is_emev2()) | ||
63 | emev2_smp_prepare_cpus(); | ||
64 | } | ||
65 | |||
66 | int shmobile_platform_cpu_kill(unsigned int cpu) | ||
67 | { | ||
68 | if (is_r8a7779()) | ||
69 | return r8a7779_platform_cpu_kill(cpu); | ||
70 | |||
71 | if (is_emev2()) | ||
72 | return emev2_platform_cpu_kill(cpu); | ||
73 | |||
74 | return 1; | ||
75 | } | ||
76 | |||
77 | void __cpuinit platform_secondary_init(unsigned int cpu) | ||
78 | { | 18 | { |
79 | trace_hardirqs_off(); | ||
80 | |||
81 | if (is_sh73a0()) | ||
82 | sh73a0_secondary_init(cpu); | ||
83 | |||
84 | if (is_r8a7779()) | ||
85 | r8a7779_secondary_init(cpu); | ||
86 | |||
87 | if (is_emev2()) | ||
88 | emev2_secondary_init(cpu); | ||
89 | } | ||
90 | |||
91 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | ||
92 | { | ||
93 | if (is_sh73a0()) | ||
94 | return sh73a0_boot_secondary(cpu); | ||
95 | |||
96 | if (is_r8a7779()) | ||
97 | return r8a7779_boot_secondary(cpu); | ||
98 | |||
99 | if (is_emev2()) | ||
100 | return emev2_boot_secondary(cpu); | ||
101 | |||
102 | return -ENOSYS; | ||
103 | } | ||
104 | |||
105 | void __init smp_init_cpus(void) | ||
106 | { | ||
107 | unsigned int ncores = shmobile_smp_get_core_count(); | ||
108 | unsigned int i; | 19 | unsigned int i; |
109 | 20 | ||
110 | if (ncores > nr_cpu_ids) { | 21 | if (ncores > nr_cpu_ids) { |
@@ -118,8 +29,3 @@ void __init smp_init_cpus(void) | |||
118 | 29 | ||
119 | set_smp_cross_call(gic_raise_softirq); | 30 | set_smp_cross_call(gic_raise_softirq); |
120 | } | 31 | } |
121 | |||
122 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) | ||
123 | { | ||
124 | shmobile_smp_prepare_cpus(); | ||
125 | } | ||