|
@@ -196,9 +196,15 @@ static void bmips_init_secondary(void)
|
|
|
#if defined(CONFIG_CPU_BMIPS4350) || defined(CONFIG_CPU_BMIPS4380)
|
|
|
void __iomem *cbr = BMIPS_GET_CBR();
|
|
|
unsigned long old_vec;
|
|
|
+ unsigned long relo_vector;
|
|
|
+ int boot_cpu;
|
|
|
|
|
|
- old_vec = __raw_readl(cbr + BMIPS_RELO_VECTOR_CONTROL_1);
|
|
|
- __raw_writel(old_vec & ~0x20000000, cbr + BMIPS_RELO_VECTOR_CONTROL_1);
|
|
|
+ boot_cpu = !!(read_c0_brcm_cmt_local() & (1 << 31));
|
|
|
+ relo_vector = boot_cpu ? BMIPS_RELO_VECTOR_CONTROL_0 :
|
|
|
+ BMIPS_RELO_VECTOR_CONTROL_1;
|
|
|
+
|
|
|
+ old_vec = __raw_readl(cbr + relo_vector);
|
|
|
+ __raw_writel(old_vec & ~0x20000000, cbr + relo_vector);
|
|
|
|
|
|
clear_c0_cause(smp_processor_id() ? C_SW1 : C_SW0);
|
|
|
#elif defined(CONFIG_CPU_BMIPS5000)
|