aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Burton <[email protected]>2016-05-17 15:31:05 +0100
committerRalf Baechle <[email protected]>2016-05-28 12:35:03 +0200
commitd642e4e7b42f379fb9383ef1505f9d67895fb815 (patch)
tree39ef96df7136e10f0f75127464fa3e65587603cd
parent640356a48750ff9ef3303d85158ef9c42c3a18b6 (diff)
MIPS: smp-cps: Clear Status IPL field when using EIC
When using an external interrupt controller (EIC) the interrupt mask bits in the cop0 Status register are reused for the Interrupt Priority Level, and any interrupts with a priority lower than the field will be ignored. Clear the field to 0 by default such that all interrupts are serviced. Signed-off-by: Paul Burton <[email protected]> Reviewed-by: Matt Redfearn <[email protected]> Tested-by: Matt Redfearn <[email protected]> Cc: Qais Yousef <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: [email protected] Cc: [email protected] Patchwork: https://patchwork.linux-mips.org/patch/13273/ Signed-off-by: Ralf Baechle <[email protected]>
-rw-r--r--arch/mips/kernel/smp-cps.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c
index 1061bd2e7e9c..4ed36f288d64 100644
--- a/arch/mips/kernel/smp-cps.c
+++ b/arch/mips/kernel/smp-cps.c
@@ -359,8 +359,12 @@ static void cps_init_secondary(void)
BUG_ON(ident != mips_cm_vp_id(smp_processor_id()));
}
- change_c0_status(ST0_IM, STATUSF_IP2 | STATUSF_IP3 | STATUSF_IP4 |
- STATUSF_IP5 | STATUSF_IP6 | STATUSF_IP7);
+ if (cpu_has_veic)
+ clear_c0_status(ST0_IM);
+ else
+ change_c0_status(ST0_IM, STATUSF_IP2 | STATUSF_IP3 |
+ STATUSF_IP4 | STATUSF_IP5 |
+ STATUSF_IP6 | STATUSF_IP7);
}
static void cps_smp_finish(void)