bsps/arm: Add .nocache section

This section can be use to provide a cache coherent memory area via
rtems_cache_coherent_add_area().
This commit is contained in:
Sebastian Huber
2014-11-25 08:40:20 +01:00
parent 038faca160
commit cbc433c7a2
56 changed files with 136 additions and 184 deletions

View File

@@ -47,7 +47,6 @@ include_bsp_HEADERS += ../shared/include/arm-gic-regs.h
include_bsp_HEADERS += ../shared/include/arm-gic-tm27.h include_bsp_HEADERS += ../shared/include/arm-gic-tm27.h
include_bsp_HEADERS += ../shared/include/arm-release-id.h include_bsp_HEADERS += ../shared/include/arm-release-id.h
include_bsp_HEADERS += include/irq.h include_bsp_HEADERS += include/irq.h
include_bsp_HEADERS += include/nocache-heap.h
# Altera hwlib # Altera hwlib
include_bsp_HEADERS += hwlib/include/alt_16550_uart.h include_bsp_HEADERS += hwlib/include/alt_16550_uart.h
@@ -171,7 +170,6 @@ libbsp_a_SOURCES += ../shared/arm-cp15-set-ttb-entries.c
libbsp_a_SOURCES += startup/bspreset.c libbsp_a_SOURCES += startup/bspreset.c
libbsp_a_SOURCES += startup/bspstart.c libbsp_a_SOURCES += startup/bspstart.c
libbsp_a_SOURCES += startup/bspstarthooks.c libbsp_a_SOURCES += startup/bspstarthooks.c
libbsp_a_SOURCES += startup/nocache-heap.c
libbsp_a_SOURCES += startup/mmu-config.c libbsp_a_SOURCES += startup/mmu-config.c
if HAS_SMP if HAS_SMP
libbsp_a_SOURCES += ../shared/arm-a9mpcore-smp.c libbsp_a_SOURCES += ../shared/arm-a9mpcore-smp.c

View File

@@ -1,55 +0,0 @@
/**
* @file
*
* @brief Heap handling for uncached RAM
*/
/*
* Copyright (c) 2013 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 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.org/license/LICENSE.
*/
#ifndef NOCACHE_HEAP_H_
#define NOCACHE_HEAP_H_
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** @brief Initialize nocache heap.
*
* Initializes a heap for uncached RAM
*/
void altera_cyclone_v_nocache_init_heap( void );
/** @brief Nocache alloc.
*
* Allocate memory from uncached heap.
* @param size Number of bytes to be allocated.
* @returns Pointer to the allocated memory.
*/
void *altera_cyclone_v_nocache_malloc( const size_t size );
/** @brief Nocache free.
*
* Release memory from uncached heap.
* @param ptr Address of the memory to be released.
*/
void altera_cyclone_v_nocache_free( void *ptr );
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* NOCACHE_HEAP_H_ */

View File

