diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-07-16 14:35:59 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-07-14 12:21:33 +0200 |
commit | a5f95cbb5785a2331894029eae0332ba509d6a4c (patch) | |
tree | 1590b461258527621d5880532b7c00dcc8f66b4e /bsps/sparc/leon3/start/eirq.c | |
parent | 8fdecf6c5589493d3559a79cdd9b752c9065f140 (diff) |
bsp/leon3: Untangle interrupt controller support
Separate the probing of the interrupt controller from the
initialization.
Diffstat (limited to 'bsps/sparc/leon3/start/eirq.c')
-rw-r--r-- | bsps/sparc/leon3/start/eirq.c | 15 |
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( |