/* Early setup - runs on TP1 after cache probe */
static void brcmstb_init_secondary(void)
{
#if defined(CONFIG_BMIPS4380)
	unsigned long cbr = BMIPS_GET_CBR();
	unsigned long old_vec = DEV_RD(cbr + BMIPS_RELO_VECTOR_CONTROL_1);

	/* make sure the NMI vector is in kseg0 now that we've booted */
	DEV_WR_RB(cbr + BMIPS_RELO_VECTOR_CONTROL_1, old_vec & ~0x20000000);
#elif defined(CONFIG_BMIPS5000)
	write_c0_brcm_bootvec(read_c0_brcm_bootvec() & ~0x20000000);
#endif
	brcmstb_ack_ipi(0);

	write_c0_compare(read_c0_count() + mips_hpt_frequency / HZ);
	/* hw irq lines 3+4 (gfap) goes to tp0 (secondary thread) */
	set_c0_status(IE_SW0 | IE_SW1 | IE_IRQ3 | IE_IRQ4 | IE_IRQ5 | ST0_IE);
	irq_enable_hazard();
}
示例#2
0
文件: setup.c 项目: 1314cc/linux
static void kbase_setup(void)
{
	__raw_writel(kbase | RELO_NORMAL_VEC,
		     BMIPS_GET_CBR() + BMIPS_RELO_VECTOR_CONTROL_1);
	ebase = kbase;
}