[PATCH] common: spl: nand: improve u-boot offsets overriding
Weijie Gao
weijie.gao at mediatek.com
Tue Apr 14 10:03:21 CEST 2026
This patch introduces spl_nand_get_uboot_raw_page_redund() to wrap the
CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND macro, similar as what
spl_nand_get_uboot_raw_page() has already done.
Also, make it possible to use these functions without defining related
macros.
This patch also replaces all references to CONFIG_SYS_NAND_U_BOOT_OFFS and
CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND with the return value of the two
functions mentioned above.
Signed-off-by: Weijie Gao <weijie.gao at mediatek.com>
---
common/spl/spl_nand.c | 38 ++++++++++++++++++++++++++------------
1 file changed, 26 insertions(+), 12 deletions(-)
diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c
index f449b31f594..cce2e1a6df3 100644
--- a/common/spl/spl_nand.c
+++ b/common/spl/spl_nand.c
@@ -18,21 +18,34 @@
uint32_t __weak spl_nand_get_uboot_raw_page(void)
{
+#ifdef CONFIG_SYS_NAND_U_BOOT_OFFS
return CONFIG_SYS_NAND_U_BOOT_OFFS;
+#else
+ return 0;
+#endif
+}
+
+uint32_t __weak spl_nand_get_uboot_raw_page_redund(void)
+{
+#ifdef CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND
+ return CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND;
+#else
+ return 0;
+#endif
}
#if defined(CONFIG_SPL_NAND_RAW_ONLY)
static int spl_nand_load_image(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev)
{
+ u32 offs = spl_nand_get_uboot_raw_page();
+
nand_init();
printf("Loading U-Boot from 0x%08x (size 0x%08x) to 0x%08x\n",
- CONFIG_SYS_NAND_U_BOOT_OFFS, CFG_SYS_NAND_U_BOOT_SIZE,
- CFG_SYS_NAND_U_BOOT_DST);
+ offs, CFG_SYS_NAND_U_BOOT_SIZE, CFG_SYS_NAND_U_BOOT_DST);
- nand_spl_load_image(spl_nand_get_uboot_raw_page(),
- CFG_SYS_NAND_U_BOOT_SIZE,
+ nand_spl_load_image(offs, CFG_SYS_NAND_U_BOOT_SIZE,
map_sysmem(CFG_SYS_NAND_U_BOOT_DST,
CFG_SYS_NAND_U_BOOT_SIZE));
spl_set_header_raw_uboot(spl_image);
@@ -127,6 +140,7 @@ static int spl_nand_load_image_os(struct spl_image_info *spl_image,
static int spl_nand_load_image(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev)
{
+ u32 offs = spl_nand_get_uboot_raw_page();
int err;
#ifdef CONFIG_SPL_NAND_SOFTECC
@@ -155,14 +169,14 @@ static int spl_nand_load_image(struct spl_image_info *spl_image,
#endif
#endif
/* Load u-boot */
- err = spl_nand_load_element(spl_image, bootdev, spl_nand_get_uboot_raw_page());
-#ifdef CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND
-#if CONFIG_SYS_NAND_U_BOOT_OFFS != CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND
- if (err)
- err = spl_nand_load_element(spl_image, bootdev,
- CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND);
-#endif
-#endif
+ err = spl_nand_load_element(spl_image, bootdev, offs);
+ if (err) {
+ u32 offs_redund = spl_nand_get_uboot_raw_page_redund();
+
+ if (offs != offs_redund)
+ err = spl_nand_load_element(spl_image, bootdev,
+ offs_redund);
+ }
nand_deselect();
return err;
}
--
2.45.2
More information about the U-Boot
mailing list