Ejemplo n.º 1
0
/* Tell the hardware to boot TP1 - runs on TP0 */
static void brcmstb_boot_secondary(int cpu, struct task_struct *idle)
{
	brcmstb_smp_boot_sp = __KSTK_TOS(idle);
	brcmstb_smp_boot_gp = (unsigned long)task_thread_info(idle);
	mb();

	/*
	 * TP1 initial boot sequence:
	 *   brcm_reset_nmi_vec @ a000_0000 ->
	 *   brcmstb_tp1_entry ->
	 *   brcm_upper_tlb_setup (cached function call) ->
	 *   start_secondary (cached jump)
	 *
	 * TP1 warm restart sequence:
	 *   play_dead WAIT loop ->
	 *   brcm_tp1_int_vec @ BRCM_WARM_RESTART_VEC ->
	 *   eret to play_dead ->
	 *   brcmstb_tp1_reentry ->
	 *   start_secondary
	 *
	 * Vector relocation code is in arch/mips/brcmstb/prom.c
	 * Actual boot vectors are in arch/mips/brcmstb/vector.S
	 */

	printk(KERN_INFO "SMP: Booting CPU%d...\n", cpu);

	/* warm restart */
	brcmstb_send_ipi_single(1, 0);

#if defined(CONFIG_BMIPS4380)
	set_c0_brcm_cmt_ctrl(0x01);
#elif defined(CONFIG_BMIPS5000)
	write_c0_brcm_action(0x9);
#endif
}
Ejemplo n.º 2
0
static void brcmstb_send_ipi_mask(cpumask_t mask, unsigned int action)
{
    unsigned int i;

    for_each_cpu_mask(i, mask)
    brcmstb_send_ipi_single(i, action);
}
Ejemplo n.º 3
0
static void brcmstb_send_ipi_mask(const struct cpumask *mask,
	unsigned int action)
{
	unsigned int i;

	for_each_cpu(i, mask)
		brcmstb_send_ipi_single(i, action);
}