diff options
author | Magnus Damm <damm@opensource.se> | 2013-07-31 11:07:12 +0400 |
---|---|---|
committer | Simon Horman <horms+renesas@verge.net.au> | 2013-08-06 13:07:24 +0400 |
commit | c970d4ef3ac6d56f5fd02902ad2ad80377c0bca1 (patch) | |
tree | e65617739137b1a044c214afcff595a07a88737e /arch/arm/mach-shmobile/platsmp-scu.c | |
parent | 8b3e32c1fe5dce55e28e76b20361841dc863ec17 (diff) | |
download | linux-c970d4ef3ac6d56f5fd02902ad2ad80377c0bca1.tar.xz |
ARM: shmobile: Introduce shared SCU SMP boot code
Add SMP boot functions for SCU equipped mach-shmobile SoCs.
At this point shmobile_smp_scu_prepare_cpus() controls the SCU and
installs boot fn and arg, while shmobile_smp_scu_boot_secondary()
currently does nothing. In the future the boot function and arg
install code will be reworked, so the empty function is ground
work for that.
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Diffstat (limited to 'arch/arm/mach-shmobile/platsmp-scu.c')
-rw-r--r-- | arch/arm/mach-shmobile/platsmp-scu.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/platsmp-scu.c b/arch/arm/mach-shmobile/platsmp-scu.c new file mode 100644 index 000000000000..8f478e4d4964 --- /dev/null +++ b/arch/arm/mach-shmobile/platsmp-scu.c @@ -0,0 +1,31 @@ +/* + * SMP support for SoCs with SCU covered by mach-shmobile + * + * Copyright (C) 2013 Magnus Damm + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/init.h> +#include <linux/io.h> +#include <linux/smp.h> +#include <asm/smp_plat.h> +#include <asm/smp_scu.h> +#include <mach/common.h> + +void __init shmobile_smp_scu_prepare_cpus(unsigned int max_cpus) +{ + shmobile_boot_fn = virt_to_phys(shmobile_boot_scu); + shmobile_boot_arg = (unsigned long)shmobile_scu_base; + + /* enable SCU and cache coherency on booting CPU */ + scu_enable(shmobile_scu_base); + scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL); +} + +int shmobile_smp_scu_boot_secondary(unsigned int cpu, struct task_struct *idle) +{ + /* do nothing for now */ + return 0; +} |