diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-09-28 15:36:26 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-25 14:54:06 +0200 |
commit | da89075944aa41b1c7d4dc4baed338a3f68ba6d6 (patch) | |
tree | 831c529a7c80bae9e858d6ffe77da0f74df62d3c /c | |
parent | bsps: Add bsp_work_area_initialize_with_table() (diff) | |
download | rtems-da89075944aa41b1c7d4dc4baed338a3f68ba6d6.tar.bz2 |
bsp/mpc55xx: Add custom work area init
Diffstat (limited to 'c')
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); |