forked from Imagelibrary/rtems
2007-06-20 Joel Sherrill <joel.sherrill@oarcorp.com>
Add Embedded Planets EP5200 which is the same as the Freescale 5200Lite (a.k.a. IceCube) evaluation board. * Makefile.am: Add linkcmds.ep5200. Add -DMPC5200_BAPI_LIBC_HEADERS to remove some warnings in bestcomm. * preinstall.am: Add linkcmds.ep5200. * clock/clock.c: Correct math for prescaler/counter when bus speed is high enough to require multiple passes of loop. * console/console.c: Use same math for initial baud rate as when it is changed via ioctl. When HAS_UBOOT is defined, initialize console to the same baud as it was with U-Boot. * include/bsp.h: Add EP5200 and console boot baud support. * include/mpc5200.h: Spacing. * startup/bspstart.c: If HAS_UBOOT and SHOW_MORE_INIT_SETTINGS are both defined, dump the U-Boot BD info structure. * vectors/vectors.S: ep5200 cannot use vectors segment. When loading it, U-Boot freezes. Besides, U-Boot can automatically start the BSP so we do not have to run from board reset. * startup/linkcmds.ep5200: New file.
This commit is contained in:
@@ -1,3 +1,24 @@
|
|||||||
|
2007-06-20 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||||
|
|
||||||
|
Add Embedded Planets EP5200 which is the same as the Freescale
|
||||||
|
5200Lite (a.k.a. IceCube) evaluation board.
|
||||||
|
* Makefile.am: Add linkcmds.ep5200.
|
||||||
|
Add -DMPC5200_BAPI_LIBC_HEADERS to remove some warnings in bestcomm.
|
||||||
|
* preinstall.am: Add linkcmds.ep5200.
|
||||||
|
* clock/clock.c: Correct math for prescaler/counter when bus speed
|
||||||
|
is high enough to require multiple passes of loop.
|
||||||
|
* console/console.c: Use same math for initial baud rate as when it
|
||||||
|
is changed via ioctl. When HAS_UBOOT is defined, initialize console
|
||||||
|
to the same baud as it was with U-Boot.
|
||||||
|
* include/bsp.h: Add EP5200 and console boot baud support.
|
||||||
|
* include/mpc5200.h: Spacing.
|
||||||
|
* startup/bspstart.c: If HAS_UBOOT and SHOW_MORE_INIT_SETTINGS are
|
||||||
|
both defined, dump the U-Boot BD info structure.
|
||||||
|
* vectors/vectors.S: ep5200 cannot use vectors segment. When loading
|
||||||
|
it, U-Boot freezes. Besides, U-Boot can automatically start the BSP
|
||||||
|
so we do not have to run from board reset.
|
||||||
|
* startup/linkcmds.ep5200: New file.
|
||||||
|
|
||||||
2007-04-17 Ralf Corsépius <ralf.corsepius@rtems.org>
|
2007-04-17 Ralf Corsépius <ralf.corsepius@rtems.org>
|
||||||
|
|
||||||
* mscan/mscan.c: Use size_t for message sizes. Remove absurd type
|
* mscan/mscan.c: Use size_t for message sizes. Remove absurd type
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ project_lib_DATA = start.$(OBJEXT)
|
|||||||
|
|
||||||
dist_project_lib_DATA += startup/linkcmds
|
dist_project_lib_DATA += startup/linkcmds
|
||||||
dist_project_lib_DATA += startup/linkcmds.brs5l
|
dist_project_lib_DATA += startup/linkcmds.brs5l
|
||||||
|
dist_project_lib_DATA += startup/linkcmds.ep5200
|
||||||
dist_project_lib_DATA += startup/linkcmds.pm520
|
dist_project_lib_DATA += startup/linkcmds.pm520
|
||||||
|
|
||||||
noinst_PROGRAMS += bestcomm.rel
|
noinst_PROGRAMS += bestcomm.rel
|
||||||
@@ -51,7 +52,7 @@ bestcomm_rel_SOURCES = bestcomm/include/ppctypes.h \
|
|||||||
bestcomm/task_api/bestcomm_api_mem.h bestcomm/task_api/bestcomm_cntrl.h \
|
bestcomm/task_api/bestcomm_api_mem.h bestcomm/task_api/bestcomm_cntrl.h \
|
||||||
bestcomm/task_api/tasksetup_bdtable.h \
|
bestcomm/task_api/tasksetup_bdtable.h \
|
||||||
bestcomm/task_api/tasksetup_general.h
|
bestcomm/task_api/tasksetup_general.h
|
||||||
bestcomm_rel_CPPFLAGS = $(AM_CPPFLAGS)
|
bestcomm_rel_CPPFLAGS = $(AM_CPPFLAGS) -DMPC5200_BAPI_LIBC_HEADERS
|
||||||
bestcomm_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
|
bestcomm_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
|
||||||
|
|
||||||
noinst_PROGRAMS += clock.rel
|
noinst_PROGRAMS += clock.rel
|
||||||
@@ -111,7 +112,7 @@ include_bsp_HEADERS += vectors/vectors.h
|
|||||||
noinst_PROGRAMS += startup.rel
|
noinst_PROGRAMS += startup.rel
|
||||||
startup_rel_SOURCES = ../../shared/bspclean.c ../../shared/bsplibc.c \
|
startup_rel_SOURCES = ../../shared/bspclean.c ../../shared/bsplibc.c \
|
||||||
../../shared/bsppost.c startup/bspstart.c ../../shared/bootcard.c \
|
../../shared/bsppost.c startup/bspstart.c ../../shared/bootcard.c \
|
||||||
../../shared/sbrk.c \
|
../../shared/sbrk.c ../shared/uboot_dump_bdinfo.c \
|
||||||
../../shared/gnatinstallhandler.c startup/cpuinit.c start/start.S
|
../../shared/gnatinstallhandler.c startup/cpuinit.c start/start.S
|
||||||
startup_rel_CPPFLAGS = $(AM_CPPFLAGS)
|
startup_rel_CPPFLAGS = $(AM_CPPFLAGS)
|
||||||
startup_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
|
startup_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
|
||||||
|
|||||||
@@ -170,20 +170,19 @@ void mpc5200_init_gpt(uint32_t gpt_no)
|
|||||||
void mpc5200_set_gpt_count(uint32_t counter_value, uint32_t gpt_no)
|
void mpc5200_set_gpt_count(uint32_t counter_value, uint32_t gpt_no)
|
||||||
{
|
{
|
||||||
uint32_t prescaler_value = 1;
|
uint32_t prescaler_value = 1;
|
||||||
|
uint32_t counter = counter_value;
|
||||||
struct mpc5200_gpt *gpt = (struct mpc5200_gpt *)(&mpc5200.gpt[gpt_no]);
|
struct mpc5200_gpt *gpt = (struct mpc5200_gpt *)(&mpc5200.gpt[gpt_no]);
|
||||||
|
|
||||||
/* Calculate counter/prescaler value, e.g. IPB_Clock=33MHz -> Int. every 0,3 nsecs. - 130 secs.*/
|
/* Calculate counter/prescaler value, e.g. IPB_Clock=33MHz -> Int. every 0,3 nsecs. - 130 secs.*/
|
||||||
while((counter_value >= (1 << 16)) && (prescaler_value < (1 << 16)))
|
while((counter >= (1 << 16)) && (prescaler_value < (1 << 16)))
|
||||||
{
|
{
|
||||||
|
prescaler_value++;
|
||||||
prescaler_value++;
|
counter = counter_value / prescaler_value;
|
||||||
counter_value /= prescaler_value;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
counter_value = (uint16_t)counter_value;
|
counter = (uint16_t)counter;
|
||||||
|
|
||||||
gpt->count_in = (prescaler_value << 16) + counter_value;
|
gpt->count_in = (prescaler_value << 16) + counter;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -497,13 +497,13 @@ void mpc5200_uart_psc_initialize(int minor) {
|
|||||||
*/
|
*/
|
||||||
psc->tfalarm = 1;
|
psc->tfalarm = 1;
|
||||||
|
|
||||||
baud_divider = IPB_CLOCK / (9600 * 32);
|
baud_divider = (IPB_CLOCK + GEN5200_CONSOLE_BAUD *16) / (GEN5200_CONSOLE_BAUD * 32);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set upper timer counter
|
* Set upper timer counter
|
||||||
*/
|
*/
|
||||||
psc->ctur = baud_divider >> 16;
|
psc->ctur = baud_divider >> 16;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set lower timer counter
|
* Set lower timer counter
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -90,6 +90,24 @@
|
|||||||
#define MBAR 0xF0000000
|
#define MBAR 0xF0000000
|
||||||
#define HAS_UBOOT
|
#define HAS_UBOOT
|
||||||
|
|
||||||
|
#elif defined (ep5200)
|
||||||
|
/*
|
||||||
|
* Embedded Planet EP5200 -- should be the same as a Freescale 5200lite
|
||||||
|
* which is also known as the Ice Cube. In the RTEMS configuration,
|
||||||
|
* we load U-Boot on it instead of the default dBug.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define HAS_UBOOT
|
||||||
|
|
||||||
|
/* These are copied from PM520 but seem to work so OK */
|
||||||
|
#define GPIOPCR_INITMASK 0x330F0F77
|
||||||
|
#define GPIOPCR_INITVAL 0x01050444
|
||||||
|
|
||||||
|
/* we only have PSC1 */
|
||||||
|
#define GEN5200_UART_AVAIL_MASK 0x01
|
||||||
|
|
||||||
|
#define MBAR 0xF0000000
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error "board type not defined"
|
#error "board type not defined"
|
||||||
#endif
|
#endif
|
||||||
@@ -110,8 +128,10 @@ extern "C" {
|
|||||||
#include <bsp/vectors.h>
|
#include <bsp/vectors.h>
|
||||||
|
|
||||||
#if defined(HAS_UBOOT)
|
#if defined(HAS_UBOOT)
|
||||||
|
/* This is the define U-Boot uses to configure which entries in the structure are valid */
|
||||||
#define CONFIG_MPC5xxx
|
#define CONFIG_MPC5xxx
|
||||||
#include <u-boot.h>
|
#include <u-boot.h>
|
||||||
|
|
||||||
extern bd_t *uboot_bdinfo_ptr;
|
extern bd_t *uboot_bdinfo_ptr;
|
||||||
extern bd_t uboot_bdinfo_copy;
|
extern bd_t uboot_bdinfo_copy;
|
||||||
#endif
|
#endif
|
||||||
@@ -189,6 +209,7 @@ void bsp_cleanup(void);
|
|||||||
|
|
||||||
#define SINGLE_CHAR_MODE
|
#define SINGLE_CHAR_MODE
|
||||||
#define UARTS_USE_TERMIOS_INT 1
|
#define UARTS_USE_TERMIOS_INT 1
|
||||||
|
/* #define SHOW_MORE_INIT_SETTINGS 1 */
|
||||||
|
|
||||||
/* ata modes */
|
/* ata modes */
|
||||||
/* #undef ATA_USE_INT */
|
/* #undef ATA_USE_INT */
|
||||||
@@ -205,6 +226,12 @@ void bsp_cleanup(void);
|
|||||||
#define G2_CLOCK 231000000 /* 231 MHz */
|
#define G2_CLOCK 231000000 /* 231 MHz */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAS_UBOOT)
|
||||||
|
#define GEN5200_CONSOLE_BAUD (uboot_bdinfo_ptr->bi_baudrate)
|
||||||
|
#else
|
||||||
|
#define GEN5200_CONSOLE_BAUD 9600
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert decrement value to tenths of microsecnds (used by
|
* Convert decrement value to tenths of microsecnds (used by
|
||||||
* shared timer driver).
|
* shared timer driver).
|
||||||
|
|||||||
@@ -699,7 +699,7 @@ typedef struct mpc5200_
|
|||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
* programmable serial controller 1 (MBAR + 0x2000)
|
* programmable serial controller 1 (MBAR + 0x2000)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -85,6 +85,10 @@ $(PROJECT_LIB)/linkcmds.brs5l: startup/linkcmds.brs5l $(PROJECT_LIB)/$(dirstamp)
|
|||||||
$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.brs5l
|
$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.brs5l
|
||||||
PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.brs5l
|
PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.brs5l
|
||||||
|
|
||||||
|
$(PROJECT_LIB)/linkcmds.ep5200: startup/linkcmds.ep5200 $(PROJECT_LIB)/$(dirstamp)
|
||||||
|
$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.ep5200
|
||||||
|
PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.ep5200
|
||||||
|
|
||||||
$(PROJECT_LIB)/linkcmds.pm520: startup/linkcmds.pm520 $(PROJECT_LIB)/$(dirstamp)
|
$(PROJECT_LIB)/linkcmds.pm520: startup/linkcmds.pm520 $(PROJECT_LIB)/$(dirstamp)
|
||||||
$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.pm520
|
$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.pm520
|
||||||
PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.pm520
|
PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.pm520
|
||||||
|
|||||||
@@ -244,8 +244,6 @@ void bsp_predriver_hook(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void bsp_start(void)
|
void bsp_start(void)
|
||||||
{
|
{
|
||||||
extern void *_WorkspaceBase;
|
extern void *_WorkspaceBase;
|
||||||
@@ -257,13 +255,21 @@ void bsp_start(void)
|
|||||||
* Get CPU identification dynamically. Note that the get_ppc_cpu_type() function
|
* Get CPU identification dynamically. Note that the get_ppc_cpu_type() function
|
||||||
* store the result in global variables so that it can be used latter...
|
* store the result in global variables so that it can be used latter...
|
||||||
*/
|
*/
|
||||||
myCpu = get_ppc_cpu_type();
|
myCpu = get_ppc_cpu_type();
|
||||||
myCpuRevision = get_ppc_cpu_revision();
|
myCpuRevision = get_ppc_cpu_revision();
|
||||||
|
|
||||||
#if defined(HAS_UBOOT)
|
#if defined(HAS_UBOOT)
|
||||||
uboot_bdinfo_copy = *uboot_bdinfo_ptr;
|
uboot_bdinfo_copy = *uboot_bdinfo_ptr;
|
||||||
uboot_bdinfo_ptr = &uboot_bdinfo_copy;
|
uboot_bdinfo_ptr = &uboot_bdinfo_copy;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAS_UBOOT) && defined(SHOW_MORE_INIT_SETTINGS)
|
||||||
|
{
|
||||||
|
void dumpUBootBDInfo( bd_t * );
|
||||||
|
dumpUBootBDInfo( uboot_bdinfo_ptr );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
cpu_init();
|
cpu_init();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
348
c/src/lib/libbsp/powerpc/gen5200/startup/linkcmds.icecube
Normal file
348
c/src/lib/libbsp/powerpc/gen5200/startup/linkcmds.icecube
Normal file
@@ -0,0 +1,348 @@
|
|||||||
|
/*
|
||||||
|
* This file contains directives for the GNU linker which are specific
|
||||||
|
* to a MicroSys PM520 Board
|
||||||
|
*
|
||||||
|
* linkcmds,v 1.3 2003/01/20 19:53:27 joel Exp
|
||||||
|
*/
|
||||||
|
|
||||||
|
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
|
||||||
|
"elf32-powerpc")
|
||||||
|
OUTPUT_ARCH(powerpc)
|
||||||
|
|
||||||
|
ENTRY(start)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Declare some sizes.
|
||||||
|
* XXX: The assignment of ". += XyzSize;" fails in older gld's if the
|
||||||
|
* number used there is not constant. If this happens to you, edit
|
||||||
|
* the lines marked XXX below to use a constant value.
|
||||||
|
*/
|
||||||
|
HeapSize = DEFINED(HeapSize) ? HeapSize : 0x100000; /* 1M Heap */
|
||||||
|
StackSize = DEFINED(StackSize) ? StackSize : 0x80000; /* 512 kB */
|
||||||
|
WorkSpaceSize = DEFINED(WorkSpaceSize) ? WorkSpaceSize : 0x80000; /* 512k */
|
||||||
|
RamDiskSize = DEFINED(RamDiskSize) ? RamDiskSize : 0x80000; /* 512 ram disk */
|
||||||
|
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
ram : org = 0x0, l = 128M
|
||||||
|
mpc5200_regs : org = 0xF0000000, l = 24K
|
||||||
|
flash : org = 0xFFE00000, l = 2M
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
.vectors 0x100 :
|
||||||
|
{
|
||||||
|
*(.vectors)
|
||||||
|
}
|
||||||
|
> ram
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The stack will live in this area - between the vectors and
|
||||||
|
* the text section.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.text 0x40000:
|
||||||
|
{
|
||||||
|
_textbase = .;
|
||||||
|
|
||||||
|
|
||||||
|
text.start = .;
|
||||||
|
|
||||||
|
/* Entry point is the .entry section */
|
||||||
|
*(.entry)
|
||||||
|
*(.entry2)
|
||||||
|
|
||||||
|
/* Actual Code */
|
||||||
|
*(.text*)
|
||||||
|
|
||||||
|
|
||||||
|
*(.rodata*)
|
||||||
|
*(.rodata1)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Special FreeBSD sysctl sections.
|
||||||
|
*/
|
||||||
|
. = ALIGN (16);
|
||||||
|
__start_set_sysctl_set = .;
|
||||||
|
*(set_sysctl_*);
|
||||||
|
__stop_set_sysctl_set = ABSOLUTE(.);
|
||||||
|
*(set_domain_*);
|
||||||
|
*(set_pseudo_*);
|
||||||
|
|
||||||
|
/* C++ constructors/destructors */
|
||||||
|
*(.gnu.linkonce.t*)
|
||||||
|
|
||||||
|
/* Initialization and finalization code.
|
||||||
|
*
|
||||||
|
* Various files can provide initialization and finalization functions.
|
||||||
|
* The bodies of these functions are in .init and .fini sections. We
|
||||||
|
* accumulate the bodies here, and prepend function prologues from
|
||||||
|
* ecrti.o and function epilogues from ecrtn.o. ecrti.o must be linked
|
||||||
|
* first; ecrtn.o must be linked last. Because these are wildcards, it
|
||||||
|
* doesn't matter if the user does not actually link against ecrti.o and
|
||||||
|
* ecrtn.o; the linker won't look for a file to match a wildcard. The
|
||||||
|
* wildcard also means that it doesn't matter which directory ecrti.o
|
||||||
|
* and ecrtn.o are in.
|
||||||
|
*/
|
||||||
|
PROVIDE (_init = .);
|
||||||
|
*ecrti.o(.init)
|
||||||
|
*(.init)
|
||||||
|
*ecrtn.o(.init)
|
||||||
|
|
||||||
|
PROVIDE (_fini = .);
|
||||||
|
*ecrti.o(.fini)
|
||||||
|
*(.fini)
|
||||||
|
*ecrtn.o(.init)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* C++ constructors and destructors for static objects.
|
||||||
|
* PowerPC EABI does not use crtstuff yet, so we build "old-style"
|
||||||
|
* constructor and destructor lists that begin with the list lenght
|
||||||
|
* end terminate with a NULL entry.
|
||||||
|
*/
|
||||||
|
|
||||||
|
PROVIDE (__CTOR_LIST__ = .);
|
||||||
|
/* LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) */
|
||||||
|
*crtbegin.o(.ctors)
|
||||||
|
*(.ctors)
|
||||||
|
*crtend.o(.ctors)
|
||||||
|
LONG(0)
|
||||||
|
PROVIDE (__CTOR_END__ = .);
|
||||||
|
|
||||||
|
PROVIDE (__DTOR_LIST__ = .);
|
||||||
|
/* LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) */
|
||||||
|
*crtbegin.o(.dtors)
|
||||||
|
*(.dtors)
|
||||||
|
*crtend.o(.dtors)
|
||||||
|
LONG(0)
|
||||||
|
PROVIDE (__DTOR_END__ = .);
|
||||||
|
|
||||||
|
/* Exception frame info */
|
||||||
|
*(.eh_frame)
|
||||||
|
|
||||||
|
/* Miscellaneous read-only data */
|
||||||
|
_rodata_start = . ;
|
||||||
|
*(.gnu.linkonce.r*)
|
||||||
|
*(.lit)
|
||||||
|
*(.shdata)
|
||||||
|
*(.rodata)
|
||||||
|
*(.rodata1)
|
||||||
|
*(.descriptors)
|
||||||
|
*(rom_ver)
|
||||||
|
_erodata = .;
|
||||||
|
|
||||||
|
|
||||||
|
/* Various possible names for the end of the .text section */
|
||||||
|
etext = ALIGN(0x10);
|
||||||
|
_etext = .;
|
||||||
|
_endtext = .;
|
||||||
|
text.end = .;
|
||||||
|
PROVIDE (etext = .);
|
||||||
|
PROVIDE (__etext = .);
|
||||||
|
|
||||||
|
} > ram
|
||||||
|
|
||||||
|
|
||||||
|
PROVIDE (__EXCEPT_START__ = .);
|
||||||
|
.gcc_except_table : { *(.gcc_except_table) } >ram
|
||||||
|
PROVIDE (__EXCEPT_END__ = .);
|
||||||
|
__GOT_START__ = .;
|
||||||
|
.got :
|
||||||
|
{
|
||||||
|
s.got = .;
|
||||||
|
*(.got.plt) *(.got)
|
||||||
|
} > ram
|
||||||
|
__GOT_END__ = .;
|
||||||
|
|
||||||
|
.got1 : { *(.got1) } >ram
|
||||||
|
PROVIDE (__GOT2_START__ = .);
|
||||||
|
PROVIDE (_GOT2_START_ = .);
|
||||||
|
.got2 : { *(.got2) } >ram
|
||||||
|
PROVIDE (__GOT2_END__ = .);
|
||||||
|
PROVIDE (_GOT2_END_ = .);
|
||||||
|
|
||||||
|
PROVIDE (__FIXUP_START__ = .);
|
||||||
|
PROVIDE (_FIXUP_START_ = .);
|
||||||
|
.fixup : { *(.fixup) } >ram
|
||||||
|
PROVIDE (_FIXUP_END_ = .);
|
||||||
|
PROVIDE (__FIXUP_END__ = .);
|
||||||
|
|
||||||
|
.rel.dyn : {
|
||||||
|
*(.rel.init)
|
||||||
|
*(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
|
||||||
|
*(.rel.fini)
|
||||||
|
*(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
|
||||||
|
*(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*)
|
||||||
|
*(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
|
||||||
|
*(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
|
||||||
|
*(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
|
||||||
|
*(.rel.ctors)
|
||||||
|
*(.rel.dtors)
|
||||||
|
*(.rel.got)
|
||||||
|
*(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*)
|
||||||
|
*(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*)
|
||||||
|
*(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*)
|
||||||
|
*(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*)
|
||||||
|
*(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
|
||||||
|
} >ram
|
||||||
|
.rela.dyn : {
|
||||||
|
*(.rela.init)
|
||||||
|
*(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
|
||||||
|
*(.rela.fini)
|
||||||
|
*(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
|
||||||
|
*(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
|
||||||
|
*(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
|
||||||
|
*(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
|
||||||
|
*(.rela.ctors)
|
||||||
|
*(.rela.dtors)
|
||||||
|
*(.rela.got)
|
||||||
|
*(.rela.got1)
|
||||||
|
*(.rela.got2)
|
||||||
|
*(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
|
||||||
|
*(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
|
||||||
|
*(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
|
||||||
|
*(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
|
||||||
|
*(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
|
||||||
|
} >ram
|
||||||
|
|
||||||
|
PROVIDE (__SDATA2_START__ = .);
|
||||||
|
.sdata2 : { *(.sdata2) *(.gnu.linkonce.s2.*) } >ram
|
||||||
|
.sbss2 : { *(.sbss2) *(.gnu.linkonce.sb2.*) } >ram
|
||||||
|
PROVIDE (__SBSS2_END__ = .);
|
||||||
|
|
||||||
|
.sbss2 : { *(.sbss2) } >ram
|
||||||
|
PROVIDE (__SBSS2_END__ = .);
|
||||||
|
|
||||||
|
__SBSS_START__ = .;
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
bss.start = .;
|
||||||
|
*(.bss .bss* .gnu.linkonce.b*)
|
||||||
|
*(.sbss*) *(COMMON)
|
||||||
|
. = ALIGN(4);
|
||||||
|
bss.end = .;
|
||||||
|
} > ram
|
||||||
|
__SBSS_END__ = .;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* R/W Data */
|
||||||
|
.data ( . ) :
|
||||||
|
{
|
||||||
|
. = ALIGN (4);
|
||||||
|
|
||||||
|
data.start = .;
|
||||||
|
|
||||||
|
*(.data)
|
||||||
|
*(.data.rel.*)
|
||||||
|
*(.data1)
|
||||||
|
*(.data.* .gnu.linkonce.d.*)
|
||||||
|
PROVIDE (__SDATA_START__ = .);
|
||||||
|
*(.sdata*)
|
||||||
|
*(.gnu.linkonce.s.*)
|
||||||
|
data.end = .;
|
||||||
|
} > ram
|
||||||
|
|
||||||
|
data.size = data.end - data.start;
|
||||||
|
bss.size = bss.end - bss.start;
|
||||||
|
text.size = text.end - text.start;
|
||||||
|
|
||||||
|
PROVIDE(_bss_start = ADDR(.bss));
|
||||||
|
PROVIDE(_bss_size = SIZEOF(.bss));
|
||||||
|
PROVIDE(_data_start = ADDR(.data));
|
||||||
|
PROVIDE(_data_size = SIZEOF(.data));
|
||||||
|
PROVIDE(_text_start = ADDR(.text));
|
||||||
|
PROVIDE(_text_size = SIZEOF(.text));
|
||||||
|
PROVIDE(_end = data.end);
|
||||||
|
|
||||||
|
.gzipmalloc : {
|
||||||
|
. = ALIGN (16);
|
||||||
|
_startmalloc = .;
|
||||||
|
} >ram
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Interrupt stack setup
|
||||||
|
*/
|
||||||
|
IntrStack_start = ALIGN(0x10);
|
||||||
|
. += 0x4000;
|
||||||
|
intrStack = .;
|
||||||
|
PROVIDE(intrStackPtr = intrStack);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_WorkspaceBase = .;
|
||||||
|
__WorkspaceBase = .;
|
||||||
|
. += WorkSpaceSize;
|
||||||
|
|
||||||
|
_RamDiskBase = .;
|
||||||
|
__RamDiskBase = .;
|
||||||
|
. += RamDiskSize;
|
||||||
|
_RamDiskEnd = .;
|
||||||
|
__RamDiskEnd = .;
|
||||||
|
PROVIDE( _RamDiskSize = _RamDiskEnd - _RamDiskBase );
|
||||||
|
|
||||||
|
_HeapStart = .;
|
||||||
|
__HeapStart = .;
|
||||||
|
. += HeapSize;
|
||||||
|
_HeapEnd = .;
|
||||||
|
__HeapEnd = .;
|
||||||
|
|
||||||
|
clear_end = .;
|
||||||
|
|
||||||
|
/* Sections for compressed .text and .data */
|
||||||
|
/* after the .datarom section is an int specifying */
|
||||||
|
/* the length of the following compressed image */
|
||||||
|
/* Executes once then could get overwritten */
|
||||||
|
.textrom 0x100000 :
|
||||||
|
{
|
||||||
|
*(.textrom)
|
||||||
|
_endloader = .;
|
||||||
|
} > ram
|
||||||
|
|
||||||
|
.datarom :
|
||||||
|
{
|
||||||
|
_dr_start = .;
|
||||||
|
*(.datarom)
|
||||||
|
_dr_end = .;
|
||||||
|
} > ram
|
||||||
|
dr_len = _dr_end - _dr_start;
|
||||||
|
|
||||||
|
mpc5200_regs :
|
||||||
|
{
|
||||||
|
MBAR = .;
|
||||||
|
mpc5200 = .;
|
||||||
|
_mpc5200 = .;
|
||||||
|
. += (0x6000);
|
||||||
|
} > mpc5200_regs
|
||||||
|
|
||||||
|
|
||||||
|
/* the reset vector is at 0xfff00000 which is */
|
||||||
|
/* located at offset 0x400000 from the base */
|
||||||
|
/* of flash */
|
||||||
|
.bootrom 0xFFE00000 :
|
||||||
|
{
|
||||||
|
*(.bootrom)
|
||||||
|
_endboot = .;
|
||||||
|
} > flash
|
||||||
|
|
||||||
|
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_aregion 0 : { *(.debug_aregion) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
}
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
|
|
||||||
#include <rtems/asm.h>
|
#include <rtems/asm.h>
|
||||||
|
#include <bspopts.h>
|
||||||
#include <rtems/score/cpu.h>
|
#include <rtems/score/cpu.h>
|
||||||
#include "vectors.h"
|
#include "vectors.h"
|
||||||
|
|
||||||
@@ -197,6 +198,7 @@ SYM (push_normalized_frame):
|
|||||||
SYNC
|
SYNC
|
||||||
rfi
|
rfi
|
||||||
|
|
||||||
|
#if !defined(ep5200)
|
||||||
.section .vectors,"awx",@progbits
|
.section .vectors,"awx",@progbits
|
||||||
|
|
||||||
PUBLIC_VAR (__vectors)
|
PUBLIC_VAR (__vectors)
|
||||||
@@ -261,4 +263,4 @@ __vecf: b __vecf
|
|||||||
.rep 63+1024
|
.rep 63+1024
|
||||||
.long 0x04000400
|
.long 0x04000400
|
||||||
.endr
|
.endr
|
||||||
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user