On 13/12/2011 11:20, Simon Schwarz wrote:
> From: Simon Schwarz <simonschwarz...@googlemail.com>
> 
> This adds Linux booting to the SPL
> 
> This depends on CONFIG_MACH_TYPE patch by Igor Grinberg
> (http://article.gmane.org/gmane.comp.boot-loaders.u-boot/105809)
> 
> Related CONFIGs:
> CONFIG_SPL_OS_BOOT
>       Activates/Deactivates the OS booting feature
> CONFIG_SPL_OS_BOOT_KEY
>       defines the IO-pin number u-boot switch - if pressed u-boot is
>       booted
> CONFIG_SYS_NAND_SPL_KERNEL_OFFS
>       Offset in NAND of direct boot kernel image to use in SPL
> CONFIG_SYS_SPL_ARGS_ADDR
>       Address where the kernel boot arguments are expected - this is
>       normaly RAM-begin + 0x100
> 
> Signed-off-by: Simon Schwarz <simonschwarz...@gmail.com>
> ---

Hi Simon and Myself (as I will continue Simon's work),

> -
>  void spl_nand_load_image(void)
>  {
>       struct image_header *header;
> @@ -50,7 +49,7 @@ void spl_nand_load_image(void)
>       /*use CONFIG_SYS_TEXT_BASE as temporary storage area */
>       header = (struct image_header *)(CONFIG_SYS_TEXT_BASE);
>  #ifdef CONFIG_SPL_OS_BOOT
> -     if (!spl_uboot_key()) {
> +     if (!spl_start_uboot()) {
>               /*
>                * load parameter image
>                * load to temp position since nand_spl_load_image reads
> @@ -74,9 +73,17 @@ void spl_nand_load_image(void)
>               nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS,
>                       CONFIG_SYS_NAND_PAGE_SIZE, (void *)header);
>               spl_parse_image_header(header);
> -             nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS,
> -                     spl_image.size, (void *)spl_image.load_addr);
> -     } else
> +             if (header->ih_os == IH_OS_LINUX) {
> +                     /* happy - was a linux */
> +                     nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS,
> +                             spl_image.size, (void *)spl_image.load_addr);

>From my test I found a bug here. The image is loaded, but because we do
not return from function, code goes on and loads u-boot, too. As result,
u-boot instead of linux is always started.

If I am not overseeing something, I'll fix in next version.

> +             } else {
> +                     printf("The Expected Linux image was not"
> +                             "found. Please check your NAND"
> +                             "configuration.\n");
> +                     printf("Trying to start u-boot now...\n");
> +             }
> +     }
>  #endif
>       {

in fact we have not anymore the "else" branch, and now u-boot is loaded.

Regards,
Stefano

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: off...@denx.de
=====================================================================
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to