static void __init emev2_smp_prepare_cpus(unsigned int max_cpus) { scu_enable(shmobile_scu_base); /* Tell ROM loader about our vector (in headsmp-scu.S) */ emev2_set_boot_vector(__pa(shmobile_secondary_vector_scu)); /* enable cache coherency on booting CPU */ scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL); }
static void __init emev2_smp_prepare_cpus(unsigned int max_cpus) { scu_enable(shmobile_scu_base); /* Tell ROM loader about our vector (in headsmp-scu.S, headsmp.S) */ emev2_set_boot_vector(__pa(shmobile_boot_vector)); shmobile_boot_fn = virt_to_phys(shmobile_boot_scu); shmobile_boot_arg = (unsigned long)shmobile_scu_base; /* enable cache coherency on booting CPU */ scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL); }
static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct *idle) { cpu = cpu_logical_map(cpu); /* enable cache coherency */ modify_scu_cpu_psr(0, 3 << (cpu * 8)); /* Tell ROM loader about our vector (in headsmp.S) */ emev2_set_boot_vector(__pa(shmobile_secondary_vector)); gic_raise_softirq(cpumask_of(cpu), 1); return 0; }