@@ -38,7 +38,6 @@
#include <bsp/hwlib.h> #include <bsp/hwlib.h>
#include <bsp/alt_clock_manager.h> #include <bsp/alt_clock_manager.h>
#include <bsp/alt_generalpurpose_io.h> #include <bsp/alt_generalpurpose_io.h>
#include <bsp/nocache-heap.h>
#include "socal/alt_rstmgr.h" #include "socal/alt_rstmgr.h"
#include "socal/alt_sysmgr.h" #include "socal/alt_sysmgr.h"
#include "socal/hps.h" #include "socal/hps.h"
@@ -1032,7 +1031,7 @@ static int network_if_mem_alloc_nocache(
assert( memory != NULL ); assert( memory != NULL );
if ( memory != NULL ) { if ( memory != NULL ) {
*memory = altera_cyclone_v_nocache_malloc( size ); *memory = rtems_cache_coherent_allocate( size, 0, 0 );
if ( *memory != NULL ) { if ( *memory != NULL ) {
eno = 0; eno = 0;
@@ -1057,18 +1056,11 @@ static int network_if_mem_free_nocache(
void *arg, void *arg,
void *memory ) void *memory )
{ {
int eno = EINVAL;
(void) arg; (void) arg;
assert( memory != NULL ); free( memory );
if ( memory != NULL ) { return 0;
altera_cyclone_v_nocache_free( memory );
eno = 0;
}
return eno;
} }
/** /**

View File

@@ -135,10 +135,6 @@ $(PROJECT_INCLUDE)/bsp/irq.h: include/irq.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
$(PROJECT_INCLUDE)/bsp/nocache-heap.h: include/nocache-heap.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/nocache-heap.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/nocache-heap.h
$(PROJECT_INCLUDE)/bsp/alt_16550_uart.h: hwlib/include/alt_16550_uart.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) $(PROJECT_INCLUDE)/bsp/alt_16550_uart.h: hwlib/include/alt_16550_uart.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/alt_16550_uart.h $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/alt_16550_uart.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/alt_16550_uart.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/alt_16550_uart.h

View File

@@ -15,11 +15,14 @@
#include <bsp/bootcard.h> #include <bsp/bootcard.h>
#include <bsp/arm-a9mpcore-clock.h> #include <bsp/arm-a9mpcore-clock.h>
#include <bsp/irq-generic.h> #include <bsp/irq-generic.h>
#include <bsp/nocache-heap.h> #include <bsp/linker-symbols.h>
void bsp_start( void ) void bsp_start( void )
{ {
a9mpcore_clock_initialize_early(); a9mpcore_clock_initialize_early();
bsp_interrupt_initialize(); bsp_interrupt_initialize();
altera_cyclone_v_nocache_init_heap(); rtems_cache_coherent_add_area(
bsp_nocache_heap_begin,
(uintptr_t) bsp_nocache_heap_size
);
} }

View File

@@ -13,6 +13,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_WORK", RAM); REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096; bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096;
bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024; bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;

View File

@@ -4,15 +4,4 @@ MEMORY {
RAM : ORIGIN = 0x00300000, LENGTH = 1024M - 1M - 1M - 1M RAM : ORIGIN = 0x00300000, LENGTH = 1024M - 1M - 1M - 1M
} }
SECTIONS {
.nocache (NOLOAD) : {
bsp_section_nocache_begin = .;
*(SORT(.bsp_nocache*))
bsp_section_nocache_end = .;
} > NOCACHE AT > NOCACHE
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;
}
INCLUDE linkcmds.altcycv INCLUDE linkcmds.altcycv

View File

@@ -14,16 +14,9 @@
#include <bsp/arm-cp15-start.h> #include <bsp/arm-cp15-start.h>
LINKER_SYMBOL(bsp_section_nocache_end);
LINKER_SYMBOL(bsp_section_nocache_begin);
const arm_cp15_start_section_config arm_cp15_start_mmu_config_table[] = { const arm_cp15_start_section_config arm_cp15_start_mmu_config_table[] = {
ARMV7_CP15_START_DEFAULT_SECTIONS, ARMV7_CP15_START_DEFAULT_SECTIONS,
{ { /* Periphery area */
.begin = (uint32_t) bsp_section_nocache_begin,
.end = (uint32_t) bsp_section_nocache_end,
.flags = ARMV7_MMU_DATA_READ_WRITE
}, { /* Periphery area */
.begin = 0xFC000000U, .begin = 0xFC000000U,
.end = 0x00000000U, .end = 0x00000000U,
.flags = ARMV7_MMU_DEVICE .flags = ARMV7_MMU_DEVICE

View File

@@ -1,89 +0,0 @@
/**
* @file
*
* @brief Heap handling for uncached RAM
*/
/*
* Copyright (c) 2013 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 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.org/license/LICENSE.
*/
#include <assert.h>
#include <bsp/linker-symbols.h>
#include <bsp/nocache-heap.h>
#include <rtems/score/heapimpl.h>
#include <rtems/score/apimutex.h>
/** @brief Uncached RAM pool
*
* Allocate the whole bsp_nocache for the nocache heap */
static char nocache_pool[1024 * 1024]
__attribute__( ( section( ".bsp_nocache" ) ) );
/** @brief Nocache heap
*
* Heap control for the uncached RAM heap */
static Heap_Control nocache_heap;
/** @brief Init nocache heap
*
* Constructor for the uncached RAM heap
* @returns 0 on succuss, error code from errno.h on failure
*/
void altera_cyclone_v_nocache_init_heap( void )
{
uintptr_t heap_status = 0;
heap_status = _Heap_Initialize(
&nocache_heap,
&nocache_pool[0],
sizeof( nocache_pool ),
0
);
assert( heap_status != 0 );
}
/** @brief Allocate uncached RAM
*
* Allocates RAM from the uncached heap
* @param size Number of bytes to be allocated
* @returns Pointer to the allocated RAM
*/
void *altera_cyclone_v_nocache_malloc( const size_t size )
{
void* ret = NULL;
_RTEMS_Lock_allocator();
ret = _Heap_Allocate( &nocache_heap, size );
_RTEMS_Unlock_allocator();
return ret;
}
/** @brief Free uncached RAM
*
* Releases RAM from the uncached heap
* @param ptr Address of the RAM to be released
*/
void altera_cyclone_v_nocache_free( void *ptr )
{
if ( ptr != NULL ) {
bool ok;
_RTEMS_Lock_allocator();
ok = _Heap_Free( &nocache_heap, ptr );
_RTEMS_Unlock_allocator();
assert( ok );
}
}

View File

@@ -30,6 +30,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_WORK", RAM); REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", RAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM);
bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096; bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096;
bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024; bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;

View File

@@ -19,6 +19,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM); REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM); REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM); REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
_ttbl_base = ORIGIN (SDRAM_MMU); _ttbl_base = ORIGIN (SDRAM_MMU);

