ARM: zynq: remove unnecessary setting of cpu_present_mask
[cascardo/linux.git] / arch / arm / mach-zynq / platsmp.c
index 689fbbc..abc82ef 100644 (file)
@@ -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
 };