summaryrefslogtreecommitdiff
path: root/bsps/sparc/leon3/start/eirq.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/sparc/leon3/start/eirq.c')
-rw-r--r--bsps/sparc/leon3/start/eirq.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/bsps/sparc/leon3/start/eirq.c b/bsps/sparc/leon3/start/eirq.c
index d8ff6d2a82..0371cfe98f 100644
--- a/bsps/sparc/leon3/start/eirq.c
+++ b/bsps/sparc/leon3/start/eirq.c
@@ -38,12 +38,19 @@
/* GRLIB extended IRQ controller IRQ number */
int LEON3_IrqCtrl_EIrq = -1;
+rtems_interrupt_lock LEON3_IrqCtrl_Lock =
+ RTEMS_INTERRUPT_LOCK_INITIALIZER("LEON3 IrqCtrl");
+
/* Initialize Extended Interrupt controller */
-void leon3_ext_irq_init(void)
+void leon3_ext_irq_init(volatile struct irqmp_regs *regs)
{
- if ( (LEON3_IrqCtrl_Regs->mpstat >> 16) & 0xf ) {
+ regs->mask[LEON3_Cpu_Index] = 0;
+ regs->force[LEON3_Cpu_Index] = 0;
+ regs->iclear = 0xffffffff;
+
+ if ( (regs->mpstat >> 16) & 0xf ) {
/* Extended IRQ controller available */
- LEON3_IrqCtrl_EIrq = (LEON3_IrqCtrl_Regs->mpstat >> 16) & 0xf;
+ LEON3_IrqCtrl_EIrq = (regs->mpstat >> 16) & 0xf;
}
}
@@ -76,6 +83,8 @@ void bsp_interrupt_facility_initialize(void)
leon3_interrupt_affinities[i] = affinity;
}
#endif
+
+ leon3_ext_irq_init(LEON3_IrqCtrl_Regs);
}
rtems_status_code bsp_interrupt_get_attributes(