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 | |
parent | bsps: Use new APBUART register block API (diff) | |
download | rtems-a5f95cbb5785a2331894029eae0332ba509d6a4c.tar.bz2 |
bsp/leon3: Untangle interrupt controller support
Separate the probing of the interrupt controller from the
initialization.
Diffstat (limited to 'bsps/sparc/leon3/start')
-rw-r--r-- | bsps/sparc/leon3/start/amba.c | 9 | ||||
-rw-r--r-- | bsps/sparc/leon3/start/eirq.c | 15 |
2 files changed, 12 insertions, 12 deletions
diff --git a/bsps/sparc/leon3/start/amba.c b/bsps/sparc/leon3/start/amba.c index 15b72dcbe8..5ce3de6bdd 100644 --- a/bsps/sparc/leon3/start/amba.c +++ b/bsps/sparc/leon3/start/amba.c @@ -115,9 +115,6 @@ RTEMS_SYSINIT_ITEM( ); #endif -rtems_interrupt_lock LEON3_IrqCtrl_Lock = - RTEMS_INTERRUPT_LOCK_INITIALIZER("LEON3 IrqCtrl"); - /* Pointers to Interrupt Controller configuration registers */ volatile struct irqmp_regs *LEON3_IrqCtrl_Regs; struct ambapp_dev *LEON3_IrqCtrl_Adev; @@ -166,12 +163,6 @@ static void amba_initialize(void) icsel = (icsel >> ((7 - (LEON3_Cpu_Index & 0x7)) * 4)) & 0xf; LEON3_IrqCtrl_Regs += icsel; } - LEON3_IrqCtrl_Regs->mask[LEON3_Cpu_Index] = 0; - LEON3_IrqCtrl_Regs->force[LEON3_Cpu_Index] = 0; - LEON3_IrqCtrl_Regs->iclear = 0xffffffff; - - /* Init Extended IRQ controller if available */ - leon3_ext_irq_init(); /* find GP Timer */ adev = (void *)ambapp_for_each(plb, (OPTIONS_ALL|OPTIONS_APB_SLVS), 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( |