View File

@@ -19,6 +19,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM); REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM); REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM); REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
_ttbl_base = ORIGIN (SDRAM_MMU); _ttbl_base = ORIGIN (SDRAM_MMU);

View File

@@ -19,6 +19,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM); REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM); REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM); REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
_ttbl_base = ORIGIN (SDRAM_MMU); _ttbl_base = ORIGIN (SDRAM_MMU);

View File

@@ -17,6 +17,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM); REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM); REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM); REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
bsp_vector_table_in_start_section = 1; bsp_vector_table_in_start_section = 1;

View File

@@ -17,5 +17,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_WORK", RAM); REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", RAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM);
INCLUDE linkcmds.armv4 INCLUDE linkcmds.armv4

View File

@@ -18,6 +18,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM); REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM); REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM); REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
_ttbl_base = ORIGIN (SDRAM_MMU); _ttbl_base = ORIGIN (SDRAM_MMU);

View File

@@ -19,6 +19,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM); REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM); REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM); REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
_ttbl_base = ORIGIN (SDRAM_MMU); _ttbl_base = ORIGIN (SDRAM_MMU);

View File

@@ -24,5 +24,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -24,5 +24,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -24,5 +24,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -24,5 +24,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -20,6 +20,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024; bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align); bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);

View File

@@ -21,6 +21,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_AHB); REGION_ALIAS ("REGION_WORK", RAM_AHB);
REGION_ALIAS ("REGION_STACK", RAM_AHB); REGION_ALIAS ("REGION_STACK", RAM_AHB);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024; bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align); bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);

View File

@@ -23,6 +23,8 @@ REGION_ALIAS ("REGION_BSS", RAM_AHB1);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_ETH", RAM_AHB2); REGION_ALIAS ("REGION_ETH", RAM_AHB2);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024; bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align); bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);

View File

