diff options
Diffstat (limited to 'arch/arm/mach-zynq/platsmp.c')
| -rw-r--r-- | arch/arm/mach-zynq/platsmp.c | 25 | 
1 files changed, 10 insertions, 15 deletions
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c index 689fbbc3d9c..abc82ef085c 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  };  | 
