spl, nand: add option to boot raw u-boot.bin image only

enable to boot only a raw u-boot.bin image from nand with the
CONFIG_SPL_NAND_RAW_ONLY define. This option saves space on
boards where spl space is low.

Signed-off-by: Heiko Schocher <hs@denx.de>
Reviewed-by: Andreas Bießmann <andreas.devel@googlemail.com>
Reviewed-by: Bo Shen <voice.shen@atmel.com>
Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
master
Heiko Schocher 10 years ago committed by Tom Rini
parent bd1bb3c6a7
commit 0c3117b1f7
  1. 4
      README
  2. 15
      common/spl/spl.c
  3. 13
      common/spl/spl_nand.c
  4. 1
      include/spl.h

@ -3605,6 +3605,10 @@ FIT uImage format:
Support for the MTD subsystem within SPL. Useful for Support for the MTD subsystem within SPL. Useful for
environment on NAND support within SPL. environment on NAND support within SPL.
CONFIG_SPL_NAND_RAW_ONLY
Support to boot only raw u-boot.bin images. Use this only
if you need to save space.
CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
Set for the SPL on PPC mpc8xxx targets, support for Set for the SPL on PPC mpc8xxx targets, support for
drivers/ddr/fsl/libddr.o in SPL binary. drivers/ddr/fsl/libddr.o in SPL binary.

@ -62,6 +62,15 @@ __weak void spl_board_prepare_for_linux(void)
/* Nothing to do! */ /* Nothing to do! */
} }
void spl_set_header_raw_uboot(void)
{
spl_image.size = CONFIG_SYS_MONITOR_LEN;
spl_image.entry_point = CONFIG_SYS_UBOOT_START;
spl_image.load_addr = CONFIG_SYS_TEXT_BASE;
spl_image.os = IH_OS_U_BOOT;
spl_image.name = "U-Boot";
}
void spl_parse_image_header(const struct image_header *header) void spl_parse_image_header(const struct image_header *header)
{ {
u32 header_size = sizeof(struct image_header); u32 header_size = sizeof(struct image_header);
@ -93,11 +102,7 @@ void spl_parse_image_header(const struct image_header *header)
/* Signature not found - assume u-boot.bin */ /* Signature not found - assume u-boot.bin */
debug("mkimage signature not found - ih_magic = %x\n", debug("mkimage signature not found - ih_magic = %x\n",
header->ih_magic); header->ih_magic);
spl_image.size = CONFIG_SYS_MONITOR_LEN; spl_set_header_raw_uboot();
spl_image.entry_point = CONFIG_SYS_UBOOT_START;
spl_image.load_addr = CONFIG_SYS_TEXT_BASE;
spl_image.os = IH_OS_U_BOOT;
spl_image.name = "U-Boot";
} }
} }

@ -10,6 +10,18 @@
#include <asm/io.h> #include <asm/io.h>
#include <nand.h> #include <nand.h>
#if defined(CONFIG_SPL_NAND_RAW_ONLY)
void spl_nand_load_image(void)
{
nand_init();
nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
CONFIG_SYS_NAND_U_BOOT_SIZE,
(void *)CONFIG_SYS_NAND_U_BOOT_DST);
spl_set_header_raw_uboot();
nand_deselect();
}
#else
void spl_nand_load_image(void) void spl_nand_load_image(void)
{ {
struct image_header *header; struct image_header *header;
@ -82,3 +94,4 @@ void spl_nand_load_image(void)
spl_image.size, (void *)spl_image.load_addr); spl_image.size, (void *)spl_image.load_addr);
nand_deselect(); nand_deselect();
} }
#endif

@ -35,6 +35,7 @@ extern struct spl_image_info spl_image;
void preloader_console_init(void); void preloader_console_init(void);
u32 spl_boot_device(void); u32 spl_boot_device(void);
u32 spl_boot_mode(void); u32 spl_boot_mode(void);
void spl_set_header_raw_uboot(void);
void spl_parse_image_header(const struct image_header *header); void spl_parse_image_header(const struct image_header *header);
void spl_board_prepare_for_linux(void); void spl_board_prepare_for_linux(void);
void __noreturn jump_to_image_linux(void *arg); void __noreturn jump_to_image_linux(void *arg);

Loading…
Cancel
Save