From cbc433c7a25dbe19414f70edc64f9de1f630a117 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 25 Nov 2014 08:40:20 +0100 Subject: bsps/arm: Add .nocache section This section can be use to provide a cache coherent memory area via rtems_cache_coherent_add_area(). --- c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h | 4 ++++ c/src/lib/libbsp/arm/shared/include/linker-symbols.h | 14 +++++++++++++- c/src/lib/libbsp/arm/shared/startup/linkcmds.base | 13 +++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) (limited to 'c/src/lib/libbsp/arm/shared') diff --git a/c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h b/c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h index 7d5fd0fdf1..c70ebf9570 100644 --- a/c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h +++ b/c/src/lib/libbsp/arm/shared/include/arm-cp15-start.h @@ -80,6 +80,10 @@ typedef struct { .begin = (uint32_t) bsp_section_stack_begin, \ .end = (uint32_t) bsp_section_stack_end, \ .flags = ARMV7_MMU_DATA_READ_WRITE_CACHED \ + }, { \ + .begin = (uint32_t) bsp_section_nocache_begin, \ + .end = (uint32_t) bsp_section_nocache_end, \ + .flags = ARMV7_MMU_DEVICE \ } BSP_START_DATA_SECTION extern const arm_cp15_start_section_config diff --git a/c/src/lib/libbsp/arm/shared/include/linker-symbols.h b/c/src/lib/libbsp/arm/shared/include/linker-symbols.h index ec7fed2005..8bfa5d172d 100644 --- a/c/src/lib/libbsp/arm/shared/include/linker-symbols.h +++ b/c/src/lib/libbsp/arm/shared/include/linker-symbols.h @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2008-2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2008-2014 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -113,6 +113,12 @@ LINKER_SYMBOL(bsp_section_stack_begin) LINKER_SYMBOL(bsp_section_stack_end) LINKER_SYMBOL(bsp_section_stack_size) +LINKER_SYMBOL(bsp_section_nocache_begin) +LINKER_SYMBOL(bsp_section_nocache_end) +LINKER_SYMBOL(bsp_section_nocache_size) +LINKER_SYMBOL(bsp_section_nocache_load_begin) +LINKER_SYMBOL(bsp_section_nocache_load_end) + LINKER_SYMBOL(bsp_vector_table_begin) LINKER_SYMBOL(bsp_vector_table_end) LINKER_SYMBOL(bsp_vector_table_size) @@ -124,10 +130,16 @@ LINKER_SYMBOL(bsp_start_vector_table_size) LINKER_SYMBOL(bsp_translation_table_base) LINKER_SYMBOL(bsp_translation_table_end) +LINKER_SYMBOL(bsp_nocache_heap_begin) +LINKER_SYMBOL(bsp_nocache_heap_end) +LINKER_SYMBOL(bsp_nocache_heap_size) + #define BSP_FAST_TEXT_SECTION __attribute__((section(".bsp_fast_text"))) #define BSP_FAST_DATA_SECTION __attribute__((section(".bsp_fast_data"))) +#define BSP_NOCACHE_SECTION __attribute__((section(".bsp_nocache"))) + LINKER_SYMBOL(bsp_processor_count) /** @} */ diff --git a/c/src/lib/libbsp/arm/shared/startup/linkcmds.base b/c/src/lib/libbsp/arm/shared/startup/linkcmds.base index 268e88a858..8a653e9337 100644 --- a/c/src/lib/libbsp/arm/shared/startup/linkcmds.base +++ b/c/src/lib/libbsp/arm/shared/startup/linkcmds.base @@ -397,6 +397,19 @@ SECTIONS { } > REGION_STACK AT > REGION_STACK bsp_section_stack_size = bsp_section_stack_end - bsp_section_stack_begin; + .nocache : ALIGN_WITH_INPUT { + bsp_section_nocache_begin = .; + *(SORT(.bsp_nocache*)) + bsp_nocache_heap_begin = .; + . += ORIGIN (REGION_NOCACHE) + LENGTH (REGION_NOCACHE) - ABSOLUTE (.); + bsp_nocache_heap_end = .; + bsp_section_nocache_end = .; + } > REGION_NOCACHE AT > REGION_NOCACHE_LOAD + bsp_nocache_heap_size = bsp_nocache_heap_end - bsp_nocache_heap_begin; + bsp_section_nocache_size = bsp_section_nocache_end - bsp_section_nocache_begin; + bsp_section_nocache_load_begin = LOADADDR (.nocache); + bsp_section_nocache_load_end = bsp_section_nocache_load_begin + bsp_section_nocache_size; + /* FIXME */ RamBase = ORIGIN (REGION_WORK); RamSize = LENGTH (REGION_WORK); -- cgit v1.2.3