bootstash: Do not provide a default address for all

A valid memory location to stash bootstage information at will be
architecture dependent. Move the existing defaults to the main Kconfig
file for this option and set 0x0 as the default only for sandbox.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Tom Rini 2024-07-15 12:42:00 +01:00
parent 6b8df6055a
commit b81e31a1e6
9 changed files with 18 additions and 21 deletions

View file

@ -92,15 +92,13 @@ void board_init_f(ulong dummy)
int board_return_to_bootrom(struct spl_image_info *spl_image, int board_return_to_bootrom(struct spl_image_info *spl_image,
struct spl_boot_device *bootdev) struct spl_boot_device *bootdev)
{ {
#ifdef CONFIG_BOOTSTAGE_STASH
int ret; int ret;
bootstage_mark_name(BOOTSTAGE_ID_END_TPL, "end tpl"); bootstage_mark_name(BOOTSTAGE_ID_END_TPL, "end tpl");
ret = bootstage_stash((void *)CONFIG_BOOTSTAGE_STASH_ADDR, ret = bootstage_stash_default();
CONFIG_BOOTSTAGE_STASH_SIZE);
if (ret) if (ret)
debug("Failed to stash bootstage: err=%d\n", ret); debug("Failed to stash bootstage: err=%d\n", ret);
#endif
back_to_bootrom(BROM_BOOT_NEXTSTAGE); back_to_bootrom(BROM_BOOT_NEXTSTAGE);
return 0; return 0;

View file

@ -28,9 +28,6 @@ config PRE_CON_BUF_ADDR
config PRE_CON_BUF_SZ config PRE_CON_BUF_SZ
default 4096 default 4096
config BOOTSTAGE_STASH_ADDR
default 0xC3000000
if BOOTCOUNT_GENERIC if BOOTCOUNT_GENERIC
config SYS_BOOTCOUNT_SINGLEWORD config SYS_BOOTCOUNT_SINGLEWORD
default y default y

View file

@ -86,9 +86,6 @@ config PRE_CON_BUF_ADDR
config PRE_CON_BUF_SZ config PRE_CON_BUF_SZ
default 4096 default 4096
config BOOTSTAGE_STASH_ADDR
default 0xC3000000
if BOOTCOUNT_GENERIC if BOOTCOUNT_GENERIC
config SYS_BOOTCOUNT_SINGLEWORD config SYS_BOOTCOUNT_SINGLEWORD
default y default y

View file

@ -24,9 +24,6 @@ config PRE_CON_BUF_ADDR
config PRE_CON_BUF_SZ config PRE_CON_BUF_SZ
default 4096 default 4096
config BOOTSTAGE_STASH_ADDR
default 0x87000000
if DEBUG_UART if DEBUG_UART
config DEBUG_UART_BOARD_INIT config DEBUG_UART_BOARD_INIT

View file

@ -75,8 +75,7 @@ int __weak x86_cleanup_before_linux(void)
ret = mp_park_aps(); ret = mp_park_aps();
if (ret) if (ret)
return log_msg_ret("park", ret); return log_msg_ret("park", ret);
bootstage_stash((void *)CONFIG_BOOTSTAGE_STASH_ADDR, bootstage_stash_default();
CONFIG_BOOTSTAGE_STASH_SIZE);
return 0; return 0;
} }

View file

@ -1019,13 +1019,17 @@ config BOOTSTAGE_STASH
config BOOTSTAGE_STASH_ADDR config BOOTSTAGE_STASH_ADDR
hex "Address to stash boot timing information" hex "Address to stash boot timing information"
default 0x0 depends on BOOTSTAGE_STASH
default 0xC3000000 if STM32MP13X || STM32MP15X
default 0x87000000 if STM32MP25X
default 0x0 if SANDBOX
help help
Provide an address which will not be overwritten by the OS when it Provide an address which will not be overwritten by the OS when it
starts, so that it can read this information when ready. starts, so that it can read this information when ready.
config BOOTSTAGE_STASH_SIZE config BOOTSTAGE_STASH_SIZE
hex "Size of boot timing stash region" hex "Size of boot timing stash region"
depends on BOOTSTAGE_STASH
default 0x1000 default 0x1000
help help
This should be large enough to hold the bootstage stash. A value of This should be large enough to hold the bootstage stash. A value of

View file

@ -15,6 +15,7 @@ static int do_bootstage_report(struct cmd_tbl *cmdtp, int flag, int argc,
return 0; return 0;
} }
#if IS_ENABLED(CONFIG_BOOTSTAGE_STASH)
static int get_base_size(int argc, char *const argv[], ulong *basep, static int get_base_size(int argc, char *const argv[], ulong *basep,
ulong *sizep) ulong *sizep)
{ {
@ -58,11 +59,14 @@ static int do_bootstage_stash(struct cmd_tbl *cmdtp, int flag, int argc,
return 0; return 0;
} }
#endif
static struct cmd_tbl cmd_bootstage_sub[] = { static struct cmd_tbl cmd_bootstage_sub[] = {
U_BOOT_CMD_MKENT(report, 2, 1, do_bootstage_report, "", ""), U_BOOT_CMD_MKENT(report, 2, 1, do_bootstage_report, "", ""),
#if IS_ENABLED(CONFIG_BOOTSTAGE_STASH)
U_BOOT_CMD_MKENT(stash, 4, 0, do_bootstage_stash, "", ""), U_BOOT_CMD_MKENT(stash, 4, 0, do_bootstage_stash, "", ""),
U_BOOT_CMD_MKENT(unstash, 4, 0, do_bootstage_stash, "", ""), U_BOOT_CMD_MKENT(unstash, 4, 0, do_bootstage_stash, "", ""),
#endif
}; };
/* /*
@ -90,6 +94,8 @@ U_BOOT_CMD(bootstage, 4, 1, do_boostage,
"Boot stage command", "Boot stage command",
" - check boot progress and timing\n" " - check boot progress and timing\n"
"report - Print a report\n" "report - Print a report\n"
#if IS_ENABLED(CONFIG_BOOTSTAGE_STASH)
"stash [<start> [<size>]] - Stash data into memory\n" "stash [<start> [<size>]] - Stash data into memory\n"
"unstash [<start> [<size>]] - Unstash data from memory" "unstash [<start> [<size>]] - Unstash data from memory\n"
#endif
); );

View file

@ -810,10 +810,7 @@ static int initf_bootstage(void)
if (ret) if (ret)
return ret; return ret;
if (from_spl) { if (from_spl) {
const void *stash = map_sysmem(CONFIG_BOOTSTAGE_STASH_ADDR, ret = bootstage_stash_default();
CONFIG_BOOTSTAGE_STASH_SIZE);
ret = bootstage_unstash(stash, CONFIG_BOOTSTAGE_STASH_SIZE);
if (ret && ret != -ENOENT) { if (ret && ret != -ENOENT) {
debug("Failed to unstash bootstage: err=%d\n", ret); debug("Failed to unstash bootstage: err=%d\n", ret);
return ret; return ret;

View file

@ -500,6 +500,7 @@ int bootstage_unstash(const void *base, int size)
return 0; return 0;
} }
#if IS_ENABLED(CONFIG_BOOTSTAGE_STASH)
int _bootstage_stash_default(void) int _bootstage_stash_default(void)
{ {
return bootstage_stash(map_sysmem(CONFIG_BOOTSTAGE_STASH_ADDR, 0), return bootstage_stash(map_sysmem(CONFIG_BOOTSTAGE_STASH_ADDR, 0),
@ -513,6 +514,7 @@ int _bootstage_unstash_default(void)
return bootstage_unstash(stash, CONFIG_BOOTSTAGE_STASH_SIZE); return bootstage_unstash(stash, CONFIG_BOOTSTAGE_STASH_SIZE);
} }
#endif
int bootstage_get_size(void) int bootstage_get_size(void)
{ {