summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-08-03 19:55:14 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-01-18 14:35:47 +0100
commit7486af949d3d2f3dbc979b0a19a7a504a7af7fa4 (patch)
tree19a75b72bd3128ceede75033553856d445a66fc9
parent96e602adccca2e1896834769a7164be9cfe49473 (diff)
bsp/leon3: Add LEON3_IRQAMP_EXTENDED_INTERRUPT
-rw-r--r--bsps/sparc/leon3/include/bsp/leon3.h4
-rw-r--r--bsps/sparc/leon3/start/eirq.c8
-rw-r--r--spec/build/bsps/sparc/leon3/grp.yml2
-rw-r--r--spec/build/bsps/sparc/leon3/optirqampextirq.yml22
4 files changed, 36 insertions, 0 deletions
diff --git a/bsps/sparc/leon3/include/bsp/leon3.h b/bsps/sparc/leon3/include/bsp/leon3.h
index 7a571b3bc2..9d26581d61 100644
--- a/bsps/sparc/leon3/include/bsp/leon3.h
+++ b/bsps/sparc/leon3/include/bsp/leon3.h
@@ -212,7 +212,11 @@ extern struct ambapp_dev *LEON3_IrqCtrl_Adev;
*
* This object should be read-only after initialization.
*/
+#if defined(LEON3_IRQAMP_EXTENDED_INTERRUPT)
+#define LEON3_IrqCtrl_EIrq LEON3_IRQAMP_EXTENDED_INTERRUPT
+#else
extern uint32_t LEON3_IrqCtrl_EIrq;
+#endif
/**
* @brief Initializes the interrupt controller for the boot processor.
diff --git a/bsps/sparc/leon3/start/eirq.c b/bsps/sparc/leon3/start/eirq.c
index f57aaf7974..0dedc66d95 100644
--- a/bsps/sparc/leon3/start/eirq.c
+++ b/bsps/sparc/leon3/start/eirq.c
@@ -16,8 +16,10 @@
#include <bsp/irq-generic.h>
#include <bsp/leon3.h>
+#if !defined(LEON3_IRQAMP_EXTENDED_INTERRUPT)
/* GRLIB extended IRQ controller IRQ number */
uint32_t LEON3_IrqCtrl_EIrq;
+#endif
rtems_interrupt_lock LEON3_IrqCtrl_Lock =
RTEMS_INTERRUPT_LOCK_INITIALIZER("LEON3 IrqCtrl");
@@ -28,7 +30,9 @@ void leon3_ext_irq_init(irqamp *regs)
grlib_store_32(&regs->pimask[LEON3_Cpu_Index], 0);
grlib_store_32(&regs->piforce[LEON3_Cpu_Index], 0);
grlib_store_32(&regs->iclear, 0xffffffff);
+#if !defined(LEON3_IRQAMP_EXTENDED_INTERRUPT)
LEON3_IrqCtrl_EIrq = IRQAMP_MPSTAT_EIRQ_GET(grlib_load_32(&regs->mpstat));
+#endif
}
bool bsp_interrupt_is_valid_vector(rtems_vector_number vector)
@@ -37,11 +41,15 @@ bool bsp_interrupt_is_valid_vector(rtems_vector_number vector)
return false;
}
+#if defined(LEON3_IRQAMP_EXTENDED_INTERRUPT)
+ return vector <= BSP_INTERRUPT_VECTOR_MAX_EXT;
+#else
if (LEON3_IrqCtrl_EIrq > 0) {
return vector <= BSP_INTERRUPT_VECTOR_MAX_EXT;
}
return vector <= BSP_INTERRUPT_VECTOR_MAX_STD;
+#endif
}
#if defined(RTEMS_SMP)
diff --git a/spec/build/bsps/sparc/leon3/grp.yml b/spec/build/bsps/sparc/leon3/grp.yml
index fc8edaf441..3181989f6b 100644
--- a/spec/build/bsps/sparc/leon3/grp.yml
+++ b/spec/build/bsps/sparc/leon3/grp.yml
@@ -42,6 +42,8 @@ links:
- role: build-dependency
uid: optirqampbase
- role: build-dependency
+ uid: optirqampextirq
+- role: build-dependency
uid: optirqampts
- role: build-dependency
uid: optconirq
diff --git a/spec/build/bsps/sparc/leon3/optirqampextirq.yml b/spec/build/bsps/sparc/leon3/optirqampextirq.yml
new file mode 100644
index 0000000000..92d9c6d4e4
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/optirqampextirq.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+actions:
+- get-integer: null
+- format-and-define: null
+build-type: option
+default: null
+default-by-variant:
+- value: 12
+ variants:
+ - sparc/gr712rc
+- value: 10
+ variants:
+ - sparc/gr740
+enabled-by: true
+format: '{}'
+links: []
+name: LEON3_IRQAMP_EXTENDED_INTERRUPT
+description: |
+ This option specifies the interrupt line of the IRQ(A)MP extended interrupt.
+type: build