summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/lib/libbsp/sparc/leon3/ChangeLog5
-rw-r--r--c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c22
2 files changed, 22 insertions, 5 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/ChangeLog b/c/src/lib/libbsp/sparc/leon3/ChangeLog
index b5a0069c3d..c9bc8043ef 100644
--- a/c/src/lib/libbsp/sparc/leon3/ChangeLog
+++ b/c/src/lib/libbsp/sparc/leon3/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-17 Daniel Hellstrom <daniel@gaisler.com>
+
+ PR 2015/bsps
+ * shmsupp/getcfg.c: Make SHM driver configurable using weak symbol.
+
2011-04-25 Jennifer Averett <jennifer.averett@OARcorp.com>
PR 1783/bsps
diff --git a/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c b/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c
index 37117774a0..f8edf11df9 100644
--- a/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c
+++ b/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c
@@ -76,8 +76,21 @@ extern rtems_mpci_entry Shm_Send_packet(
#define INTERRUPT 0 /* XXX: */
#define POLLING 1 /* XXX: fix me -- is polling ONLY!!! */
-
-shm_config_table BSP_shm_cfgtbl;
+/* Let user override this configuration by declaring this a weak variable */
+shm_config_table BSP_shm_cfgtbl __attribute__((weak)) =
+{
+ (vol_u32 *)0x40000000, /* USER OVERRIDABLE */
+ 0x00001000, /* USER OVERRIDABLE */
+ SHM_BIG,
+ NULL_CONVERT,
+ INTR_MODE,
+ Shm_Cause_interrupt,
+ {
+ NULL,
+ 1 << LEON3_MP_IRQ, /* USER OVERRIDABLE */
+ 4,
+ },
+};
void Shm_Get_configuration(
uint32_t localnode,
@@ -88,8 +101,6 @@ void Shm_Get_configuration(
int i;
unsigned int tmp;
- BSP_shm_cfgtbl.base = 0x40000000;
- BSP_shm_cfgtbl.length = 0x00001000;
BSP_shm_cfgtbl.format = SHM_BIG;
/*
@@ -108,7 +119,8 @@ void Shm_Get_configuration(
BSP_shm_cfgtbl.poll_intr = INTR_MODE;
BSP_shm_cfgtbl.Intr.address =
(vol_u32 *) &(LEON3_IrqCtrl_Regs->force[LEON3_Cpu_Index]);
- BSP_shm_cfgtbl.Intr.value = 1 << LEON3_MP_IRQ ;
+ if (BSP_shm_cfgtbl.Intr.value == 0)
+ BSP_shm_cfgtbl.Intr.value = 1 << LEON3_MP_IRQ; /* Use default MP-IRQ */
BSP_shm_cfgtbl.Intr.length = 4;
if (LEON3_Cpu_Index == 0) {