summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-09-28 15:36:26 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-10-25 14:54:06 +0200
commitda89075944aa41b1c7d4dc4baed338a3f68ba6d6 (patch)
tree831c529a7c80bae9e858d6ffe77da0f74df62d3c /c
parentbsps: Add bsp_work_area_initialize_with_table() (diff)
downloadrtems-da89075944aa41b1c7d4dc4baed338a3f68ba6d6.tar.bz2
bsp/mpc55xx: Add custom work area init
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am3
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c15
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspworkareainit.c49
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb2
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx17
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5643l_evb3
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_app2
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_boot2
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb2
9 files changed, 70 insertions, 25 deletions
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am b/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am
index ff8edbf0ca..44e1997df4 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am
@@ -64,12 +64,13 @@ libbsp_a_SOURCES += ../../shared/bspclean.c
libbsp_a_SOURCES += ../../shared/bsplibc.c
libbsp_a_SOURCES += ../../shared/bsppost.c
libbsp_a_SOURCES += ../../shared/bsppredriverhook.c
-libbsp_a_SOURCES += ../../shared/bspgetworkarea.c
+libbsp_a_SOURCES += ../../shared/bsppretaskinghook.c
libbsp_a_SOURCES += ../../shared/src/stackalloc.c
libbsp_a_SOURCES += ../shared/src/bsp-start-zero.S
libbsp_a_SOURCES += ../shared/src/memcpy.c
libbsp_a_SOURCES += ../shared/src/tictac.c
libbsp_a_SOURCES += startup/bspstart.c
+libbsp_a_SOURCES += startup/bspworkareainit.c
libbsp_a_SOURCES += startup/exc-vector-base.S
libbsp_a_SOURCES += startup/get-system-clock.c
libbsp_a_SOURCES += startup/reset.c
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c
index 9bffd453dc..314930a1c0 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspstart.c
@@ -41,8 +41,6 @@
#include <bsp/start.h>
#include <bsp/mpc55xx-config.h>
-extern Heap_Control *RTEMS_Malloc_Heap;
-
/* Symbols defined in linker command file */
LINKER_SYMBOL(mpc55xx_exc_vector_base);
@@ -142,16 +140,3 @@ void bsp_start(void)
mpc55xx_emios_initialize(MPC55XX_EMIOS_PRESCALER);
#endif
}
-
-void bsp_pretasking_hook(void)
-{
- #if MPC55XX_CHIP_FAMILY == 564
- _Heap_Extend(
- RTEMS_Malloc_Heap,
- bsp_section_rwextra_end,
- (uintptr_t) bsp_ram_end
- - (uintptr_t) bsp_section_rwextra_end,
- NULL
- );
- #endif
-}
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspworkareainit.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspworkareainit.c
new file mode 100644
index 0000000000..3b989db2bb
--- /dev/null
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/bspworkareainit.c
@@ -0,0 +1,49 @@
+/**
+ * @file
+ *
+ * @ingroup mpc55xx
+ */
+
+/*
+ * Copyright (c) 2012 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+#include <bsp.h>
+#include <bsp/bootcard.h>
+#include <bsp/linker-symbols.h>
+
+LINKER_SYMBOL(bsp_section_work_bonus_begin);
+LINKER_SYMBOL(bsp_section_work_bonus_size);
+
+void bsp_work_area_initialize(void)
+{
+ Heap_Area areas [] = {
+ {
+ bsp_section_work_begin,
+ (uintptr_t) bsp_section_work_size
+ }, {
+ bsp_section_work_bonus_begin,
+ (uintptr_t) bsp_section_work_bonus_size
+ }
+ };
+
+ #ifdef BSP_INTERRUPT_STACK_AT_WORK_AREA_BEGIN
+ areas [0].begin = (char *) areas [0].begin + Configuration.interrupt_stack_size;
+ areas [0].size -= Configuration.interrupt_stack_size;
+ #endif
+
+ bsp_work_area_initialize_with_table(
+ areas,
+ sizeof(areas) / sizeof(areas [0])
+ );
+}
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb
index 12c6389642..be6b82ba96 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb
@@ -18,7 +18,7 @@ REGION_ALIAS ("REGION_DATA", RAM);
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
-REGION_ALIAS ("REGION_WORK", RAM_EXT);
+REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx
index 1bfe8444ae..2c4e1e3f7b 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx
@@ -6,8 +6,17 @@ bsp_rom_start = ORIGIN (ROM);
bsp_rom_size = LENGTH (ROM);
bsp_rom_end = bsp_rom_start + bsp_rom_size;
-bsp_external_ram_start = ORIGIN (RAM_EXT);
-bsp_external_ram_size = LENGTH (RAM_EXT);
-bsp_external_ram_end = bsp_external_ram_start + bsp_external_ram_size;
-
INCLUDE linkcmds.base
+
+SECTIONS {
+ .work_bonus : {
+ /*
+ * This section will occupy the remaining RAM_EXT region and may
+ * contain parts of the RTEMS work space and heap.
+ */
+ bsp_section_work_bonus_begin = .;
+ . += ORIGIN (RAM_EXT) + LENGTH (RAM_EXT) - ABSOLUTE (.);
+ bsp_section_work_bonus_end = .;
+ } > RAM_EXT AT > RAM_EXT
+ bsp_section_work_bonus_size = bsp_section_work_bonus_end - bsp_section_work_bonus_begin;
+}
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5643l_evb b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5643l_evb
index f9d2dc010c..07d8f50ab7 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5643l_evb
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5643l_evb
@@ -2,10 +2,11 @@ MEMORY {
ROM : ORIGIN = 0x0, LENGTH = 1M
RAM : ORIGIN = 0x40000000, LENGTH = 64K
RAM_1 : ORIGIN = 0x50000000, LENGTH = 64K
- RAM_EXT : ORIGIN = 0x0, LENGTH = 0
NOCACHE : ORIGIN = 0x0, LENGTH = 0
}
+REGION_ALIAS ("RAM_EXT", RAM);
+
bsp_ram_1_start = ORIGIN (RAM_1);
bsp_ram_1_size = LENGTH (RAM_1);
bsp_ram_1_end = bsp_ram_1_start + bsp_ram_1_size;
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_app b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_app
index 662eeef772..d2da307778 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_app
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_app
@@ -20,7 +20,7 @@ REGION_ALIAS ("REGION_DATA", RAM);
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
-REGION_ALIAS ("REGION_WORK", RAM_EXT);
+REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_boot b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_boot
index 7fbcb2f7de..7ba011261e 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_boot
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674f_ecu508_boot
@@ -18,7 +18,7 @@ REGION_ALIAS ("REGION_DATA", RAM);
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
-REGION_ALIAS ("REGION_WORK", RAM_EXT);
+REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb
index 5925207d4c..7f59a076cd 100644
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb
+++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb
@@ -18,7 +18,7 @@ REGION_ALIAS ("REGION_DATA", RAM);
REGION_ALIAS ("REGION_DATA_LOAD", ROM);
REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
-REGION_ALIAS ("REGION_WORK", RAM_EXT);
+REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);