@@ -21,5 +21,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_INT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -21,5 +21,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_EXT); REGION_ALIAS ("REGION_STACK", RAM_EXT);
REGION_ALIAS ("REGION_NOCACHE", RAM_EXT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_EXT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -27,5 +27,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -27,5 +27,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -56,6 +56,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
lpc24xx_region_heap_0_begin = ORIGIN (RAM_ETH); lpc24xx_region_heap_0_begin = ORIGIN (RAM_ETH);
lpc24xx_region_heap_0_size = LENGTH (RAM_ETH); lpc24xx_region_heap_0_size = LENGTH (RAM_ETH);

View File

@@ -60,6 +60,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
lpc24xx_region_heap_0_begin = ORIGIN (RAM_ETH); lpc24xx_region_heap_0_begin = ORIGIN (RAM_ETH);
lpc24xx_region_heap_0_size = LENGTH (RAM_ETH); lpc24xx_region_heap_0_size = LENGTH (RAM_ETH);

View File

@@ -53,5 +53,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv4 INCLUDE linkcmds.armv4

View File

@@ -54,5 +54,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv4 INCLUDE linkcmds.armv4

View File

@@ -58,5 +58,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_BOOT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv4 INCLUDE linkcmds.armv4

View File

@@ -58,5 +58,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv4 INCLUDE linkcmds.armv4

View File

@@ -26,5 +26,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv4 INCLUDE linkcmds.armv4

View File

@@ -26,5 +26,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv4 INCLUDE linkcmds.armv4

View File

@@ -56,6 +56,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
lpc32xx_scratch_area = ORIGIN (RAM_SCRATCH); lpc32xx_scratch_area = ORIGIN (RAM_SCRATCH);

View File

@@ -56,6 +56,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
lpc32xx_scratch_area = ORIGIN (RAM_SCRATCH); lpc32xx_scratch_area = ORIGIN (RAM_SCRATCH);

View File

@@ -57,6 +57,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
lpc32xx_scratch_area = ORIGIN (RAM_SCRATCH); lpc32xx_scratch_area = ORIGIN (RAM_SCRATCH);

View File

@@ -57,6 +57,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096; bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096;
bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024; bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;

View File

@@ -20,6 +20,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", EWRAM);
REGION_ALIAS ("REGION_BSS", EWRAM); REGION_ALIAS ("REGION_BSS", EWRAM);
REGION_ALIAS ("REGION_WORK", EWRAM); REGION_ALIAS ("REGION_WORK", EWRAM);
REGION_ALIAS ("REGION_STACK", EWRAM); REGION_ALIAS ("REGION_STACK", EWRAM);
REGION_ALIAS ("REGION_NOCACHE", EWRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", EWRAM);
__dtcm_top = ORIGIN (DTCM) + LENGTH (DTCM); __dtcm_top = ORIGIN (DTCM) + LENGTH (DTCM);
__irq_flags = __dtcm_top - 0x08; __irq_flags = __dtcm_top - 0x08;

View File

@@ -56,6 +56,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_WORK", RAM); REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", RAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM);
bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096; bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096;
bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024; bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;

View File

@@ -19,6 +19,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_WORK", RAM); REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", RAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM);
bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096; bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096;
bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024; bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;

View File

@@ -18,5 +18,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM); REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM); REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM); REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
INCLUDE linkcmds.armv4 INCLUDE linkcmds.armv4

View File

@@ -80,6 +80,10 @@ typedef struct {
.begin = (uint32_t) bsp_section_stack_begin, \ .begin = (uint32_t) bsp_section_stack_begin, \
.end = (uint32_t) bsp_section_stack_end, \ .end = (uint32_t) bsp_section_stack_end, \
.flags = ARMV7_MMU_DATA_READ_WRITE_CACHED \ .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 BSP_START_DATA_SECTION extern const arm_cp15_start_section_config

View File

@@ -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 * embedded brains GmbH
* Dornierstr. 4 * Dornierstr. 4
@@ -113,6 +113,12 @@ LINKER_SYMBOL(bsp_section_stack_begin)
LINKER_SYMBOL(bsp_section_stack_end) LINKER_SYMBOL(bsp_section_stack_end)
LINKER_SYMBOL(bsp_section_stack_size) 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_begin)
LINKER_SYMBOL(bsp_vector_table_end) LINKER_SYMBOL(bsp_vector_table_end)
LINKER_SYMBOL(bsp_vector_table_size) 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_base)
LINKER_SYMBOL(bsp_translation_table_end) 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_TEXT_SECTION __attribute__((section(".bsp_fast_text")))
#define BSP_FAST_DATA_SECTION __attribute__((section(".bsp_fast_data"))) #define BSP_FAST_DATA_SECTION __attribute__((section(".bsp_fast_data")))
#define BSP_NOCACHE_SECTION __attribute__((section(".bsp_nocache")))
LINKER_SYMBOL(bsp_processor_count) LINKER_SYMBOL(bsp_processor_count)
/** @} */ /** @} */

View File

@@ -397,6 +397,19 @@ SECTIONS {
} > REGION_STACK AT > REGION_STACK } > REGION_STACK AT > REGION_STACK
bsp_section_stack_size = bsp_section_stack_end - bsp_section_stack_begin; 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 */ /* FIXME */
RamBase = ORIGIN (REGION_WORK); RamBase = ORIGIN (REGION_WORK);
RamSize = LENGTH (REGION_WORK); RamSize = LENGTH (REGION_WORK);

View File

