[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