On Wed, Jun 19, 2013 at 9:15 PM, Simon Glass <s...@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 <s...@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@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot