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 <h...@denx.de>
Reviewed-by: Andreas Bießmann <andreas.de...@googlemail.com>
Reviewed-by: Bo Shen <voice.s...@atmel.com>

---
on the siemens taurus board, this option saved 0x14d bytes

Changes in v3:
add Reviewed-by from Bo Shen

Changes in v2:
add Reviewed-by: Andreas Bießmann <andreas.de...@googlemail.com>

 README                |  4 ++++
 common/spl/spl.c      | 15 ++++++++++-----
 common/spl/spl_nand.c | 13 +++++++++++++
 include/spl.h         |  1 +
 4 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/README b/README
index 7b5538e..a34902b 100644
--- a/README
+++ b/README
@@ -3605,6 +3605,10 @@ FIT uImage format:
                Support for the MTD subsystem within SPL.  Useful for
                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
                Set for the SPL on PPC mpc8xxx targets, support for
                drivers/ddr/fsl/libddr.o in SPL binary.
diff --git a/common/spl/spl.c b/common/spl/spl.c
index d85bab3..f01a21c 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -62,6 +62,15 @@ __weak void spl_board_prepare_for_linux(void)
        /* 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)
 {
        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 */
                debug("mkimage signature not found - ih_magic = %x\n",
                        header->ih_magic);
-               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";
+               spl_set_header_raw_uboot();
        }
 }
 
diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c
index 9b200bc..b7801cb 100644
--- a/common/spl/spl_nand.c
+++ b/common/spl/spl_nand.c
@@ -10,6 +10,18 @@
 #include <asm/io.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)
 {
        struct image_header *header;
@@ -82,3 +94,4 @@ void spl_nand_load_image(void)
                spl_image.size, (void *)spl_image.load_addr);
        nand_deselect();
 }
+#endif
diff --git a/include/spl.h b/include/spl.h
index 16b3566..b2e5bf7 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -35,6 +35,7 @@ extern struct spl_image_info spl_image;
 void preloader_console_init(void);
 u32 spl_boot_device(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_board_prepare_for_linux(void);
 void __noreturn jump_to_image_linux(void *arg);
-- 
1.8.3.1

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

Reply via email to