diff options
author | Olof Johansson <olof@lixom.net> | 2012-09-22 03:06:21 -0400 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2012-09-22 03:16:04 -0400 |
commit | 25468fe89f88c4ceeef94526e94ae0db176f6999 (patch) | |
tree | d70a713525281276b5063c814413bb3141e6056c /arch/arm/mach-ux500/platsmp.c | |
parent | a283580c52d3aa24305985e945dfccfbcfc6f4f9 (diff) | |
parent | 28e8e29c616f947348cc66bea684d0035c76021a (diff) |
Merge branch 'multiplatform/smp_ops' into next/multiplatform
* multiplatform/smp_ops:
ARM: consolidate pen_release instead of having per platform definitions
ARM: smp: Make SMP operations mandatory
ARM: SoC: convert spear13xx to SMP operations
ARM: SoC: convert imx6q to SMP operations
ARM: SoC: convert highbank to SMP operations
ARM: SoC: convert shmobile SMP to SMP operations
ARM: SoC: convert ux500 to SMP operations
ARM: SoC: convert MSM to SMP operations
ARM: SoC: convert Exynos4 to SMP operations
ARM: SoC: convert Tegra to SMP operations
ARM: SoC: convert OMAP4 to SMP operations
ARM: SoC: convert VExpress/RealView to SMP operations
ARM: SoC: add per-platform SMP operations
Conflicts due to file moves or removals in:
arch/arm/mach-msm/board-msm8960.c
arch/arm/mach-msm/board-msm8x60.c
arch/arm/mach-tegra/board-harmony.c
arch/arm/mach-tegra/board-trimslice.c
Conflicts due to board file cleanup:
arch/arm/mach-tegra/board-paz00.c
Conflicts due to cpu hotplug addition:
arch/arm/mach-tegra/hotplug.c
Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'arch/arm/mach-ux500/platsmp.c')
-rw-r--r-- | arch/arm/mach-ux500/platsmp.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c index a5dda68444db..3db7782f3afb 100644 --- a/arch/arm/mach-ux500/platsmp.c +++ b/arch/arm/mach-ux500/platsmp.c | |||
@@ -28,12 +28,6 @@ | |||
28 | extern void u8500_secondary_startup(void); | 28 | extern void u8500_secondary_startup(void); |
29 | 29 | ||
30 | /* | 30 | /* |
31 | * control for which core is the next to come out of the secondary | ||
32 | * boot "holding pen" | ||
33 | */ | ||
34 | volatile int pen_release = -1; | ||
35 | |||
36 | /* | ||
37 | * Write pen_release in a way that is guaranteed to be visible to all | 31 | * Write pen_release in a way that is guaranteed to be visible to all |
38 | * observers, irrespective of whether they're taking part in coherency | 32 | * observers, irrespective of whether they're taking part in coherency |
39 | * or not. This is necessary for the hotplug code to work reliably. | 33 | * or not. This is necessary for the hotplug code to work reliably. |
@@ -58,7 +52,7 @@ static void __iomem *scu_base_addr(void) | |||
58 | 52 | ||
59 | static DEFINE_SPINLOCK(boot_lock); | 53 | static DEFINE_SPINLOCK(boot_lock); |
60 | 54 | ||
61 | void __cpuinit platform_secondary_init(unsigned int cpu) | 55 | static void __cpuinit ux500_secondary_init(unsigned int cpu) |
62 | { | 56 | { |
63 | /* | 57 | /* |
64 | * if any interrupts are already enabled for the primary | 58 | * if any interrupts are already enabled for the primary |
@@ -80,7 +74,7 @@ void __cpuinit platform_secondary_init(unsigned int cpu) | |||
80 | spin_unlock(&boot_lock); | 74 | spin_unlock(&boot_lock); |
81 | } | 75 | } |
82 | 76 | ||
83 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | 77 | static int __cpuinit ux500_boot_secondary(unsigned int cpu, struct task_struct *idle) |
84 | { | 78 | { |
85 | unsigned long timeout; | 79 | unsigned long timeout; |
86 | 80 | ||
@@ -145,7 +139,7 @@ static void __init wakeup_secondary(void) | |||
145 | * Initialise the CPU possible map early - this describes the CPUs | 139 | * Initialise the CPU possible map early - this describes the CPUs |
146 | * which may be present or become present in the system. | 140 | * which may be present or become present in the system. |
147 | */ | 141 | */ |
148 | void __init smp_init_cpus(void) | 142 | static void __init ux500_smp_init_cpus(void) |
149 | { | 143 | { |
150 | void __iomem *scu_base = scu_base_addr(); | 144 | void __iomem *scu_base = scu_base_addr(); |
151 | unsigned int i, ncores; | 145 | unsigned int i, ncores; |
@@ -165,9 +159,19 @@ void __init smp_init_cpus(void) | |||
165 | set_smp_cross_call(gic_raise_softirq); | 159 | set_smp_cross_call(gic_raise_softirq); |
166 | } | 160 | } |
167 | 161 | ||
168 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) | 162 | static void __init ux500_smp_prepare_cpus(unsigned int max_cpus) |
169 | { | 163 | { |
170 | 164 | ||
171 | scu_enable(scu_base_addr()); | 165 | scu_enable(scu_base_addr()); |
172 | wakeup_secondary(); | 166 | wakeup_secondary(); |
173 | } | 167 | } |
168 | |||
169 | struct smp_operations ux500_smp_ops __initdata = { | ||
170 | .smp_init_cpus = ux500_smp_init_cpus, | ||
171 | .smp_prepare_cpus = ux500_smp_prepare_cpus, | ||
172 | .smp_secondary_init = ux500_secondary_init, | ||
173 | .smp_boot_secondary = ux500_boot_secondary, | ||
174 | #ifdef CONFIG_HOTPLUG_CPU | ||
175 | .cpu_die = ux500_cpu_die, | ||
176 | #endif | ||
177 | }; | ||