On 21:56 Sun 03 May     , Magnus Lilja wrote:
> This patch adds the NAND SPL framework needed to boot i.MX31 boards
> from NAND.
> 
> The patch is based on the work by Maxim Artamonov
> <scn1874 at yandex.ru > (which was signed-off-by him).
so please add it too
and please fix the @
> 
> Signed-off-by: Magnus Lilja <lilja.mag...@gmail.com>
> ---
>  cpu/arm1136/start.S                   |   29 +++--
>  include/asm-arm/arch-mx31/mx31-regs.h |   90 +++++++++++++
>  nand_spl/nand_boot_mx31.c             |  223 
> +++++++++++++++++++++++++++++++++
>  3 files changed, 331 insertions(+), 11 deletions(-)
>  create mode 100644 nand_spl/nand_boot_mx31.c
> 
> diff --git a/cpu/arm1136/start.S b/cpu/arm1136/start.S
> index e622338..9bbbaf1 100644
> --- a/cpu/arm1136/start.S
> +++ b/cpu/arm1136/start.S
> @@ -1,6 +1,9 @@
>  /*
>   *  armboot - Startup Code for OMP2420/ARM1136 CPU-core
>   *
> + *
> + *  Copyright (c) 2008 Maxim Artamonov, <scn1874 at yandex.ru>
> + *
please remove
>   *  Copyright (c) 2004       Texas Instruments <r-woodru...@ti.com>
>   *
>   *  Copyright (c) 2001       Marius Gr�ger <m...@sysgo.de>
> @@ -32,7 +35,7 @@
>  #include <version.h>
>  .globl _start
>  _start: b    reset
> -#ifdef CONFIG_ONENAND_IPL
> +#if defined(CONFIG_ONENAND_IPL) || defined(CONFIG_NAND_SPL)
create a better CONFIG_
because we could need for other boot mode
>       ldr     pc, _hang
>       ldr     pc, _hang
>       ldr     pc, _hang
> @@ -156,9 +159,9 @@ 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 */
>       cmp     r0, r1                  /* don't reloc during debug         */
> -#ifndef CONFIG_ONENAND_IPL
> +#if !defined(CONFIG_ONENAND_IPL) && !defined(CONFIG_NAND_SPL)
>       beq     stack_setup
> -#endif       /* CONFIG_ONENAND_IPL */
> +#endif       /* !CONFIG_ONENAND_IPL && !CONFIG_NAND_SPL*/
>  
>  #endif       /* CONFIG_ONENAND_IPL */
> +
<snip>
> diff --git a/nand_spl/nand_boot_mx31.c b/nand_spl/nand_boot_mx31.c
> new file mode 100644
> index 0000000..d698d2a
> --- /dev/null
> +++ b/nand_spl/nand_boot_mx31.c
> @@ -0,0 +1,223 @@
<snip>
> +static void mx31_nand_page_address(unsigned int page_address)
> +{
> +     unsigned int page_count;
> +
> +     writew(0x00, NFC_FLASH_ADDR);
> +     writew(NFC_ADDR, NFC_CONFIG2);
> +     mx31_wait_ready();
> +
> +     /* code only for 2kb flash */
> +     if (CFG_NAND_PAGE_SIZE == 0x800) {
> +             writew(0x00, NFC_FLASH_ADDR);
> +             writew(NFC_ADDR, NFC_CONFIG2);
> +             mx31_wait_ready();
> +     }
> +
> +     page_count = CFG_NAND_CHIP_SIZE / CFG_NAND_PAGE_SIZE;
please use CONFIG_SYS_ or CONFIG_
and why not detect it?
> +
> +     if (page_address <= page_count) {
> +             page_count--; /* transform 0x01000000 to 0x00ffffff */
> +             do {
> +                     writew(page_address & 0xff, NFC_FLASH_ADDR);
> +                     writew(NFC_ADDR, NFC_CONFIG2);
> +                     mx31_wait_ready();
> +                     page_address = page_address >> 8;
> +                     page_count = page_count >> 8;
> +             } while (page_count);
> +     }
> +}
> +
<snip>
> +
> +static int nand_load(unsigned int from, unsigned int size, unsigned char 
> *buf)
> +{
> +     int i, bb;
> +
> +     mx31_nand_init();
> +
> +     /* convert from to page number */
> +     from = from / CFG_NAND_PAGE_SIZE;
> +
> +     i = 0;
> +
> +     while (i < (size/CFG_NAND_PAGE_SIZE)) {
> +             if ((from * CFG_NAND_PAGE_SIZE) >= CFG_NAND_CHIP_SIZE)
> +                     return 2; /* memory segment violation */
> +
> +             bb = mx31_read_page(from, buf);
> +
> +             if (bb < 0)
> +                     return -1;
> +
> +             /* checking first page of each block */
> +             /* if this page has bb marker, then skip whole block */
> +             if ((!(from % CFG_NAND_PAGES_PER_BLOCK)) && bb) {
please use CONFIG_SYS_ or CONFIG_
and why not detect it?
> +                     from = from + CFG_NAND_PAGES_PER_BLOCK;
> +             } else {
> +                     i++;
> +                     from++;
> +                     buf = buf + CFG_NAND_PAGE_SIZE;
please use CONFIG_SYS_ or CONFIG_
and why not detect it?
> +             }
> +     }
> +
> +     return 0;
> +}
> +
> +/*
> + * The main entry for NAND booting. It's necessary that SDRAM is already
> + * configured and available since this code loads the main U-Boot image
> + * from NAND into SDRAM and starts it from there.
> + */
> +void nand_boot(void)
> +{
> +     __attribute__((noreturn)) void (*uboot)(void);
> +
> +     /* CFG_NAND_U_BOOT_OFFS and CFG_NAND_U_BOOT_SIZE must */
please use CONFIG_SYS_ or CONFIG_
and so on
> +     /* be aligned to full pages */
please use this style of multiple ligne comment
/*
 *
 */

Best Regards,
J.
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to