[U-Boot] [PATCH] [ONENAND] Reduce OneNAND IPL code size v2

Scott Wood scottwood at freescale.com
Tue Dec 9 21:50:58 CET 2008


On Mon, Nov 10, 2008 at 01:53:46PM +0900, Kyungmin Park wrote:
> OneNAND IPL has common codes for RAM init, load data, and jump to 2nd
> bootloader, but it's common code used about 300~400 bytes. So board
> specific codes, such as lowlevel_init, can't has enough code. It make
> a difficult to implement OneNAND IPL.
> 
> This patch make this common code as small as possible. and give
> lowlevel_init can have more codes.

Sorry for the delay; I missed this patch earlier.

> Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
> ---
> diff --git a/cpu/arm1136/start.S b/cpu/arm1136/start.S
> index e622338..132cc4a 100644
> --- a/cpu/arm1136/start.S
> +++ b/cpu/arm1136/start.S
> @@ -33,23 +33,7 @@
>  .globl _start
>  _start: b	reset
>  #ifdef CONFIG_ONENAND_IPL
> -	ldr	pc, _hang
> -	ldr	pc, _hang
> -	ldr	pc, _hang
> -	ldr	pc, _hang
> -	ldr	pc, _hang
> -	ldr	pc, _hang
> -	ldr	pc, _hang
> -
> -_hang:
> -	.word	do_hang
> -	.word	0x12345678
> -	.word	0x12345678
> -	.word	0x12345678
> -	.word	0x12345678
> -	.word	0x12345678
> -	.word	0x12345678
> -	.word	0x12345678	/* now 16*4=64 */
> +	. = _start + 64		/* now 16*4=64 */
>  #else

Can you do a branch-to-self here that will accomplish the same thing,
without needing do_hang later?

> diff --git a/onenand_ipl/onenand_boot.c b/onenand_ipl/onenand_boot.c
> index aff62d2..2440d8b 100644
> --- a/onenand_ipl/onenand_boot.c
> +++ b/onenand_ipl/onenand_boot.c
> @@ -39,6 +39,7 @@ int print_info(void)
>  
>  typedef int (init_fnc_t)(void);
>  
> +#ifdef CONFIG_USE_ONENAND_INIT
>  init_fnc_t *init_sequence[] = {

Is there anything that's going to use this?  If not, just remove the
code.

> +#ifdef CONFIG_USE_ONENAND_INIT
>  void hang(void)
>  {
>  	/* if board_hang() returns, hange here */
>  	printf("X-Loader hangs\n");
>  	for (;;);
>  }
> +#endif

X-Loader?

> diff --git a/onenand_ipl/onenand_ipl.h b/onenand_ipl/onenand_ipl.h
> index 3387998..438e58c 100644
> --- a/onenand_ipl/onenand_ipl.h
> +++ b/onenand_ipl/onenand_ipl.h
> @@ -23,7 +23,7 @@
>  
>  #include <linux/mtd/onenand_regs.h>
>  
> -#define ONENAND_BLOCK_SIZE              2048
> +#define ONENAND_BLOCK_SIZE              0x20000

This doesn't seem to be referenced at all any more.  Was the old value
simply wrong?

-Scott


More information about the U-Boot mailing list