diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-12-13 06:18:36 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-02-04 06:06:41 +0100 |
commit | eea21eaca117ecd98afea164e1808d6530ef487f (patch) | |
tree | ca4e15da28b71a5ecca5fc357798261a39b3f250 /bsps/shared/start/bspgetworkarea-default.c | |
parent | bsps: Remove uses of BSP_GET_WORK_AREA_DEBUG (diff) | |
download | rtems-eea21eaca117ecd98afea164e1808d6530ef487f.tar.bz2 |
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.c | 46 |
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; } |