vbe: Provide VPL binman-symbols for the next phase

Add support for moving from TPL->VPL->SPL so that the VPL build can fit
properly into the boot flow.

Use #ifdefs to avoid creating unwanted symbols which Binman would then
try (and perhaps fail) to provide.

Add debugging to indicate the next phase.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-01-26 11:43:26 -07:00
committed by Tom Rini
parent 384f815d08
commit dab3bbc2b8

View File

@@ -50,8 +50,10 @@ u32 *boot_params_ptr = NULL;
#if CONFIG_IS_ENABLED(BINMAN_UBOOT_SYMBOLS)
/* See spl.h for information about this */
#if defined(CONFIG_SPL_BUILD)
binman_sym_declare(ulong, u_boot_any, image_pos);
binman_sym_declare(ulong, u_boot_any, size);
#endif
#ifdef CONFIG_TPL
binman_sym_declare(ulong, u_boot_spl_any, image_pos);
@@ -179,9 +181,15 @@ ulong spl_get_image_pos(void)
if (xpl_next_phase() == PHASE_VPL)
return binman_sym(ulong, u_boot_vpl_any, image_pos);
#endif
return xpl_next_phase() == PHASE_SPL ?
binman_sym(ulong, u_boot_spl_any, image_pos) :
binman_sym(ulong, u_boot_any, image_pos);
#if defined(CONFIG_TPL) && !defined(CONFIG_VPL)
if (xpl_next_phase() == PHASE_SPL)
return binman_sym(ulong, u_boot_spl_any, image_pos);
#endif
#if defined(CONFIG_SPL_BUILD)
return binman_sym(ulong, u_boot_any, image_pos);
#endif
return BINMAN_SYM_MISSING;
}
ulong spl_get_image_size(void)
@@ -263,14 +271,20 @@ void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
*/
if (u_boot_pos && u_boot_pos != BINMAN_SYM_MISSING) {
/* Binman does not support separated entry addresses */
spl_image->entry_point = u_boot_pos;
spl_image->load_addr = u_boot_pos;
spl_image->entry_point = spl_get_image_text_base();
spl_image->load_addr = spl_get_image_text_base();
spl_image->size = spl_get_image_size();
log_debug("Next load addr %lx\n", spl_image->load_addr);
} else {
spl_image->entry_point = CONFIG_SYS_UBOOT_START;
spl_image->load_addr = CONFIG_TEXT_BASE;
log_debug("Default load addr %x (u_boot_pos=%lx)\n",
CONFIG_TEXT_BASE, u_boot_pos);
}
spl_image->os = IH_OS_U_BOOT;
spl_image->name = "U-Boot";
spl_image->name = xpl_name(xpl_next_phase());
log_debug("Next phase: %s at %lx size %lx\n", spl_image->name,
spl_image->load_addr, (ulong)spl_image->size);
}
__weak int spl_parse_board_header(struct spl_image_info *spl_image,