From f560d0ac2228ecdc9d4c161172c5dddca3015a30 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Sun, 14 Sep 2008 20:22:57 +0000 Subject: 2008-09-14 Joel Sherrill * Makefile.am, configure.ac, startup/bspstart.c: Split out bsp_get_work_area() into its own file and user BSP Framework to perform more initialization. Use same shared implementation as edb7312 and csb336. --- c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c | 255 +++++++----------------- 1 file changed, 69 insertions(+), 186 deletions(-) (limited to 'c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c') diff --git a/c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c b/c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c index 8a1616d033..b18171d20b 100644 --- a/c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c +++ b/c/src/lib/libbsp/arm/rtl22xx/startup/bspstart.c @@ -5,220 +5,103 @@ * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at - * * http://www.rtems.com/license/LICENSE. * - * * $Id$ -*/ + */ #include #include #include #include - -/*************************************************************/ -/* Macros */ -/*************************************************************/ - -/*************************************************************/ -/* Data Structures */ -/*************************************************************/ - -/*************************************************************/ -/* Global Variables */ -/*************************************************************/ -/*FIX ME:we do not have SDRAM, but can I define mutiple SRAM?*/ - -extern void *_flash_size; -extern void *_flash_base; -extern void *_sdram_size; -extern void *_sdram_base; -extern void *_bss_free_start; -extern void *_bss_start_; -extern void *_bss_end_; - -unsigned long free_mem_start; -unsigned long free_mem_end; - -/*************************************************************/ -/* Function prototypes */ -/*************************************************************/ +/* + * Function prototypes + */ extern void rtems_irq_mngt_init(void); void bsp_libc_init( void *, uint32_t, int ); extern void UART0_Ini(void); extern void printi(unsigned long); -/**************************************************************************/ -/* */ -/* NAME: bps_pretasking_hook - Function to setup system before startup */ -/* */ -/* DESCRIPTION: */ -/* This function is called before drivers are initialized and used */ -/* to setup libc and BSP extensions. It configures non cacheable */ -/* SDRAM, SRAM, AIM, and ADM regions and sets up the CPU's memory */ -/* protection unit. */ -/* */ -/* GLOBALS USED: */ -/* free_mem_start */ -/* free_mem_end */ -/* */ -/* RESTRICTIONS/LIMITATIONS: */ -/* Since this function is setting up libc, it cannot use and libc */ -/* functions. */ -/* */ -/**************************************************************************/ -void bsp_pretasking_hook(void) -{ - uint32_t heap_start; - uint32_t heap_size; - - /* - * Set up the heap. It uses all free SDRAM except that reserved - * for non-cached uses. - */ - heap_start = free_mem_start; - - /* heap_size = (free_mem_end - heap_start - MEM_NOCACHE_SIZE); */ - /*the board seems to have only 512K memory, we use 256K as heap, 256K to - store the .text*/ - heap_size = 0x40000; - - bsp_libc_init((void *)heap_start, heap_size, 0); -} /* bsp_pretasking_hook */ - -/**************************************************************************/ -/* */ -/* NAME: bsp_start_default - BSP initialization function */ -/* */ -/* DESCRIPTION: */ -/* This function is called before RTEMS is initialized and used */ -/* adjust the kernel's configuration. */ -/* */ -/* This function also configures the CPU's memory protection unit. */ -/* */ -/* GLOBALS USED: */ -/* Configuration */ -/* free_mem_start */ -/* free_mem_end */ -/* free_mem_nocache_start */ -/* _bss_free_start */ -/* mpu_region_tbl */ -/* */ -/* */ -/* */ -/* */ -/* RESTRICTIONS/LIMITATIONS: */ -/* Since RTEMS is not configured, no RTEMS functions can be called. */ -/* */ -/**************************************************************************/ + +/* + * bsp_start_default - BSP initialization function + * + * This function is called before RTEMS is initialized and used + * adjust the kernel's configuration. + * + * This function also configures the CPU's memory protection unit. + * + * RESTRICTIONS/LIMITATIONS: + * Since RTEMS is not configured, no RTEMS functions can be called. + * + */ void bsp_start_default( void ) { - PINSEL2 =0x0f814914; - BCFG0 = 0x1000ffef; - BCFG1 = 0x1000ffef; + PINSEL2 =0x0f814914; + BCFG0 = 0x1000ffef; + BCFG1 = 0x1000ffef; - MEMMAP = 0x2; //debug and excute outside chip + MEMMAP = 0x2; //debug and excute outside chip - PLLCON = 1; -#if (Fpclk / (Fcclk / 4)) == 1 + PLLCON = 1; + #if (Fpclk / (Fcclk / 4)) == 1 VPBDIV = 0; -#endif -#if (Fpclk / (Fcclk / 4)) == 2 + #endif + #if (Fpclk / (Fcclk / 4)) == 2 VPBDIV = 2; -#endif -#if (Fpclk / (Fcclk / 4)) == 4 + #endif + #if (Fpclk / (Fcclk / 4)) == 4 VPBDIV = 1; -#endif + #endif -#if (Fcco / Fcclk) == 2 + #if (Fcco / Fcclk) == 2 PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5); -#endif -#if (Fcco / Fcclk) == 4 + #endif + #if (Fcco / Fcclk) == 4 PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5); -#endif -#if (Fcco / Fcclk) == 8 + #endif + #if (Fcco / Fcclk) == 8 PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5); -#endif -#if (Fcco / Fcclk) == 16 + #endif + #if (Fcco / Fcclk) == 16 PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5); -#endif - PLLFEED = 0xaa; - PLLFEED = 0x55; - while((PLLSTAT & (1 << 10)) == 0); - PLLCON = 3; - PLLFEED = 0xaa; - PLLFEED = 0x55; - - /* memory configure */ - /* it is not needed in my formatter board */ - //MAMCR = 0; - // MAMTIM = 3; - //MAMCR = 2; - - /* init VIC */ - VICIntEnClr = 0xffffffff; - VICVectAddr = 0; - VICIntSelect = 0; - - /* disable interrupts */ - /* Setup interrupt controller.*/ - VICProtection = 0; - - /* Place RTEMS workspace at beginning of free memory. */ - Configuration.work_space_start = (void *)&_bss_free_start; - - free_mem_start = ((uint32_t)&_bss_free_start + - rtems_configuration_get_work_space_size()); - - free_mem_end = ((uint32_t)&_sdram_base + (uint32_t)&_sdram_size); - - UART0_Ini(); - - #if 0 - printk(" bsp_start_default 0x%08x\n", (int)&bsp_start_defalt); - printk(" _bss_free_start 0x%08x\n", (int)&_bss_free_start); - printk(" free_mem_start 0x%08x\n", (int)free_mem_start); - printk(" _sdram_base 0x%08x\n", (int)&_sdram_base); - printk(" _sdram_size 0x%08x\n", (int)&_sdram_size); - printk(" free_mem_end 0x%08x\n", (int)free_mem_end); - #endif - - /* - * Init rtems exceptions management - */ - rtems_exception_init_mngt(); - - /* - * Init rtems interrupt management - */ - rtems_irq_mngt_init(); - - /* - * The following information is very useful when debugging. - */ -#if 0 - - printk( "work_space_size = 0x%x\n", - rtems_configuration_get_work_space_size() ); - printk( "microseconds_per_tick = 0x%x\n", - rtems_configuration_get_microseconds_per_tick() ); - printk( "ticks_per_timeslice = 0x%x\n", - rtems_configuration_get_ticks_per_timeslice() ); - - /* printk( "_stack_size = 0x%x\n", _stack_size );*/ - printk( "work_space_start = 0x%x\n", Configuration.work_space_start ); - printk( "work_space_size = 0x%x\n", rtems_configuration_get_work_space_size() ); -#endif + #endif + PLLFEED = 0xaa; + PLLFEED = 0x55; + while((PLLSTAT & (1 << 10)) == 0); + PLLCON = 3; + PLLFEED = 0xaa; + PLLFEED = 0x55; + + /* memory configure */ + /* it is not needed in my formatter board */ + //MAMCR = 0; + // MAMTIM = 3; + //MAMCR = 2; + + /* init VIC */ + VICIntEnClr = 0xffffffff; + VICVectAddr = 0; + VICIntSelect = 0; + + /* disable interrupts */ + /* Setup interrupt controller.*/ + VICProtection = 0; + + UART0_Ini(); + + /* + * Init rtems exceptions management + */ + rtems_exception_init_mngt(); + + /* + * Init rtems interrupt management + */ + rtems_irq_mngt_init(); } /* bsp_start */ -/** - * Reset the system. - * - * This functions enables the watchdog and waits for it to - * fire, thus resetting the system. - */ /** * Reset the system. * -- cgit v1.2.3