diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2001-11-08 23:46:58 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2001-11-08 23:46:58 +0000 |
commit | 57ed3939306d6db3543490c21bbd858c0b186c1c (patch) | |
tree | 43afa1978cb8d315be8d98ac87ff087d637fb799 /c/src/lib/libbsp/powerpc/gen405/startup | |
parent | 2001-11-08 Dennis Ehlin (ECS) <Dennis.Ehlin@ecs.ericsson.se> (diff) | |
download | rtems-57ed3939306d6db3543490c21bbd858c0b186c1c.tar.bz2 |
2001-11-08 Dennis Ehlin (ECS) <Dennis.Ehlin@ecs.ericsson.se>
This modification is part of the submitted modifications necessary to
support the IBM PPC405 family. This submission was reviewed by
Thomas Doerfler <Thomas.Doerfler@imd-systems.de> who ensured it did
not negatively impact the ppc403 BSPs. The submission and tracking
process was captured as PR50.
* ChangeLog, Makefile.am, README, bsp_specs, bsp_specs.dl, configure.ac,
times, dlentry/.cvsignore, dlentry/Makefile.am, dlentry/dlentry.S,
include/.cvsignore, include/Makefile.am, include/bsp.h,
include/bspopts.h.in, include/coverhd.h, startup/.cvsignore,
startup/Makefile.am, startup/bspclean.c, startup/bspstart.c,
startup/linkcmds, startup/linkcmds.dl, startup/setvec.c,
wrapup/.cvsignore, wrapup/Makefile.am: New files that are
part of the new gen405 BSP.
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen405/startup/.cvsignore | 2 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen405/startup/Makefile.am | 40 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen405/startup/bspclean.c | 43 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen405/startup/bspstart.c | 199 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen405/startup/linkcmds | 152 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen405/startup/linkcmds.dl | 142 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen405/startup/setvec.c | 57 |
7 files changed, 635 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen405/startup/.cvsignore b/c/src/lib/libbsp/powerpc/gen405/startup/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/c/src/lib/libbsp/powerpc/gen405/startup/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/c/src/lib/libbsp/powerpc/gen405/startup/Makefile.am b/c/src/lib/libbsp/powerpc/gen405/startup/Makefile.am new file mode 100644 index 0000000000..8451c2999b --- /dev/null +++ b/c/src/lib/libbsp/powerpc/gen405/startup/Makefile.am @@ -0,0 +1,40 @@ +## +## $Id$ +## + +AUTOMAKE_OPTIONS = foreign 1.4 + +VPATH = @srcdir@:@srcdir@/../../../shared + +PGM = $(ARCH)/startup.rel + +C_FILES = bspclean.c bsplibc.c bsppost.c bspstart.c bootcard.c main.c sbrk.c \ + setvec.c gnatinstallhandler.c +C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.o) + +OBJS = $(C_O_FILES) + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../../../../../../automake/compile.am +include $(top_srcdir)/../../../../../../automake/lib.am + +# +# (OPTIONAL) Add local stuff here using += +# + +$(PGM): $(OBJS) + $(make-rel) + +$(PROJECT_RELEASE)/lib/linkcmds: linkcmds + $(INSTALL_DATA) $< $@ + +# the .rel file built here will be put into libbsp.a by ../wrapup/Makefile +TMPINSTALL_FILES += $(PROJECT_RELEASE)/lib/linkcmds + +all-local: $(ARCH) $(OBJS) $(PGM) $(TMPINSTALL_FILES) + +.PRECIOUS: $(PGM) + +EXTRA_DIST = bspclean.c bspstart.c linkcmds linkcmds.dl setvec.c + +include $(top_srcdir)/../../../../../../automake/local.am diff --git a/c/src/lib/libbsp/powerpc/gen405/startup/bspclean.c b/c/src/lib/libbsp/powerpc/gen405/startup/bspclean.c new file mode 100644 index 0000000000..bc4613629f --- /dev/null +++ b/c/src/lib/libbsp/powerpc/gen405/startup/bspclean.c @@ -0,0 +1,43 @@ +/* bsp_cleanup() + * + * This routine normally is part of start.s and usually returns + * control to a monitor. + * + * INPUT: NONE + * + * OUTPUT: NONE + * + * Author: Andrew Bray <andy@i-cubed.co.uk> + * + * COPYRIGHT (c) 1995 by i-cubed ltd. + * + * To anyone who acknowledges that this file is provided "AS IS" + * without any express or implied warranty: + * permission to use, copy, modify, and distribute this file + * for any purpose is hereby granted without fee, provided that + * the above copyright notice and this notice appears in all + * copies, and that the name of i-cubed limited not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * i-cubed limited makes no representations about the suitability + * of this software for any purpose. + * + * Derived from c/src/lib/libbsp/no_cpu/no_bsp/startup/bspclean.c: + * + * COPYRIGHT (c) 1989-1999. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <rtems.h> +#include <bsp.h> + +void bsp_cleanup( void ) +{ + rtems_fatal_error_occurred(0); +} diff --git a/c/src/lib/libbsp/powerpc/gen405/startup/bspstart.c b/c/src/lib/libbsp/powerpc/gen405/startup/bspstart.c new file mode 100644 index 0000000000..5f65ebeb2e --- /dev/null +++ b/c/src/lib/libbsp/powerpc/gen405/startup/bspstart.c @@ -0,0 +1,199 @@ +/* bsp_start() + * + * This routine starts the application. It includes application, + * board, and monitor specific initialization and configuration. + * The generic CPU dependent initialization has been performed + * before this routine is invoked. + * + * INPUT: NONE + * + * OUTPUT: NONE + * + * Author: Thomas Doerfler <td@imd.m.isar.de> + * IMD Ingenieurbuero fuer Microcomputertechnik + * + * COPYRIGHT (c) 1998 by IMD + * + * Changes from IMD are covered by the original distributions terms. + * This file has been derived from the papyrus BSP: + * + * Author: Andrew Bray <andy@i-cubed.co.uk> + * + * COPYRIGHT (c) 1995 by i-cubed ltd. + * + * To anyone who acknowledges that this file is provided "AS IS" + * without any express or implied warranty: + * permission to use, copy, modify, and distribute this file + * for any purpose is hereby granted without fee, provided that + * the above copyright notice and this notice appears in all + * copies, and that the name of i-cubed limited not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * i-cubed limited makes no representations about the suitability + * of this software for any purpose. + * + * Modifications for spooling console driver and control of memory layout + * with linker command file by + * Thomas Doerfler <td@imd.m.isar.de> + * for these modifications: + * COPYRIGHT (c) 1997 by IMD, Puchheim, Germany. + * + * To anyone who acknowledges that this file is provided "AS IS" + * without any express or implied warranty: + * permission to use, copy, modify, and distribute this file + * for any purpose is hereby granted without fee, provided that + * the above copyright notice and this notice appears in all + * copies. IMD makes no representations about the suitability + * of this software for any purpose. + * + * Derived from c/src/lib/libbsp/no_cpu/no_bsp/startup/bspstart.c: + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * Modifications for PPC405GP by Dennis Ehlin + * + * $Id$ + */ + +#include <string.h> +#include <fcntl.h> + +#include <bsp.h> +#include <rtems/libio.h> +#include <rtems/libcsupport.h> +#include <ictrl.h> + +/* + * The original table from the application and our copy of it with + * some changes. + */ + +extern rtems_configuration_table Configuration; + +rtems_configuration_table BSP_Configuration; + +rtems_cpu_table Cpu_table; + +char *rtems_progname; +void *bsp_ram_end = (void *)RAM_END; /* first addr behind avail. ram area */ + +/* Initialize whatever libc we are using + * called from postdriver hook + */ + +void bsp_postdriver_hook(void); +void bsp_libc_init( void *, unsigned32, int ); + +/* + * + * bsp_predriver_hook + * + * Before drivers are setup. + */ + +void bsp_predriver_hook(void) +{ + rtems_status_code status; + /* init the PPC405 external interrupt controller handler... */ + status = ictrl_init(); +} + +/* + * Function: bsp_pretasking_hook + * Created: 95/03/10 + * + * Description: + * BSP pretasking hook. Called just before drivers are initialized. + * Used to setup libc and install any BSP extensions. + * + * NOTES: + * Must not use libc (to do io) from here, since drivers are + * not yet initialized. + * + */ + +void bsp_pretasking_hook(void) +{ + extern int _end; + extern int _heap_end; + rtems_unsigned32 heap_start; + rtems_unsigned32 heap_size; + rtems_unsigned32 heap_end; + + + heap_start = (rtems_unsigned32) &_end; + if (heap_start & (CPU_ALIGNMENT-1)) + heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1); + + heap_end = (rtems_unsigned32) &_heap_end; + if (heap_end & (CPU_ALIGNMENT-1)) + heap_end = (heap_end + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1); + + heap_size = heap_end - heap_start; + + bsp_libc_init((void *) heap_start, heap_size, 0); /* 64 * 1024 */ + +#ifdef RTEMS_DEBUG + rtems_debug_enable( RTEMS_DEBUG_ALL_MASK ); +#endif + +} + + +/* + * bsp_start + * + * This routine does the bulk of the system initialization. + */ + +void bsp_start( void ) +{ + /* + * Allocate the memory for the RTEMS Work Space. This can come from + * a variety of places: hard coded address, malloc'ed from outside + * RTEMS world (e.g. simulator or primitive memory manager), or (as + * typically done by stock BSPs) by subtracting the required amount + * of work space from the last physical address on the CPU board. + */ + + /* + * Need to "allocate" the memory for the RTEMS Workspace and + * tell the RTEMS configuration where it is. This memory is + * not malloc'ed. It is just "pulled from the air". + */ + /* FIME: plan usage of RAM better: + - make top of ram dynamic, + - take out some part for persistant log + - make rest of ram to heap... + -remove RAM_END from bsp.h, this cannot be valid... + or must be a function call + */ + BSP_Configuration.work_space_start = (void *) + ((char *)(bsp_ram_end)) - BSP_Configuration.work_space_size; + + /* + * initialize the CPU table for this BSP + */ + + Cpu_table.pretasking_hook = bsp_pretasking_hook; /* init libc, etc. */ + Cpu_table.predriver_hook = bsp_predriver_hook; + Cpu_table.postdriver_hook = bsp_postdriver_hook; + Cpu_table.interrupt_stack_size = CONFIGURE_INTERRUPT_STACK_MEMORY; + + Cpu_table.clicks_per_usec = 300; + Cpu_table.serial_per_sec = 14625000; /* = (CPU Clock / UART Internal Clock Divisor) */ + Cpu_table.serial_external_clock = 0; + Cpu_table.timer_internal_clock = 1; + Cpu_table.serial_xon_xoff = 0; + Cpu_table.serial_cts_rts = 1; + Cpu_table.serial_rate = 115200; + Cpu_table.timer_average_overhead = 2; + Cpu_table.timer_least_valid = 3; + Cpu_table.exceptions_in_RAM = TRUE; +} diff --git a/c/src/lib/libbsp/powerpc/gen405/startup/linkcmds b/c/src/lib/libbsp/powerpc/gen405/startup/linkcmds new file mode 100644 index 0000000000..1a4d75ee66 --- /dev/null +++ b/c/src/lib/libbsp/powerpc/gen405/startup/linkcmds @@ -0,0 +1,152 @@ +/* + * This file contains directives for the GNU linker which are specific + * to the gen405 + * This file is intended to be used together with dlentry.s + * it will generate downloadable code + * + * Modifications for gen405 by Dennis Ehlin + * + * $Id$ + */ + +OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", + "elf32-powerpc") +OUTPUT_ARCH(powerpc) + SEARCH_DIR(/usr/local/powerpc-rtems/lib); + +ENTRY(download_entry) + +MEMORY + { + RAM : ORIGIN = 0, LENGTH = 64M + FLASH : ORIGIN = 0xFFE00000, LENGTH = 16M + } +SECTIONS +{ + .vectors 0x00000100 : + { + *(.vectors) + } > RAM + + .text : + { + text.start = . ; + *(.entry) + *(.entry2) + *(.text) + *(.rodata) + *(.rodata1) + *(.gnu.linkonce.r*) + *(.descriptors) + *(rom_ver) + etext = ALIGN(0x10); + _etext = .; + + *(.gnu.linkonce.t*) + + __CTOR_LIST__ = .; + LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) + *(.ctors) + LONG(0) + __CTOR_END__ = .; + + __DTOR_LIST__ = .; + LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) + *(.dtors) + LONG(0) + __DTOR_END__ = .; + + *(.lit) + *(.shdata) + *(.init) + *(.fini) + _endtext = ALIGN(0x10); + text.end = .; + } > RAM + + text.size = text.end - text.start; + + /* R/W Data */ + .data : + { + *(.data) + *(.data1) + *(.gnu.linkonce.d*) + PROVIDE (__SDATA_START__ = .); + *(.sdata) + } > 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__ = .); + + PROVIDE (__SDATA2_START__ = .); + .sdata2 : { *(.sdata2) } >RAM + .sbss2 : { *(.sbss2) } >RAM + PROVIDE (__SBSS2_END__ = .); + + .sbss2 : { *(.sbss2) } >RAM + PROVIDE (__SBSS2_END__ = .); + + __SBSS_START__ = .; + .bss : + { + bss.start = .; + *(.bss) *(.sbss) *(COMMON) + bss.end = ALIGN(4); + } > RAM + __SBSS_END__ = .; + + bss.size = bss.end - bss.start; + PROVIDE(_end = bss.end); + + /* reserve 512K for heap */ + heap.end = bss.end + 512K; + PROVIDE(_heap_end = heap.end); + /* reserve 64KByte for stack... */ + stack.end = heap.end + 64K; + PROVIDE(_end = stack.end); + + .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) } + +} diff --git a/c/src/lib/libbsp/powerpc/gen405/startup/linkcmds.dl b/c/src/lib/libbsp/powerpc/gen405/startup/linkcmds.dl new file mode 100644 index 0000000000..8e2128eebc --- /dev/null +++ b/c/src/lib/libbsp/powerpc/gen405/startup/linkcmds.dl @@ -0,0 +1,142 @@ +/* + * This file contains directives for the GNU linker which are specific + * to the helas403 + * This file is intended to be used together with dlentry.s + * it will generate downloadable code + * + * $Id$ + */ + +OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", + "elf32-powerpc") +OUTPUT_ARCH(powerpc) + SEARCH_DIR(/usr/local/powerpc-rtems/lib); + +ENTRY(download_entry) + +MEMORY + { + RAM : ORIGIN = 0, LENGTH = 8M + FLASH : ORIGIN = 0xFFF00000, LENGTH = 512K + } + +SECTIONS +{ + .vectors : 0x00010100 + { + *(.vectors) + } > RAM + + .text : + { + text.start = . ; + *(.entry) + *(.entry2) + *(.text) + *(.rodata) + *(.rodata1) + *(.descriptors) + *(rom_ver) + etext = ALIGN(0x10); + _etext = .; + + + __CTOR_LIST__ = .; + LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) + *(.ctors) + LONG(0) + __CTOR_END__ = .; + + __DTOR_LIST__ = .; + LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) + *(.dtors) + LONG(0) + __DTOR_END__ = .; + + *(.lit) + *(.shdata) + *(.init) + *(.fini) + _endtext = ALIGN(0x10); + text.end = .; + } > RAM + + text.size = text.end - text.start; + + /* R/W Data */ + .data : + { + *(.data) + *(.data1) + PROVIDE (__SDATA_START__ = .); + *(.sdata) + } > 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__ = .); + + PROVIDE (__SDATA2_START__ = .); + .sdata2 : { *(.sdata2) } >RAM + .sbss2 : { *(.sbss2) } >RAM + PROVIDE (__SBSS2_END__ = .); + + .sbss2 : { *(.sbss2) } >RAM + PROVIDE (__SBSS2_END__ = .); + + __SBSS_START__ = .; + .bss : + { + bss.start = .; + *(.bss) *(.sbss) *(COMMON) + bss.end = ALIGN(4); + } > RAM + __SBSS_END__ = .; + + bss.size = bss.end - bss.start; + PROVIDE(_end = bss.end); + + .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) } +} + + diff --git a/c/src/lib/libbsp/powerpc/gen405/startup/setvec.c b/c/src/lib/libbsp/powerpc/gen405/startup/setvec.c new file mode 100644 index 0000000000..77c1ae3236 --- /dev/null +++ b/c/src/lib/libbsp/powerpc/gen405/startup/setvec.c @@ -0,0 +1,57 @@ +/* set_vector + * + * This routine installs an interrupt vector on the target Board/CPU. + * This routine is allowed to be as board dependent as necessary. + * + * INPUT: + * handler - interrupt handler entry point + * vector - vector number + * type - 0 indicates raw hardware connect + * 1 indicates RTEMS interrupt connect + * + * RETURNS: + * address of previous interrupt handler + * + * Author: Andrew Bray <andy@i-cubed.co.uk> + * + * COPYRIGHT (c) 1995 by i-cubed ltd. + * + * To anyone who acknowledges that this file is provided "AS IS" + * without any express or implied warranty: + * permission to use, copy, modify, and distribute this file + * for any purpose is hereby granted without fee, provided that + * the above copyright notice and this notice appears in all + * copies, and that the name of i-cubed limited not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * i-cubed limited makes no representations about the suitability + * of this software for any purpose. + * + * Derived from c/src/lib/libbsp/no_cpu/no_bsp/startup/setvec.c: + * + * COPYRIGHT (c) 1989-1999. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <rtems.h> +#include <bsp.h> + +rtems_isr_entry set_vector( /* returns old vector */ + rtems_isr_entry handler, /* isr routine */ + rtems_vector_number vector, /* vector number */ + int type /* RTEMS or RAW intr */ +) +{ + rtems_isr_entry previous_isr; + + rtems_interrupt_catch( handler, vector, (rtems_isr_entry *) &previous_isr ); + + return previous_isr; +} + |