summaryrefslogtreecommitdiff
path: root/arch/arm/mach-zynq/platsmp.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2013-12-22 23:37:53 +0400
committerOlof Johansson <olof@lixom.net>2013-12-22 23:37:53 +0400
commit650286d25729b34402ee2545f2c0113d8a142427 (patch)
treef70b3678eb77be57e1a9c945bbdacf997595b491 /arch/arm/mach-zynq/platsmp.c
parent83301480111c9ac3fbd03ec5b0c90c21c5aa39f7 (diff)
parent2605f85275a7d5ccc5a59b05eed139656ad4e8a2 (diff)
downloadlinux-650286d25729b34402ee2545f2c0113d8a142427.tar.xz
Merge tag 'zynq-cleanup-for-3.14' of git://git.xilinx.com/linux-xlnx into next/cleanup
From Michal Simek: ARM: Xilinx Zynq cleanup patches for v3.14 This branch contains these fixes: - SMP cleanups - platform initialization cleanup * tag 'zynq-cleanup-for-3.14' of git://git.xilinx.com/linux-xlnx: ARM: zynq: remove unnecessary setting of cpu_present_mask arm: zynq: Set proper GIC flags arm: zynq: Use of_platform_populate instead of bus_probe arm: zynq: Add support for zynq_cpu_kill function arm: zynq: Invalidate L1 in secondary boot arm: zynq: platsmp: Remove CPU presence check Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'arch/arm/mach-zynq/platsmp.c')
-rw-r--r--arch/arm/mach-zynq/platsmp.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c
index 689fbbc3d9c8..abc82ef085c1 100644
--- a/arch/arm/mach-zynq/platsmp.c
+++ b/arch/arm/mach-zynq/platsmp.c
@@ -39,11 +39,6 @@ int zynq_cpun_start(u32 address, int cpu)
u32 trampoline_code_size = &zynq_secondary_trampoline_end -
&zynq_secondary_trampoline;
- if (cpu > ncores) {
- pr_warn("CPU No. is not available in the system\n");
- return -1;
- }
-
/* MS: Expectation that SLCR are directly map and accessible */
/* Not possible to jump to non aligned address */
if (!(address & 3) && (!address || (address >= trampoline_code_size))) {
@@ -95,7 +90,7 @@ EXPORT_SYMBOL(zynq_cpun_start);
static int zynq_boot_secondary(unsigned int cpu,
struct task_struct *idle)
{
- return zynq_cpun_start(virt_to_phys(secondary_startup), cpu);
+ return zynq_cpun_start(virt_to_phys(zynq_secondary_startup), cpu);
}
/*
@@ -114,23 +109,23 @@ static void __init zynq_smp_init_cpus(void)
static void __init zynq_smp_prepare_cpus(unsigned int max_cpus)
{
- int i;
-
- /*
- * Initialise the present map, which describes the set of CPUs
- * actually populated at the present time.
- */
- for (i = 0; i < max_cpus; i++)
- set_cpu_present(i, true);
-
scu_enable(zynq_scu_base);
}
+#ifdef CONFIG_HOTPLUG_CPU
+static int zynq_cpu_kill(unsigned cpu)
+{
+ zynq_slcr_cpu_stop(cpu);
+ return 1;
+}
+#endif
+
struct smp_operations zynq_smp_ops __initdata = {
.smp_init_cpus = zynq_smp_init_cpus,
.smp_prepare_cpus = zynq_smp_prepare_cpus,
.smp_boot_secondary = zynq_boot_secondary,
#ifdef CONFIG_HOTPLUG_CPU
.cpu_die = zynq_platform_cpu_die,
+ .cpu_kill = zynq_cpu_kill,
#endif
};