[RFC PATCH] bootstage: stash boot records to reserved mem before kernel handoff
Tom Rini
trini at konsulko.com
Fri Aug 22 16:47:59 CEST 2025
On Fri, Aug 22, 2025 at 09:35:23AM +0530, vishnu singh wrote:
> From: Vishnu Singh <v-singh1 at ti.com>
>
> U-Boot now stashes its bootstage buffer into a reserved memory region
> whenever CONFIG_BOOTSTAGE_STASH is enabled, just before exiting to the
> kernel. This allows a post boot parser to read a unified timeline
> (SPL→U-Boot→Kernel→MCU/DSP) directly from DDR, enabling standardized
> and repeatable boot-time profiling across releases and SoCs.
>
> Change summary:
> Call bootstage_stash_default() in announce_and_cleanup()
> when CONFIG_BOOTSTAGE_STASH is set.
>
> Reference boot-time parser utility:
> https://github.com/v-singh1/boot-time-parse
>
> Sample boot time report:
> +--------------------------------------------------------------------+
> am62xx-evm Boot Time Report
> +--------------------------------------------------------------------+
> Device Power On : 0 ms
> SPL Time : 843 ms
> U-Boot Time : 2173 ms
> Kernel handoff time : 462 ms
> Kernel Time : 2522 ms
> Total Boot Time : 6000 ms
> +--------------------------------------------------------------------+
>
> +--------------------------------------------------------------------+
> Bootloader and Kernel Boot Records
> +--------------------------------------------------------------------+
> BOOTSTAGE_AWAKE = 0 ms (+ 0 ms)
> BOOTSTAGE_START_UBOOT_F = 843 ms (+ 0 ms)
> BOOTSTAGE_ACCUM_DM_F = 843 ms (+ 0 ms)
> BOOTSTAGE_START_UBOOT_R = 1951 ms (+1108 ms)
> BOOTSTAGE_ACCUM_DM_R = 1951 ms (+ 0 ms)
> BOOTSTAGE_NET_ETH_START = 2032 ms (+ 81 ms)
> BOOTSTAGE_NET_ETH_INIT = 2053 ms (+ 21 ms)
> BOOTSTAGE_MAIN_LOOP = 2055 ms (+ 2 ms)
> BOOTSTAGE_START_MCU = 2661 ms (+606 ms)
> BOOTSTAGE_BOOTM_START = 2959 ms (+298 ms)
> BOOTSTAGE_RUN_OS = 3016 ms (+ 57 ms)
> BOOTSTAGE_BOOTM_HANDOFF = 3016 ms (+ 0 ms)
> BOOTSTAGE_KERNEL_START = 3478 ms (+462 ms)
> BOOTSTAGE_KERNEL_END = 6000 ms (+2522 ms)
> +--------------------------------------------------------------------+
>
> +--------------------------------------------------------------------+
> MCU Boot Records
> +--------------------------------------------------------------------+
> MCU_AWAKE = 2661 ms (+ 0 ms)
> BOARD_PERIPHERALS_INIT = 2661 ms (+ 0 ms)
> MAIN_TASK_CREATE = 2661 ms (+ 0 ms)
> FIRST_TASK = 2662 ms (+ 1 ms)
> DRIVERS_OPEN = 2662 ms (+ 0 ms)
> BOARD_DRIVERS_OPEN = 2662 ms (+ 0 ms)
> IPC_SYNC_FOR_LINUX = 6636 ms (+3974 ms)
> IPC_REGISTER_CLIENT = 6636 ms (+ 0 ms)
> IPC_SUSPEND_TASK = 6636 ms (+ 0 ms)
> IPC_RECEIVE_TASK = 6636 ms (+ 0 ms)
> IPC_SYNC_ALL = 6787 ms (+151 ms)
> +--------------------------------------------------------------------+
>
> Signed-off-by: Vishnu Singh <v-singh1 at ti.com>
In that it looks like x86 already does a similar thing, this is a good
idea and I wonder if some tooling already exists to read it.
> ---
> arch/arm/lib/bootm.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
> index 7eb764e1f4e..b01e763ff28 100644
> --- a/arch/arm/lib/bootm.c
> +++ b/arch/arm/lib/bootm.c
> @@ -57,6 +57,9 @@ static void announce_and_cleanup(int fake)
> #ifdef CONFIG_BOOTSTAGE_FDT
> bootstage_fdt_add_report();
> #endif
> + if (IS_ENABLED(CONFIG_BOOTSTAGE_STASH))
> + bootstage_stash_default();
You don't need to guard the call, the default bootstage_stash_default()
is a return 0 call when CONFIG_BOOTSTAGE_STASH isn't set.
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20250822/6d71a191/attachment.sig>
More information about the U-Boot
mailing list