forked from Imagelibrary/rtems
bsps/powerpc: Add load section for .nocache
This commit is contained in:
@@ -22,5 +22,6 @@ REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
|||||||
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM);
|
REGION_ALIAS ("REGION_STACK", RAM);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
|
||||||
|
|
||||||
INCLUDE linkcmds.mpc55xx
|
INCLUDE linkcmds.mpc55xx
|
||||||
|
|||||||
@@ -22,5 +22,6 @@ REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
|||||||
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM);
|
REGION_ALIAS ("REGION_STACK", RAM);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
|
||||||
|
|
||||||
INCLUDE linkcmds.mpc55xx
|
INCLUDE linkcmds.mpc55xx
|
||||||
|
|||||||
@@ -22,5 +22,6 @@ REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
|||||||
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM);
|
REGION_ALIAS ("REGION_STACK", RAM);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", ROM);
|
||||||
|
|
||||||
INCLUDE linkcmds.mpc55xx
|
INCLUDE linkcmds.mpc55xx
|
||||||
|
|||||||
@@ -31,5 +31,6 @@ REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT);
|
|||||||
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
REGION_ALIAS ("REGION_WORK", RAM_EXT);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM);
|
REGION_ALIAS ("REGION_STACK", RAM);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
|
||||||
|
|
||||||
INCLUDE linkcmds.mpc55xx
|
INCLUDE linkcmds.mpc55xx
|
||||||
|
|||||||
@@ -27,5 +27,6 @@ REGION_ALIAS ("REGION_RWEXTRA", RAM_0);
|
|||||||
REGION_ALIAS ("REGION_WORK", RAM_1);
|
REGION_ALIAS ("REGION_WORK", RAM_1);
|
||||||
REGION_ALIAS ("REGION_STACK", RAM_1);
|
REGION_ALIAS ("REGION_STACK", RAM_1);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
|
||||||
|
|
||||||
INCLUDE linkcmds.mpc55xx
|
INCLUDE linkcmds.mpc55xx
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2011 embedded brains GmbH. All rights reserved.
|
* Copyright (c) 2008-2012 embedded brains GmbH. All rights reserved.
|
||||||
*
|
*
|
||||||
* embedded brains GmbH
|
* embedded brains GmbH
|
||||||
* Obere Lagerstr. 30
|
* Obere Lagerstr. 30
|
||||||
@@ -23,6 +23,14 @@
|
|||||||
#include <bsp.h>
|
#include <bsp.h>
|
||||||
#include <bsp/start.h>
|
#include <bsp/start.h>
|
||||||
#include <bsp/mpc55xx-config.h>
|
#include <bsp/mpc55xx-config.h>
|
||||||
|
#include <bsp/linker-symbols.h>
|
||||||
|
|
||||||
|
/* This function is defined in start.S */
|
||||||
|
BSP_START_TEXT_SECTION void mpc55xx_start_load_section(
|
||||||
|
void *dst,
|
||||||
|
const void *src,
|
||||||
|
size_t n
|
||||||
|
);
|
||||||
|
|
||||||
static BSP_START_TEXT_SECTION void mpc55xx_start_mmu(void)
|
static BSP_START_TEXT_SECTION void mpc55xx_start_mmu(void)
|
||||||
{
|
{
|
||||||
@@ -53,6 +61,19 @@ static BSP_START_TEXT_SECTION void mpc55xx_start_internal_ram(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BSP_START_TEXT_SECTION void mpc55xx_start_load_nocache_section(void)
|
||||||
|
{
|
||||||
|
mpc55xx_start_load_section(
|
||||||
|
bsp_section_nocache_begin,
|
||||||
|
bsp_section_nocache_load_begin,
|
||||||
|
(size_t) bsp_section_nocache_size
|
||||||
|
);
|
||||||
|
rtems_cache_flush_multiple_data_lines(
|
||||||
|
bsp_section_nocache_begin,
|
||||||
|
(size_t) bsp_section_nocache_size
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
static BSP_START_TEXT_SECTION void mpc55xx_start_mode_change(void)
|
static BSP_START_TEXT_SECTION void mpc55xx_start_mode_change(void)
|
||||||
{
|
{
|
||||||
#ifdef MPC55XX_HAS_MODE_CONTROL
|
#ifdef MPC55XX_HAS_MODE_CONTROL
|
||||||
@@ -167,6 +188,7 @@ BSP_START_TEXT_SECTION void mpc55xx_start_early(void)
|
|||||||
mpc55xx_start_cache();
|
mpc55xx_start_cache();
|
||||||
#endif
|
#endif
|
||||||
mpc55xx_start_internal_ram();
|
mpc55xx_start_internal_ram();
|
||||||
|
mpc55xx_start_load_nocache_section();
|
||||||
mpc55xx_start_mmu();
|
mpc55xx_start_mmu();
|
||||||
mpc55xx_start_mode_change();
|
mpc55xx_start_mode_change();
|
||||||
mpc55xx_start_siu();
|
mpc55xx_start_siu();
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2011 embedded brains GmbH. All rights reserved.
|
* Copyright (c) 2008-2012 embedded brains GmbH. All rights reserved.
|
||||||
*
|
*
|
||||||
* embedded brains GmbH
|
* embedded brains GmbH
|
||||||
* Obere Lagerstr. 30
|
* Obere Lagerstr. 30
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <bspopts.h>
|
#include <bspopts.h>
|
||||||
|
#include <bsp/linker-symbols.h>
|
||||||
#include <libcpu/powerpc-utility.h>
|
#include <libcpu/powerpc-utility.h>
|
||||||
|
|
||||||
#if MPC55XX_CHIP_TYPE / 10 != 551
|
#if MPC55XX_CHIP_TYPE / 10 != 551
|
||||||
@@ -41,20 +41,12 @@
|
|||||||
.extern __eabi
|
.extern __eabi
|
||||||
.extern boot_card
|
.extern boot_card
|
||||||
.extern bsp_ram_start
|
.extern bsp_ram_start
|
||||||
.extern bsp_section_data_begin
|
|
||||||
.extern bsp_section_data_load_begin
|
|
||||||
.extern bsp_section_data_size
|
|
||||||
.extern bsp_section_fast_data_begin
|
|
||||||
.extern bsp_section_fast_data_load_begin
|
|
||||||
.extern bsp_section_fast_data_size
|
|
||||||
.extern bsp_section_fast_text_begin
|
|
||||||
.extern bsp_section_fast_text_load_begin
|
|
||||||
.extern bsp_section_fast_text_size
|
|
||||||
.extern mpc55xx_start_config_mmu_early
|
.extern mpc55xx_start_config_mmu_early
|
||||||
.extern mpc55xx_start_config_mmu_early_count
|
.extern mpc55xx_start_config_mmu_early_count
|
||||||
.extern mpc55xx_start_early
|
.extern mpc55xx_start_early
|
||||||
|
|
||||||
.globl _start
|
.globl _start
|
||||||
|
.globl mpc55xx_start_load_section
|
||||||
.globl mpc55xx_start_mmu_apply_config
|
.globl mpc55xx_start_mmu_apply_config
|
||||||
|
|
||||||
#ifdef MPC55XX_BOOTFLAGS
|
#ifdef MPC55XX_BOOTFLAGS
|
||||||
@@ -225,15 +217,15 @@ zero_intermediate_stack_loop:
|
|||||||
LA r3, bsp_section_fast_text_begin
|
LA r3, bsp_section_fast_text_begin
|
||||||
LA r4, bsp_section_fast_text_load_begin
|
LA r4, bsp_section_fast_text_load_begin
|
||||||
LA r5, bsp_section_fast_text_size
|
LA r5, bsp_section_fast_text_size
|
||||||
bl load_section
|
bl mpc55xx_start_load_section
|
||||||
LA r3, bsp_section_fast_data_begin
|
LA r3, bsp_section_fast_data_begin
|
||||||
LA r4, bsp_section_fast_data_load_begin
|
LA r4, bsp_section_fast_data_load_begin
|
||||||
LA r5, bsp_section_fast_data_size
|
LA r5, bsp_section_fast_data_size
|
||||||
bl load_section
|
bl mpc55xx_start_load_section
|
||||||
LA r3, bsp_section_data_begin
|
LA r3, bsp_section_data_begin
|
||||||
LA r4, bsp_section_data_load_begin
|
LA r4, bsp_section_data_load_begin
|
||||||
LA r5, bsp_section_data_size
|
LA r5, bsp_section_data_size
|
||||||
bl load_section
|
bl mpc55xx_start_load_section
|
||||||
|
|
||||||
/* Set up EABI and SYSV environment */
|
/* Set up EABI and SYSV environment */
|
||||||
bl __eabi
|
bl __eabi
|
||||||
@@ -270,7 +262,7 @@ mmu_init_loop:
|
|||||||
bdnz mmu_init_loop
|
bdnz mmu_init_loop
|
||||||
blr
|
blr
|
||||||
|
|
||||||
load_section:
|
mpc55xx_start_load_section:
|
||||||
cmpw cr7, r3, r4
|
cmpw cr7, r3, r4
|
||||||
beqlr cr7
|
beqlr cr7
|
||||||
b memcpy
|
b memcpy
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ REGION_ALIAS ("REGION_BSS", HIGH);
|
|||||||
REGION_ALIAS ("REGION_RWEXTRA", HIGH);
|
REGION_ALIAS ("REGION_RWEXTRA", HIGH);
|
||||||
REGION_ALIAS ("REGION_WORK", HIGH);
|
REGION_ALIAS ("REGION_WORK", HIGH);
|
||||||
REGION_ALIAS ("REGION_STACK", HIGH);
|
REGION_ALIAS ("REGION_STACK", HIGH);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", HIGH);
|
REGION_ALIAS ("REGION_NOCACHE", NIRVANA);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NIRVANA);
|
||||||
|
|
||||||
bsp_section_robarrier_align = 0x1000000;
|
bsp_section_robarrier_align = 0x1000000;
|
||||||
bsp_section_rwbarrier_align = 0x1000000;
|
bsp_section_rwbarrier_align = 0x1000000;
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ REGION_ALIAS ("REGION_BSS", RAM);
|
|||||||
REGION_ALIAS ("REGION_RWEXTRA", RAM);
|
REGION_ALIAS ("REGION_RWEXTRA", 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", NIRVANA);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NIRVANA);
|
||||||
|
|
||||||
bsp_section_robarrier_align = 0x1000000;
|
bsp_section_robarrier_align = 0x1000000;
|
||||||
bsp_section_rwbarrier_align = 0x1000000;
|
bsp_section_rwbarrier_align = 0x1000000;
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ REGION_ALIAS ("REGION_BSS", HIGH);
|
|||||||
REGION_ALIAS ("REGION_RWEXTRA", HIGH);
|
REGION_ALIAS ("REGION_RWEXTRA", HIGH);
|
||||||
REGION_ALIAS ("REGION_WORK", HIGH);
|
REGION_ALIAS ("REGION_WORK", HIGH);
|
||||||
REGION_ALIAS ("REGION_STACK", HIGH);
|
REGION_ALIAS ("REGION_STACK", HIGH);
|
||||||
REGION_ALIAS ("REGION_NOCACHE", HIGH);
|
REGION_ALIAS ("REGION_NOCACHE", NIRVANA);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NIRVANA);
|
||||||
|
|
||||||
bsp_section_robarrier_align = 0x1000000;
|
bsp_section_robarrier_align = 0x1000000;
|
||||||
bsp_section_rwbarrier_align = 0x1000000;
|
bsp_section_rwbarrier_align = 0x1000000;
|
||||||
|
|||||||
@@ -96,6 +96,8 @@ LINKER_SYMBOL(bsp_section_stack_size)
|
|||||||
LINKER_SYMBOL(bsp_section_nocache_begin)
|
LINKER_SYMBOL(bsp_section_nocache_begin)
|
||||||
LINKER_SYMBOL(bsp_section_nocache_end)
|
LINKER_SYMBOL(bsp_section_nocache_end)
|
||||||
LINKER_SYMBOL(bsp_section_nocache_size)
|
LINKER_SYMBOL(bsp_section_nocache_size)
|
||||||
|
LINKER_SYMBOL(bsp_section_nocache_load_begin)
|
||||||
|
LINKER_SYMBOL(bsp_section_nocache_load_end)
|
||||||
|
|
||||||
#define BSP_FAST_TEXT_SECTION __attribute__((section(".bsp_fast_text")))
|
#define BSP_FAST_TEXT_SECTION __attribute__((section(".bsp_fast_text")))
|
||||||
|
|
||||||
|
|||||||
@@ -328,8 +328,10 @@ SECTIONS {
|
|||||||
bsp_section_nocache_begin = .;
|
bsp_section_nocache_begin = .;
|
||||||
*(.bsp_nocache)
|
*(.bsp_nocache)
|
||||||
bsp_section_nocache_end = .;
|
bsp_section_nocache_end = .;
|
||||||
} > REGION_NOCACHE AT > REGION_NOCACHE
|
} > REGION_NOCACHE AT > REGION_NOCACHE_LOAD
|
||||||
bsp_section_nocache_size = bsp_section_nocache_end - bsp_section_nocache_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);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ REGION_ALIAS ("REGION_BSS", RAM);
|
|||||||
REGION_ALIAS ("REGION_RWEXTRA", RAM);
|
REGION_ALIAS ("REGION_RWEXTRA", 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", NIRVANA);
|
||||||
|
REGION_ALIAS ("REGION_NOCACHE_LOAD", NIRVANA);
|
||||||
|
|
||||||
INCLUDE linkcmds.base
|
INCLUDE linkcmds.base
|
||||||
|
|||||||
Reference in New Issue
Block a user