[U-Boot] [PATCH v3 17/21] arm: Implement the 'fake' go command
vb at vsbe.com
vb at vsbe.com
Wed Aug 21 23:59:29 CEST 2013
On Wed, Jun 19, 2013 at 9:15 PM, Simon Glass <sjg at chromium.org> wrote:
>
> Implement this feature on ARM for tracing.
>
> It would be nice to have generic bootm support so that it is easily
> implemented on any arch.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> Changes in v3:
> - Revert to using 'images' instead of 'image' in boot_jump_linux()
>
> Changes in v2: None
>
> arch/arm/lib/bootm.c | 27 ++++++++++++++++++---------
> 1 file changed, 18 insertions(+), 9 deletions(-)
>
> diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
> index 1b6e0ac..b22fbc9 100644
> --- a/arch/arm/lib/bootm.c
> +++ b/arch/arm/lib/bootm.c
> @@ -68,12 +68,19 @@ void arch_lmb_reserve(struct lmb *lmb)
> gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp);
> }
>
> -static void announce_and_cleanup(void)
> +/**
> + * announce_and_cleanup() - Print message and prepare for kernel boot
> + *
> + * @fake: non-zero to do everything except actually boot
> + */
> +static void announce_and_cleanup(int fake)
> {
> - printf("\nStarting kernel ...\n\n");
> + printf("\nStarting kernel ...%s\n\n", fake ?
> + "(fake run for tracing)" : "");
> bootstage_mark_name(BOOTSTAGE_ID_BOOTM_HANDOFF, "start_kernel");
> #ifdef CONFIG_BOOTSTAGE_FDT
> - bootstage_fdt_add_report();
> + if (flag == BOOTM_STATE_OS_FAKE_GO)
> + bootstage_fdt_add_report();
> #endif
was this ever compiled with CONFIG_BOOTSTAGE_FDT defined? `flag' is
not defined here, compilation fails for me when I try enabling this
config...
--vb
> #ifdef CONFIG_BOOTSTAGE_REPORT
> bootstage_report();
> @@ -225,12 +232,13 @@ static void boot_prep_linux(bootm_headers_t *images)
> }
>
> /* Subcommand: GO */
> -static void boot_jump_linux(bootm_headers_t *images)
> +static void boot_jump_linux(bootm_headers_t *images, int flag)
> {
> unsigned long machid = gd->bd->bi_arch_number;
> char *s;
> void (*kernel_entry)(int zero, int arch, uint params);
> unsigned long r2;
> + int fake = (flag & BOOTM_STATE_OS_FAKE_GO);
>
> kernel_entry = (void (*)(int, int, uint))images->ep;
>
> @@ -243,14 +251,15 @@ static void boot_jump_linux(bootm_headers_t *images)
> debug("## Transferring control to Linux (at address %08lx)" \
> "...\n", (ulong) kernel_entry);
> bootstage_mark(BOOTSTAGE_ID_RUN_OS);
> - announce_and_cleanup();
> + announce_and_cleanup(fake);
>
> if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
> r2 = (unsigned long)images->ft_addr;
> else
> r2 = gd->bd->bi_boot_params;
>
> - kernel_entry(0, machid, r2);
> + if (!fake)
> + kernel_entry(0, machid, r2);
> }
>
> /* Main Entry point for arm bootm implementation
> @@ -270,13 +279,13 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
> return 0;
> }
>
> - if (flag & BOOTM_STATE_OS_GO) {
> - boot_jump_linux(images);
> + if (flag & (BOOTM_STATE_OS_GO | BOOTM_STATE_OS_FAKE_GO)) {
> + boot_jump_linux(images, flag);
> return 0;
> }
>
> boot_prep_linux(images);
> - boot_jump_linux(images);
> + boot_jump_linux(images, flag);
> return 0;
> }
>
> --
> 1.8.3
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
More information about the U-Boot
mailing list