ARM: shmobile: Introduce per-CPU SMP boot / sleep code
Add per-CPU SMP boot / sleep code that can be used by all SoCs included in mach-shmobile. The boot code reads out the per-CPU MPIDR id value and matches it with the value stored for any CPU number, and if there is a match and the boot function is set as well then the boot function will be executed. The sleep code simply uses WFI and then jumps back to the boot code to see if anyone has asked to wake up that CPU, if not it will sleep again. Signed-off-by: Magnus Damm <damm@opensource.se> [horms+renesas@verge.net.au: Remove trailing whitespace] Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
此提交包含在:
@@ -12,6 +12,9 @@
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/smp.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/smp_plat.h>
|
||||
#include <mach/common.h>
|
||||
|
||||
void __init shmobile_smp_init_cpus(unsigned int ncores)
|
||||
{
|
||||
@@ -26,3 +29,18 @@ void __init shmobile_smp_init_cpus(unsigned int ncores)
|
||||
for (i = 0; i < ncores; i++)
|
||||
set_cpu_possible(i, true);
|
||||
}
|
||||
|
||||
extern unsigned long shmobile_smp_fn[];
|
||||
extern unsigned long shmobile_smp_arg[];
|
||||
extern unsigned long shmobile_smp_mpidr[];
|
||||
|
||||
void shmobile_smp_hook(unsigned int cpu, unsigned long fn, unsigned long arg)
|
||||
{
|
||||
shmobile_smp_fn[cpu] = 0;
|
||||
flush_cache_all();
|
||||
|
||||
shmobile_smp_mpidr[cpu] = cpu_logical_map(cpu);
|
||||
shmobile_smp_fn[cpu] = fn;
|
||||
shmobile_smp_arg[cpu] = arg;
|
||||
flush_cache_all();
|
||||
}
|
||||
|
新增問題並參考
封鎖使用者