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>
This commit is contained in:

committed by
Arnd Bergmann

parent
5ac21a943e
commit
a62580e580
@@ -11,100 +11,11 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/emev2.h>
|
||||
|
||||
#ifdef CONFIG_ARCH_SH73A0
|
||||
#define is_sh73a0() (machine_is_ag5evm() || machine_is_kota2() || \
|
||||
of_machine_is_compatible("renesas,sh73a0"))
|
||||
#else
|
||||
#define is_sh73a0() (0)
|
||||
#endif
|
||||
|
||||
#define is_r8a7779() machine_is_marzen()
|
||||
|
||||
#ifdef CONFIG_ARCH_EMEV2
|
||||
#define is_emev2() of_machine_is_compatible("renesas,emev2")
|
||||
#else
|
||||
#define is_emev2() (0)
|
||||
#endif
|
||||
|
||||
static unsigned int __init shmobile_smp_get_core_count(void)
|
||||
void __init shmobile_smp_init_cpus(unsigned int ncores)
|
||||
{
|
||||
if (is_sh73a0())
|
||||
return sh73a0_get_core_count();
|
||||
|
||||
if (is_r8a7779())
|
||||
return r8a7779_get_core_count();
|
||||
|
||||
if (is_emev2())
|
||||
return emev2_get_core_count();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void __init shmobile_smp_prepare_cpus(void)
|
||||
{
|
||||
if (is_sh73a0())
|
||||
sh73a0_smp_prepare_cpus();
|
||||
|
||||
if (is_r8a7779())
|
||||
r8a7779_smp_prepare_cpus();
|
||||
|
||||
if (is_emev2())
|
||||
emev2_smp_prepare_cpus();
|
||||
}
|
||||
|
||||
int shmobile_platform_cpu_kill(unsigned int cpu)
|
||||
{
|
||||
if (is_r8a7779())
|
||||
return r8a7779_platform_cpu_kill(cpu);
|
||||
|
||||
if (is_emev2())
|
||||
return emev2_platform_cpu_kill(cpu);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||
{
|
||||
trace_hardirqs_off();
|
||||
|
||||
if (is_sh73a0())
|
||||
sh73a0_secondary_init(cpu);
|
||||
|
||||
if (is_r8a7779())
|
||||
r8a7779_secondary_init(cpu);
|
||||
|
||||
if (is_emev2())
|
||||
emev2_secondary_init(cpu);
|
||||
}
|
||||
|
||||
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||
{
|
||||
if (is_sh73a0())
|
||||
return sh73a0_boot_secondary(cpu);
|
||||
|
||||
if (is_r8a7779())
|
||||
return r8a7779_boot_secondary(cpu);
|
||||
|
||||
if (is_emev2())
|
||||
return emev2_boot_secondary(cpu);
|
||||
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
void __init smp_init_cpus(void)
|
||||
{
|
||||
unsigned int ncores = shmobile_smp_get_core_count();
|
||||
unsigned int i;
|
||||
|
||||
if (ncores > nr_cpu_ids) {
|
||||
@@ -118,8 +29,3 @@ void __init smp_init_cpus(void)
|
||||
|
||||
set_smp_cross_call(gic_raise_softirq);
|
||||
}
|
||||
|
||||
void __init platform_smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
shmobile_smp_prepare_cpus();
|
||||
}
|
||||
|
Reference in New Issue
Block a user