|
@@ -75,13 +75,20 @@ void arc_init_IRQ(void)
|
|
* Set a default priority for all available interrupts to prevent
|
|
* Set a default priority for all available interrupts to prevent
|
|
* switching of register banks if Fast IRQ and multiple register banks
|
|
* switching of register banks if Fast IRQ and multiple register banks
|
|
* are supported by CPU.
|
|
* are supported by CPU.
|
|
- * Also disable all IRQ lines so faulty external hardware won't
|
|
|
|
|
|
+ * Also disable private-per-core IRQ lines so faulty external HW won't
|
|
* trigger interrupt that kernel is not ready to handle.
|
|
* trigger interrupt that kernel is not ready to handle.
|
|
*/
|
|
*/
|
|
for (i = NR_EXCEPTIONS; i < irq_bcr.irqs + NR_EXCEPTIONS; i++) {
|
|
for (i = NR_EXCEPTIONS; i < irq_bcr.irqs + NR_EXCEPTIONS; i++) {
|
|
write_aux_reg(AUX_IRQ_SELECT, i);
|
|
write_aux_reg(AUX_IRQ_SELECT, i);
|
|
write_aux_reg(AUX_IRQ_PRIORITY, ARCV2_IRQ_DEF_PRIO);
|
|
write_aux_reg(AUX_IRQ_PRIORITY, ARCV2_IRQ_DEF_PRIO);
|
|
- write_aux_reg(AUX_IRQ_ENABLE, 0);
|
|
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Only mask cpu private IRQs here.
|
|
|
|
+ * "common" interrupts are masked at IDU, otherwise it would
|
|
|
|
+ * need to be unmasked at each cpu, with IPIs
|
|
|
|
+ */
|
|
|
|
+ if (i < FIRST_EXT_IRQ)
|
|
|
|
+ write_aux_reg(AUX_IRQ_ENABLE, 0);
|
|
}
|
|
}
|
|
|
|
|
|
/* setup status32, don't enable intr yet as kernel doesn't want */
|
|
/* setup status32, don't enable intr yet as kernel doesn't want */
|