@@ -18,6 +18,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM); REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM); REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM); REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
_ttbl_base = ORIGIN (SDRAM_MMU); _ttbl_base = ORIGIN (SDRAM_MMU);

View File

@@ -18,5 +18,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -18,5 +18,7 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
INCLUDE linkcmds.armv7m INCLUDE linkcmds.armv7m

View File

@@ -20,6 +20,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", ROM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024; bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align); bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);

View File

@@ -21,6 +21,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_INT);
REGION_ALIAS ("REGION_BSS", RAM_INT); REGION_ALIAS ("REGION_BSS", RAM_INT);
REGION_ALIAS ("REGION_WORK", RAM_INT); REGION_ALIAS ("REGION_WORK", RAM_INT);
REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_STACK", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE", RAM_INT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT);
bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024; bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align); bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);

View File

@@ -20,6 +20,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM_EXT);
REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_BSS", RAM_EXT);
REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT);
REGION_ALIAS ("REGION_STACK", RAM_EXT); REGION_ALIAS ("REGION_STACK", RAM_EXT);
REGION_ALIAS ("REGION_NOCACHE", RAM_EXT);
REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_EXT);
bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024; bsp_stack_main_size = DEFINED (bsp_stack_main_size) ? bsp_stack_main_size : 1024;
bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align); bsp_stack_main_size = ALIGN (bsp_stack_main_size, bsp_stack_align);

View File

