summaryrefslogtreecommitdiff
path: root/bsps/shared/start/bspgetworkarea-default.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-12-13 06:18:36 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-02-04 06:06:41 +0100
commiteea21eaca117ecd98afea164e1808d6530ef487f (patch)
treeca4e15da28b71a5ecca5fc357798261a39b3f250 /bsps/shared/start/bspgetworkarea-default.c
parent07e2eacf8977121ef342e2d3c323ea6c997307b8 (diff)
bsps: Rework work area initialization
The work area initialization was done by the BSP through bsp_work_area_initialize(). This approach predated the system initialization through the system initialization linker set. The workspace and C program heap were unconditionally initialized. The aim is to support RTEMS application configurations which do not need the workspace and C program heap. In these configurations, the workspace and C prgram heap should not get initialized. Change all bsp_work_area_initialize() to implement _Memory_Get() instead. Move the dirty memory, sbrk(), per-CPU data, workspace, and malloc() heap initialization into separate system initialization steps. This makes it also easier to test the individual initialization steps. This change adds a dependency to _Heap_Extend() to all BSPs. This dependency will be removed in a follow up change. Update #3838.
Diffstat (limited to 'bsps/shared/start/bspgetworkarea-default.c')
-rw-r--r--bsps/shared/start/bspgetworkarea-default.c46
1 files changed, 30 insertions, 16 deletions
diff --git a/bsps/shared/start/bspgetworkarea-default.c b/bsps/shared/start/bspgetworkarea-default.c
index 18d4063089..a7c4c04ee7 100644
--- a/bsps/shared/start/bspgetworkarea-default.c
+++ b/bsps/shared/start/bspgetworkarea-default.c
@@ -1,7 +1,7 @@
/**
* @file
*
- * This routine is an implementation of the bsp_work_area_initialize()
+ * This routine is an implementation of the _Memory_Get()
* that can be used by all BSPs following linkcmds conventions
* regarding heap, stack, and workspace allocation.
*/
@@ -33,23 +33,37 @@ extern char WorkAreaBase[];
* We may get the size information from U-Boot or the linker scripts.
*/
#ifdef USE_UBOOT
- #include <bsp/u-boot.h>
-#else
- extern char RamBase[];
- extern char RamSize[];
-#endif
+#include <bsp/u-boot.h>
+#include <rtems/sysinit.h>
+
+static Memory_Area _Memory_Areas[ 1 ];
-void bsp_work_area_initialize(void)
+static void bsp_memory_initialize( void )
{
- uintptr_t work_base = (uintptr_t) WorkAreaBase;
- uintptr_t ram_end;
+ char *end;
+
+ end = (char *) bsp_uboot_board_info.bi_memstart
+ + bsp_uboot_board_info.bi_memsize;
+ _Memory_Initialize( &_Memory_Areas[ 0 ], WorkAreaBase, end );
+}
- #ifdef USE_UBOOT
- ram_end = (uintptr_t) bsp_uboot_board_info.bi_memstart +
- bsp_uboot_board_info.bi_memsize;
- #else
- ram_end = (uintptr_t)RamBase + (uintptr_t)RamSize;
- #endif
+RTEMS_SYSINIT_ITEM(
+ bsp_memory_initialize,
+ RTEMS_SYSINIT_MEMORY,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+);
+#else /* !USE_UBOOT */
+extern char RamEnd[];
- bsp_work_area_initialize_default( (void *) work_base, ram_end - work_base );
+static Memory_Area _Memory_Areas[] = {
+ MEMORY_INITIALIZER(WorkAreaBase, RamEnd)
+};
+#endif /* USE_UBOOT */
+
+static const Memory_Information _Memory_Information =
+ MEMORY_INFORMATION_INITIALIZER( _Memory_Areas );
+
+const Memory_Information *_Memory_Get( void )
+{
+ return &_Memory_Information;
}