diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/sh/gensh2/start/Makefile.am | 4 | ||||
-rw-r--r-- | c/src/lib/libbsp/sh/gensh2/start/start.S | 14 | ||||
-rw-r--r-- | c/src/lib/libbsp/sh/gensh2/startup/Makefile.am | 4 | ||||
-rw-r--r-- | c/src/lib/libbsp/sh/gensh2/startup/bspstart.c | 6 | ||||
-rw-r--r-- | c/src/lib/libbsp/sh/gensh2/startup/hw_init.c | 118 |
5 files changed, 74 insertions, 72 deletions
diff --git a/c/src/lib/libbsp/sh/gensh2/start/Makefile.am b/c/src/lib/libbsp/sh/gensh2/start/Makefile.am index cab0be15ab..04b0f0ae6c 100644 --- a/c/src/lib/libbsp/sh/gensh2/start/Makefile.am +++ b/c/src/lib/libbsp/sh/gensh2/start/Makefile.am @@ -1,6 +1,6 @@ -## +## ## $Id$ -## +## AUTOMAKE_OPTIONS = foreign 1.4 diff --git a/c/src/lib/libbsp/sh/gensh2/start/start.S b/c/src/lib/libbsp/sh/gensh2/start/start.S index f06b284f50..835bdd516f 100644 --- a/c/src/lib/libbsp/sh/gensh2/start/start.S +++ b/c/src/lib/libbsp/sh/gensh2/start/start.S @@ -44,7 +44,7 @@ SYM (start): ! Initialize minimal hardware mov.l hw_init_k, r0 jsr @r0 - nop !debug dead-slot target + nop !dead slot #endif /* START_HW_INIT */ ! zero out bss @@ -56,7 +56,6 @@ SYM (start): add #4,r0 cmp/ge r0,r1 bt 0b - nop !debug dead-slot target ! copy the vector table from rom to ram mov.l vects_k,r0 ! vectab @@ -70,8 +69,8 @@ SYM (start): add #1,r2 cmp/hi r3,r2 bf 1b - nop !debug dead-slot target +#ifndef STANDALONE_EVB ! overlay monitor vectors onto RTEMS table template ! code adapted from Hitachi EDK7045F User Manual: "Copyvect.s" mova vects_k,r0 @@ -135,20 +134,19 @@ SYM (start): mov.l r3, @r0 mov.l vects_k,r0 ! point vbr to vectab ldc r0,vbr +#endif ! STANDALONE_EVB ! call the mainline mov #0,r4 ! argc - mov #0,r5 ! argv - can place in dead slot mov.l main_k,r0 jsr @r0 - nop !debug dead-slot target + mov #0,r5 ! argv - can place in dead slot ! call exit mov r0,r4 mov.l exit_k,r0 - or r0,r0 jsr @r0 - nop !debug dead-slot target + or r0,r0 mov.l vbrtemp_k,r0 ! restore original vbr mov.l @r0,r3 @@ -171,7 +169,7 @@ exit_k: .long SYM(exit) #ifdef START_HW_INIT /* from $RTEMS_BSP.cfg */ hw_init_k: - .long SYM(hw_initialize) + .long SYM(early_hw_init) #endif /* START_HW_INIT */ vbrtemp_k: .long SYM(vbrtemp) diff --git a/c/src/lib/libbsp/sh/gensh2/startup/Makefile.am b/c/src/lib/libbsp/sh/gensh2/startup/Makefile.am index 1c39a297ed..0a03c884ad 100644 --- a/c/src/lib/libbsp/sh/gensh2/startup/Makefile.am +++ b/c/src/lib/libbsp/sh/gensh2/startup/Makefile.am @@ -1,6 +1,6 @@ -## +## ## $Id$ -## +## AUTOMAKE_OPTIONS = foreign 1.4 diff --git a/c/src/lib/libbsp/sh/gensh2/startup/bspstart.c b/c/src/lib/libbsp/sh/gensh2/startup/bspstart.c index 5761d68219..e80e6dd1a0 100644 --- a/c/src/lib/libbsp/sh/gensh2/startup/bspstart.c +++ b/c/src/lib/libbsp/sh/gensh2/startup/bspstart.c @@ -37,7 +37,7 @@ * some changes. */ -extern void hw_initialize(void); +extern void bsp_hw_init(void); extern rtems_configuration_table Configuration; @@ -94,7 +94,7 @@ void bsp_start(void) #ifndef START_HW_INIT /* board hardware setup here, or from 'start.S' */ - hw_initialize(); + bsp_hw_init(); #endif /* @@ -135,7 +135,7 @@ void bsp_start(void) Cpu_table.postdriver_hook = bsp_postdriver_hook; #if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE ) - Cpu_table.interrupt_stack_size = 4096; + Cpu_table.interrupt_stack_size = CONFIGURE_INTERRUPT_STACK_MEMORY; #endif Cpu_table.clicks_per_second = HZ ; diff --git a/c/src/lib/libbsp/sh/gensh2/startup/hw_init.c b/c/src/lib/libbsp/sh/gensh2/startup/hw_init.c index f0b6e3b90e..72d714086c 100644 --- a/c/src/lib/libbsp/sh/gensh2/startup/hw_init.c +++ b/c/src/lib/libbsp/sh/gensh2/startup/hw_init.c @@ -3,8 +3,14 @@ * Pin and memory assignments assume * target is Hitachi SH7045F EVB ("lcevb") * + * Provides two initialization routines: + * A. 'void early_hw_init(void)' for 'start.S' + * sets up hw needed for early RTEMS boot, and + * B. 'void bsp_hw_init(void)' for 'bspstart.c' + * sets up hardware used by this BSP. + * * Author: John M. Mills (jmills@tga.com) - * COPYRIGHT(c) 1999, TGA Technologies, Inc + * COPYRIGHT(c) 2000, TGA Technologies, Inc * Norcross, GA 30071 U.S.A * * This program is distributed in the hope that it will be useful, @@ -40,74 +46,72 @@ #include <rtems/score/sh_io.h> #include <rtems/score/iosh7045.h> -/* exported entry */ -extern void hw_initialize (void); +/* exported entries */ +extern void bsp_hw_init (void); +extern void early_hw_init (void); -/* STANDALONE_EVB sets up bus, DRAM, PFC, and SCI0 */ -/* no STANDALONE_EVB accepts defaults, adds RESET, SCI1, WDT */ +/* called from 'start.S' on "#ifdef START_HW_INIT" */ +void early_hw_init (void) +{ +#ifdef STANDALONE_EVB + /* STANDALONE_EVB minimally sets up bus and DRAM here */ + /* no STANDALONE_EVB accepts defaults from debug monitor */ + + /* FIXME: replace 'magic numbers' with logical names */ + + write16(0x2020, BSC_BCR1); /* Bus width access - 32-bit on CS1 */ + write16(0xF3DD, BSC_BCR2); /* Idle cycles CS3-CS0 - 0 idle cycles*/ + write16(0xFF3F, BSC_WCR1); /* Waits for CS3-CS0 - 3 waits on CS1 */ + write16(0x000F, BSC_WCR2); /* Waits for DRAM/DMA access - default */ + write16(0x0000, BSC_DCR); /* DRAM control - default */ + write16(0x0000, BSC_RTCSR); /* DRAM refresh - default */ + write16(0x0000, BSC_RTCNT); /* DRAM refresh counter - default*/ + write16(0x0000, BSC_RTCOR); /* DRAM refresh compare match - default */ +#endif -/***************************************************/ -/* Inline function to access CPU features */ -/* from C. This makes use of GNU extensions. */ -/***************************************************/ + /* add early-init functions here */ -__inline__ void set_interrupt_mask(unsigned char mask) -{ - asm("mov.l r0,@-r15"); - asm("mov %0,r0"::"r"(mask)); - asm("and #0xF,r0"); - asm("rotl r0"); - asm("rotl r0"); - asm("rotl r0"); - asm("rotl r0"); - asm("ldc r0,sr"); - asm("mov.l @r15+,r0"); -} +}; -void hw_initialize (void) +/* to be called from 'bspstart.c' */ +void bsp_hw_init (void) { - int a; - unsigned8 temp8; - unsigned16 temp16; + int a; + unsigned8 temp8; + unsigned16 temp16; #ifdef STANDALONE_EVB - /* FIXME: replace 'magic numbers' */ - - write16(0x2020, BSC_BCR1); /* Bus width access - 32-bit on CS1 */ - write16(0xF3DD, BSC_BCR2); /* Idle cycles CS3-CS0 - 0 idle cycles*/ - write16(0xFF3F, BSC_WCR1); /* Waits for CS3-CS0 - 3 waits on CS1 */ - write16(0x000F, BSC_WCR2); /* Waits for DRAM/DMA access - default */ - write16(0x0000, BSC_DCR); /* DRAM control - default */ - write16(0x0000, BSC_RTCSR); /* DRAM refresh - default */ - write16(0x0000, BSC_RTCNT); /* DRAM refresh counter - default*/ - write16(0x0000, BSC_RTCOR); /* DRAM refresh compare match - default */ + /* STANDALONE_EVB: sets up PFC */ + /* no STANDALONE_EVB: accepts defaults, adds RESET */ + + /* FIXME: replace 'magic numbers' */ - write16(0x5000, PFC_PACRH); /* Pin function controller - WRHH, WRHL */ - write16(0x1550, PFC_PACRL1); /* Pin fun. controller - WRH,WRL,RD,CS1 */ - write16(0x0000, PFC_PBCR1); /* Pin function controller - default */ - write16(0x2005, PFC_PBCR2); /* Pin function controller - A18,A17,A16 */ - write16(0xFFFF, PFC_PCCR); /* Pin function controller - A15-A0 */ - write16(0x5555, PFC_PDCRH1; /* Pin function controller - D31-D24 */ - write16(0x5555, PFC_PDCRH2); /* Pin function controller - D23-D16 */ - write16(0xFFFF, PFC_PDCRL); /* Pin function controller - D15-D0 */ - write16(0x0000, PFC_IFCR); /* Pin function controller - default */ - write16(0x0005, PFC_PACRL2); /* Pin function controller - Tx0, Rx0 */ - - write16(0x00, PFC_PACRL2); /* default disconnects all I/O */ - /* pins; connected by DEVICE_open() */ + write16(0x5000, PFC_PACRH); /* Pin function controller - WRHH, WRHL */ + write16(0x1550, PFC_PACRL1); /* Pin fun. controller - WRH,WRL,RD,CS1 */ + write16(0x0000, PFC_PBCR1); /* Pin function controller - default */ + write16(0x2005, PFC_PBCR2); /* Pin fcn. controller - A18,A17,A16 */ + write16(0xFFFF, PFC_PCCR); /* Pin function controller - A15-A0 */ + write16(0x5555, PFC_PDCRH1); /* Pin function controller - D31-D24 */ + write16(0x5555, PFC_PDCRH2); /* Pin function controller - D23-D16 */ + write16(0xFFFF, PFC_PDCRL); /* Pin function controller - D15-D0 */ + write16(0x0000, PFC_IFCR); /* Pin function controller - default */ + write16(0x0000, PFC_PACRL2); /* default disconnects all I/O pins;*/ + /* [re-connected by DEVICE_open()] */ #endif - /* default hardware setup for SH7045F EVB */ + /* default hardware setup for SH7045F EVB */ - /* PFC: General I/O except pin 13 (reset): */ - temp16 = read16(PFC_PECR1) | 0x0800; - write16(temp16, PFC_PECR1); + /* PFC: General I/O except pin 13 (reset): */ + temp16 = read16(PFC_PECR1); + temp16 |= 0x0800; + write16(temp16, PFC_PECR1); - /* All I/O lines bits 7-0: */ - write16(0x00, PFC_PECR2); + /* All I/O lines bits 7-0: */ + write16(0x00, PFC_PECR2); - /* P5 (LED) out, all other pins in: */ - temp16 = read16(PFC_PEIOR) | 0x0020; - write16(temp16, PFC_PEIOR); + /* P5 (LED) out, all other pins in: */ + temp16 = read16(PFC_PEIOR); + temp16 |= 0x0020; + write16(temp16, PFC_PEIOR); } |