@@ -399,6 +399,16 @@ config SPL_NOR_SUPPORT
a memory-mapped device makes it very easy to access. Loading from
NOR is typically achieved with just a memcpy().
+config SPL_NOR_COPY_ENTIRE_IMAGE
+ bool
+ depends on SPL_NOR_SUPPORT
+ prompt "Copy entire image from NOR memory"
+ default n
+ help
+ By default the SPL NOR driver supports copying only payload to
+ destination address. Say Y if you want to copy entire image (including
+ its image header).
+
config SPL_ONENAND_SUPPORT
bool "Support OneNAND flash"
depends on SPL
@@ -10,13 +10,15 @@
static int spl_nor_load_image(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev)
{
+ void *img_src;
int ret;
+#ifndef CONFIG_SPL_NOR_COPY_ENTIRE_IMAGE
/*
* Loading of the payload to SDRAM is done with skipping of
* the mkimage header in this SPL NOR driver
*/
spl_image->flags |= SPL_COPY_PAYLOAD_ONLY;
-
+#endif
#ifdef CONFIG_SPL_OS_BOOT
if (!spl_start_uboot()) {
const struct image_header *header;
@@ -65,9 +67,13 @@ static int spl_nor_load_image(struct spl_image_info *spl_image,
if (ret)
return ret;
+ img_src = (void *)CONFIG_SYS_UBOOT_BASE;
+#ifndef CONFIG_SPL_NOR_COPY_ENTIRE_IMAGE
+ img_src += sizeof(struct image_header));
+#endif
+
memcpy((void *)(unsigned long)spl_image->load_addr,
- (void *)(CONFIG_SYS_UBOOT_BASE + sizeof(struct image_header)),
- spl_image->size);
+ img_src, spl_image->size);
return 0;
}
This define gives the possibility to copy entire image (including header - e.g. u-boot.img) from NOR parallel memory to e.g. SDRAM. The current code only supports loading the raw binary image (the u-boot.bin). The legacy behavior is preserved, since other board don't enabled this option. Signed-off-by: Lukasz Majewski <l.majewski@majess.pl> --- Changes for v2: - Update to code to apply on v2016.11+ Changes for v3: - Write better commit mesage to explain the problem --- common/spl/Kconfig | 10 ++++++++++ common/spl/spl_nor.c | 12 +++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-)