@@ -77,6 +77,9 @@ RTEMS_BSPOPTS_SET([BSP_ZYNQ_RAM_LENGTH],[xilinx_zynq_zedboard],[512M])
RTEMS_BSPOPTS_SET([BSP_ZYNQ_RAM_LENGTH],[*],[256M]) RTEMS_BSPOPTS_SET([BSP_ZYNQ_RAM_LENGTH],[*],[256M])
RTEMS_BSPOPTS_HELP([BSP_ZYNQ_RAM_LENGTH],[override a BSP's default RAM length]) RTEMS_BSPOPTS_HELP([BSP_ZYNQ_RAM_LENGTH],[override a BSP's default RAM length])
RTEMS_BSPOPTS_SET([BSP_ZYNQ_NOCACHE_LENGTH],[*],[1M])
RTEMS_BSPOPTS_HELP([BSP_ZYNQ_NOCACHE_LENGTH],[length of nocache RAM region])
AS_IF([test "x${RTEMS_BSP}" == xxilinx_zynq_a9_qemu], AS_IF([test "x${RTEMS_BSP}" == xxilinx_zynq_a9_qemu],
[ZYNQ_RAM_ORIGIN="0x00000000" [ZYNQ_RAM_ORIGIN="0x00000000"
ZYNQ_RAM_MMU="0x0fffc000" ZYNQ_RAM_MMU="0x0fffc000"
@@ -133,6 +136,7 @@ ZYNQ_LINKCMD([ZYNQ_RAM_MMU],[MMU region origin],[${ZYNQ_RAM_MMU}])
ZYNQ_LINKCMD([ZYNQ_RAM_MMU_LENGTH],[MMU region length],[${ZYNQ_RAM_MMU_LENGTH}]) ZYNQ_LINKCMD([ZYNQ_RAM_MMU_LENGTH],[MMU region length],[${ZYNQ_RAM_MMU_LENGTH}])
ZYNQ_LINKCMD([ZYNQ_RAM_ORIGIN_AVAILABLE],[origin of available RAM],[${ZYNQ_RAM_ORIGIN_AVAILABLE}]) ZYNQ_LINKCMD([ZYNQ_RAM_ORIGIN_AVAILABLE],[origin of available RAM],[${ZYNQ_RAM_ORIGIN_AVAILABLE}])
ZYNQ_LINKCMD([ZYNQ_RAM_LENGTH_AVAILABLE],[length of available RAM],[${ZYNQ_RAM_LENGTH_AVAILABLE}]) ZYNQ_LINKCMD([ZYNQ_RAM_LENGTH_AVAILABLE],[length of available RAM],[${ZYNQ_RAM_LENGTH_AVAILABLE}])
ZYNQ_LINKCMD([ZYNQ_RAM_NOCACHE_LENGTH],[length of nocache RAM region],[${BSP_ZYNQ_NOCACHE_LENGTH}])
ZYNQ_LINKCMD([ZYNQ_RAM_INT_0_ORIGIN],[internal 0 RAM region origin],[${ZYNQ_RAM_INT_0_ORIGIN}]) ZYNQ_LINKCMD([ZYNQ_RAM_INT_0_ORIGIN],[internal 0 RAM region origin],[${ZYNQ_RAM_INT_0_ORIGIN}])
ZYNQ_LINKCMD([ZYNQ_RAM_INT_0_LENGTH],[internal 0 RAM region length],[${ZYNQ_RAM_INT_0_LENGTH}]) ZYNQ_LINKCMD([ZYNQ_RAM_INT_0_LENGTH],[internal 0 RAM region length],[${ZYNQ_RAM_INT_0_LENGTH}])
ZYNQ_LINKCMD([ZYNQ_RAM_INT_1_ORIGIN],[internal 1 RAM region origin],[${ZYNQ_RAM_INT_1_ORIGIN}]) ZYNQ_LINKCMD([ZYNQ_RAM_INT_1_ORIGIN],[internal 1 RAM region origin],[${ZYNQ_RAM_INT_1_ORIGIN}])

View File

@@ -16,6 +16,7 @@
#include <bsp/bootcard.h> #include <bsp/bootcard.h>
#include <bsp/arm-a9mpcore-clock.h> #include <bsp/arm-a9mpcore-clock.h>
#include <bsp/irq-generic.h> #include <bsp/irq-generic.h>
#include <bsp/linker-symbols.h>
__attribute__ ((weak)) uint32_t zynq_clock_cpu_1x(void) __attribute__ ((weak)) uint32_t zynq_clock_cpu_1x(void)
{ {
@@ -26,4 +27,8 @@ void bsp_start(void)
{ {
a9mpcore_clock_initialize_early(); a9mpcore_clock_initialize_early();
bsp_interrupt_initialize(); bsp_interrupt_initialize();
rtems_cache_coherent_add_area(
bsp_nocache_heap_begin,
(uintptr_t) bsp_nocache_heap_size
);
} }

View File

@@ -2,7 +2,8 @@ MEMORY {
RAM_INT_0 : ORIGIN = @ZYNQ_RAM_INT_0_ORIGIN@, LENGTH = @ZYNQ_RAM_INT_0_LENGTH@ RAM_INT_0 : ORIGIN = @ZYNQ_RAM_INT_0_ORIGIN@, LENGTH = @ZYNQ_RAM_INT_0_LENGTH@
RAM_INT_1 : ORIGIN = @ZYNQ_RAM_INT_1_ORIGIN@, LENGTH = @ZYNQ_RAM_INT_1_LENGTH@ RAM_INT_1 : ORIGIN = @ZYNQ_RAM_INT_1_ORIGIN@, LENGTH = @ZYNQ_RAM_INT_1_LENGTH@
RAM_MMU : ORIGIN = @ZYNQ_RAM_MMU@, LENGTH = @ZYNQ_RAM_MMU_LENGTH@ RAM_MMU : ORIGIN = @ZYNQ_RAM_MMU@, LENGTH = @ZYNQ_RAM_MMU_LENGTH@
RAM : ORIGIN = @ZYNQ_RAM_ORIGIN_AVAILABLE@, LENGTH = @ZYNQ_RAM_LENGTH_AVAILABLE@ RAM : ORIGIN = @ZYNQ_RAM_ORIGIN_AVAILABLE@, LENGTH = @ZYNQ_RAM_LENGTH_AVAILABLE@ - @ZYNQ_RAM_NOCACHE_LENGTH@
NOCACHE : ORIGIN = @ZYNQ_RAM_ORIGIN_AVAILABLE@ + @ZYNQ_RAM_LENGTH_AVAILABLE@ - @ZYNQ_RAM_NOCACHE_LENGTH@, LENGTH = @ZYNQ_RAM_NOCACHE_LENGTH@
} }
bsp_processor_count = DEFINED (bsp_processor_count) ? bsp_processor_count : @ZYNQ_CPUS@; bsp_processor_count = DEFINED (bsp_processor_count) ? bsp_processor_count : @ZYNQ_CPUS@;
@@ -22,6 +23,8 @@ REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_BSS", RAM);
REGION_ALIAS ("REGION_WORK", RAM); REGION_ALIAS ("REGION_WORK", RAM);
REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_STACK", RAM);
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096; bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096;
bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024; bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;