
On 11/28/2016 07:27 AM, Lukasz Majewski wrote:
This define gives the possibility to copy entire image (including header) from NOR parallel memory to e.g. SDRAM.
The legacy behavior is preserved, since other board don't enabled this option.
Signed-off-by: Lukasz Majewski l.majewski@majess.pl
What is the usecase ?
common/spl/Kconfig | 10 ++++++++++ common/spl/spl_nor.c | 12 +++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/common/spl/Kconfig b/common/spl/Kconfig index df9e0ce..d31b26d 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -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 diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index 6bfa399..44f3e99 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -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;
}