[U-Boot] [PATCH 4/5] nand: sunxi: Add multiimage preload option
Daniel Kochmański
dkochmanski at turtle-solutions.eu
Wed Apr 29 17:03:00 CEST 2015
Patch adds support in spl_nand for preloading multiimage before
loading u-boot into memory. It might be used in example to put in
memory single image containing boot script, kernel and device
tree.
Behavior is triggered, if CONFIG_SPL_NAND_MULTI_PRELOAD is defined -
multiimage is loaded from CONFIG_SYS_NAND_MULTI_OFFS to address
specified on image creation.
Additionally defines it in sunxi-common.h conditionally when
CONFIG_SPL_NAND_SUPPORT is enabled. SPL tries to preload image from
beginning of non-syndrome area.
Signed-off-by: Daniel Kochmański <dkochmanski at turtle-solutions.eu>
Cc: Ian Campbell <ijc at hellion.org.uk>
Cc: Hans De Goede <hdegoede at redhat.com>
---
README | 6 ++++++
common/spl/spl_nand.c | 14 ++++++++++++++
include/configs/sunxi-common.h | 2 ++
3 files changed, 22 insertions(+)
diff --git a/README b/README
index 4ccf3cb..444b02f 100644
--- a/README
+++ b/README
@@ -3719,6 +3719,9 @@ FIT uImage format:
CONFIG_SPL_NAND_BOOT
Add support NAND boot
+ CONFIG_SPL_NAND_MULTI_PRELOAD
+ Preload multiimage from predefined offset in NAND.
+
CONFIG_SYS_NAND_U_BOOT_OFFS
Location in NAND to read U-Boot from
@@ -3735,6 +3738,9 @@ FIT uImage format:
CONFIG_SYS_NAND_U_BOOT_START
Entry point in loaded image to jump to
+ CONFIG_SYS_NAND_MULTI_OFFS
+ Location in NAND to read multiimage from.
+
CONFIG_SYS_NAND_HW_ECC_OOBFIRST
Define this if you need to first read the OOB and then the
data. This is used, for example, on davinci platforms.
diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c
index 7c44de1..f87db0a 100644
--- a/common/spl/spl_nand.c
+++ b/common/spl/spl_nand.c
@@ -89,6 +89,20 @@ void spl_nand_load_image(void)
(void *)spl_image.load_addr);
#endif
#endif
+#ifdef CONFIG_SPL_NAND_MULTI_PRELOAD
+ /* Load multiimage */
+ puts("Preloading multiimage.\n");
+ nand_spl_load_image(CONFIG_SYS_NAND_MULTI_OFFS,
+ sizeof(*header), (void *)header);
+ spl_parse_image_header(header);
+ if (header->ih_type == IH_TYPE_MULTI) {
+ nand_spl_load_image(CONFIG_SYS_NAND_MULTI_OFFS,
+ spl_image.size,
+ (void *)(unsigned long)spl_image.load_addr);
+ } else {
+ puts("Multiimage header didn't match.\n");
+ }
+#endif /* CONFIG_SPL_NAND_MULTI_PRELOAD */
/* Load u-boot */
nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
sizeof(*header), (void *)header);
diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
index 15fe512..0b4ea7e 100644
--- a/include/configs/sunxi-common.h
+++ b/include/configs/sunxi-common.h
@@ -328,9 +328,11 @@ extern int soft_i2c_gpio_scl;
#ifdef CONFIG_SPL_NAND_SUPPORT
#define CONFIG_NAND
#define CONFIG_NAND_SUNXI
+#define CONFIG_SPL_NAND_MULTI_PRELOAD
#define CONFIG_CMD_SPL_WRITE_SIZE 0x000400
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x008000
#define CONFIG_SYS_NAND_U_BOOT_BACKUP_OFFS 0x208000
+#define CONFIG_SYS_NAND_MULTI_OFFS 0x400000
#endif /* CONFIG_SPL_NAND_SUPPORT */
#define CONFIG_MISC_INIT_R
--
2.3.6
More information about the U-Boot
mailing list