summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-16 11:19:51 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-05-18 11:36:07 +0200
commit15acdc7369d0fd481ba2e86aee368770c53fb17e (patch)
treebdf5fd5b43832c0ed220ae3271c9e004eeee73bb
parent1c46db0c167885e8438cfce17b6652fb75d1c6f5 (diff)
bsp/leon3: Add LEON3_IRQAMP_BASE
-rw-r--r--bsps/sparc/leon3/include/bsp/leon3.h4
-rw-r--r--bsps/sparc/leon3/start/amba.c9
-rw-r--r--spec/build/bsps/sparc/leon3/grp.yml2
-rw-r--r--spec/build/bsps/sparc/leon3/optirqampbase.yml22
4 files changed, 36 insertions, 1 deletions
diff --git a/bsps/sparc/leon3/include/bsp/leon3.h b/bsps/sparc/leon3/include/bsp/leon3.h
index 6c139bdaed..f3a9def60b 100644
--- a/bsps/sparc/leon3/include/bsp/leon3.h
+++ b/bsps/sparc/leon3/include/bsp/leon3.h
@@ -187,7 +187,11 @@ extern rtems_interrupt_lock LEON3_IrqCtrl_Lock;
/**
* @brief This pointer provides the IRQ(A)MP register block address.
*/
+#if defined(LEON3_IRQAMP_BASE)
+#define LEON3_IrqCtrl_Regs ((irqamp *) LEON3_IRQAMP_BASE)
+#else
extern irqamp *LEON3_IrqCtrl_Regs;
+#endif
/**
* @brief This pointer provides the IRQ(A)MP device information block.
diff --git a/bsps/sparc/leon3/start/amba.c b/bsps/sparc/leon3/start/amba.c
index d3254e3f0a..efce4110c9 100644
--- a/bsps/sparc/leon3/start/amba.c
+++ b/bsps/sparc/leon3/start/amba.c
@@ -96,9 +96,10 @@ RTEMS_SYSINIT_ITEM(
);
#endif
-/* Pointers to Interrupt Controller configuration registers */
+#if !defined(LEON3_IRQAMP_BASE)
irqamp *LEON3_IrqCtrl_Regs;
struct ambapp_dev *LEON3_IrqCtrl_Adev;
+#endif
#if !defined(LEON3_GPTIMER_BASE)
gptimer *LEON3_Timer_Regs;
@@ -121,7 +122,12 @@ static void amba_initialize(void)
struct ambapp_bus *plb;
plb = ambapp_plb();
+#if defined(LEON3_IRQAMP_BASE) && defined(LEON3_GPTIMER_BASE)
+ (void) plb;
+ (void) adev;
+#endif
+#if !defined(LEON3_IRQAMP_BASE)
/* Find LEON3 Interrupt controller */
adev = (void *)ambapp_for_each(plb, (OPTIONS_ALL|OPTIONS_APB_SLVS),
VENDOR_GAISLER, GAISLER_IRQMP,
@@ -148,6 +154,7 @@ static void amba_initialize(void)
icsel = (icsel >> ((7 - (LEON3_Cpu_Index & 0x7)) * 4)) & 0xf;
LEON3_IrqCtrl_Regs += icsel;
}
+#endif
#if !defined(LEON3_GPTIMER_BASE)
/* find GP Timer */
diff --git a/spec/build/bsps/sparc/leon3/grp.yml b/spec/build/bsps/sparc/leon3/grp.yml
index 78d59ff568..1e822e793f 100644
--- a/spec/build/bsps/sparc/leon3/grp.yml
+++ b/spec/build/bsps/sparc/leon3/grp.yml
@@ -36,6 +36,8 @@ links:
- role: build-dependency
uid: optgptimerbase
- role: build-dependency
+ uid: optirqampbase
+- role: build-dependency
uid: optconirq
- role: build-dependency
uid: optleon3smp
diff --git a/spec/build/bsps/sparc/leon3/optirqampbase.yml b/spec/build/bsps/sparc/leon3/optirqampbase.yml
new file mode 100644
index 0000000000..319c341790
--- /dev/null
+++ b/spec/build/bsps/sparc/leon3/optirqampbase.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: 0x80000200
+ variants:
+ - sparc/gr712rc
+- value: 0xff904000
+ variants:
+ - sparc/gr740
+enabled-by: true
+format: '{:#010x}'
+links: []
+name: LEON3_IRQAMP_BASE
+description: |
+ This option defines the base address of the IRQ(A)MP register block.
+type: build