Hi,

On Mon, Mar 17, 2008 at 05:32:10PM -0500, Nishanth Menon wrote:
> Hi Sascha,
> 
> I think we dont have a seperate list for uboot-v2, 

No we have not. This is the right place ;)

> so, just wanted to
> know the opinion of having a single arch/arm/cpu/start-arm.S instead of
> multiple start-arm files. essentially providing hooks to arch,soc,board
> specific preinits can allow us to reuse major chunk of code..
> I have attached a sample start-arm.S (modified from start-arm920t.S) as
> reference.
> 
> Do let me know your comments and view as to how the initial handling can
> be made abstract enough to plug into requirements of future SOCs, boards
> etc. I am looking not to mash in #ifdef ARCH_XYZ for each of the SOC
> implementation I plan on doing.
> 
> Regards,
> Nishanth Menon

It is my plan to unify the different start.S files anyway, so good idea
;)

I'll comment on a diff to current start-arm920t.S as it's easier to see what
you actually changed.

> diff --git a/arch/arm/cpu/start-arm920t.S b/arch/arm/cpu/start-arm920t.S
> index db52ad9..a2c9ecb 100644
> --- a/arch/arm/cpu/start-arm920t.S
> +++ b/arch/arm/cpu/start-arm920t.S
> @@ -29,11 +29,7 @@
>   * @brief The very basic beginning of each CPU after reset
>   *
>   * @note
> - * This reset code can be used at least for:
> - *  - ARM920T
> - *  - i.MX1
> - *  - i.MX27
> - *  - i.MX31
> + * This reset code can be used at least for All ARM platforms
> 

I wouldn't say it works at least on all arm platforms, maybe for xscale
it's easier to have a start-xscale.S, but I haven't looked into this
very deeply. But for sure this code won't work on any non-arm platform.

>   *
>   * FIXME: Stop doxygen from parsing the text below
>   */
> @@ -134,32 +130,26 @@ reset:
>  #ifdef ARCH_HAS_INIT_LOWLEVEL
>       bl arch_init_lowlevel
>  #endif
> -     /*
> -      * flush v4 I/D caches
> -      */
> -     mov     r0, #0
> -     mcr     p15, 0, r0, c7, c7, 0   /* flush v3/v4 cache */
> -     mcr     p15, 0, r0, c8, c7, 0   /* flush v4 TLB */
> -
> -     /*
> -      * disable MMU stuff and caches
> +#ifdef CONFIG_SOC_PRE_INIT
> +     /* Do SOC specific initalization here
> +      * r0 contains the start address
> +      * This allows for SOC code to configure
> +      * based on current program execution context
> +      * E.g.: NOR boot Vs SDRAM boot.
>        */
> -     mrc     p15, 0, r0, c1, c0, 0
> -     bic     r0, r0, #0x00002300     /* clear bits 13, 9:8 (--V- --RS) */
> -     bic     r0, r0, #0x00000087     /* clear bits 7, 2:0 (B--- -CAM) */
> -     orr     r0, r0, #0x00000002     /* set bit 2 (A) Align */
> -     orr     r0, r0, #0x00001000     /* set bit 12 (I) I-Cache */
> -     mcr     p15, 0, r0, c1, c0, 0
> +     mov r0,pc
> +     bl soc_init_crit
> +#endif       /* CONFIG_SOC_PRE_INIT */

We do not have any SoC specific init at the moment, but when you need it
lets introduce it here.

>  
>       /*
> -      * before relocating, we have to setup RAM timing
> -      * because memory timing is board-dependend, you will
> -      * find a lowlevel_init.S in your board directory.
> +      * we do sys-critical inits only at reboot,
> +      * not when booting from ram!
>        */
>  #ifndef CONFIG_SKIP_LOWLEVEL_INIT
> -     bl      board_init_lowlevel
> +     bl      cpu_init_crit
>  #endif
>  
> +#ifndef CONFIG_SKIP_RELOCATE_UBOOT
>  relocate:                            /* relocate U-Boot to RAM           */
>       adr     r0, _start              /* r0 <- current position of code   */
>       ldr     r1, _TEXT_BASE          /* test if we run from flash or RAM */
> @@ -176,6 +166,7 @@ copy_loop:
>       stmia   r1!, {r3-r10}           /* copy to   target address [r1]    */
>       cmp     r0, r2                  /* until source end addreee [r2]    */
>       ble     copy_loop
> +#endif       /* CONFIG_SKIP_RELOCATE_UBOOT */
>

No need to introduce this option. Look into the various board specific
lowlevel-init.S. They all check whether we run from RAM or not, so all
binaries can run from RAM or ROM without changes.
In case we run with start address == link address the relocation is
skipped anyway.

 
>       /* Set up the stack                                                 */
>  stack_setup:
> @@ -199,6 +190,48 @@ clbss_l:str      r2, [r0]                /* clear 
> loop...                    */
>  
>  _start_armboot:      .word start_uboot
>  
> +/*************************************************************************
> + *
> + * CPU_init_critical registers
> + *
> + * setup important registers
> + * setup memory timing
> + *
> + ************************************************************************/
> +#ifndef CONFIG_SKIP_LOWLEVEL_INIT
> +cpu_init_crit:
> +     /*
> +      * flush v4 I/D caches
> +      */
> +     mov     r0, #0
> +     mcr     p15, 0, r0, c7, c7, 0   /* flush v3/v4 cache */
> +     mcr     p15, 0, r0, c8, c7, 0   /* flush v4 TLB */
> +
> +     /*
> +      * disable MMU stuff and caches
> +      */
> +     mrc     p15, 0, r0, c1, c0, 0
> +     bic     r0, r0, #0x00002300     /* clear bits 13, 9:8 (--V- --RS) */
> +     bic     r0, r0, #0x00000087     /* clear bits 7, 2:0 (B--- -CAM) */
> +#ifdef CONFIG_ARM_ALIGN_ABRT
> +     orr     r0, r0, #0x00000002     /* set bit 2 (A) Align */
> +#endif
> +#ifdef CONFIG_ARM_I_CACHE
> +     orr     r0, r0, #0x00001000     /* set bit 12 (I) I-Cache */
> +#endif
> +     mcr     p15, 0, r0, c1, c0, 0
> +
> +     /*
> +      * before relocating, we have to setup RAM timing
> +      * because memory timing is board-dependent, you will
> +      * find a lowlevel_init.S in your board directory.
> +      */
> +     mov     ip, lr
> +     bl      board_init_lowlevel
> +     mov     lr, ip
> +     mov     pc, lr
> +#endif /* CONFIG_SKIP_LOWLEVEL_INIT */

Do we really need the SKIP_LOWLEVEL_INIT option? It should be safe to
run all times.

Sascha

-- 
Pengutronix e.K. - Linux Solutions for Science and Industry
-----------------------------------------------------------
Kontakt-Informationen finden Sie im Header dieser Mail oder
auf der Webseite -> http://www.pengutronix.de/impressum/ <-

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users

Reply via email to