Hi Philipp, > On some boards, we want to give the board/architecture-specific code a > chance to look at where the next image has been loaded from and > perform fixups before starting the next image. This is of particular > importance, when we probe multiple devices for bootable payloads and > boot the first one found. > > This change adds the following: > - we record the boot_device used into the spl_image structure > - we provide an extension-point for boards/architectures that can > perform late fixups depending on a fully populated spl_image > structure (i.e. we'll know the final boot_device and have info > on the image type and operating system to be booted). > > Signed-off-by: Philipp Tomsich <[email protected]> > Tested-by: Klaus Goger <[email protected]> > --- > > common/spl/spl.c | 12 +++++++++++- > include/spl.h | 7 +++++++ > 2 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/common/spl/spl.c b/common/spl/spl.c > index a09ada3..a1e7b9f 100644 > --- a/common/spl/spl.c > +++ b/common/spl/spl.c > @@ -80,6 +80,11 @@ int __weak bootz_setup(ulong image, ulong *start, > ulong *end) } > #endif > > +/* Weak default function for arch/board-specific fixups to the > spl_image_info */ +void __weak spl_perform_fixups(struct > spl_image_info *spl_image) +{ > +} > + > void spl_fixup_fdt(void) > { > #if defined(CONFIG_SPL_OF_LIBFDT) && > defined(CONFIG_SYS_SPL_ARGS_ADDR) @@ -445,8 +450,10 @@ static int > boot_from_devices(struct spl_image_info *spl_image, else > puts("SPL: Unsupported Boot Device!\n"); > #endif > - if (loader && !spl_load_image(spl_image, loader)) > + if (loader && !spl_load_image(spl_image, loader)) { > + spl_image->boot_device = spl_boot_list[i]; > return 0; > + } > } > > return -ENODEV; > @@ -498,6 +505,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2) > #ifdef CONFIG_SYS_SPL_ARGS_ADDR > spl_image.arg = (void *)CONFIG_SYS_SPL_ARGS_ADDR; > #endif > + spl_image.boot_device = BOOT_DEVICE_NONE; > board_boot_order(spl_boot_list); > > if (boot_from_devices(&spl_image, spl_boot_list, > @@ -506,6 +514,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2) > hang(); > } > > + spl_perform_fixups(&spl_image); > + > #ifdef CONFIG_CPU_V7M > spl_image.entry_point |= 0x1; > #endif > diff --git a/include/spl.h b/include/spl.h > index 8454ea7..8628787 100644 > --- a/include/spl.h > +++ b/include/spl.h > @@ -29,6 +29,7 @@ struct spl_image_info { > #if CONFIG_IS_ENABLED(LOAD_FIT) > void *fdt_addr; > #endif > + u32 boot_device; > u32 size; > u32 flags; > void *arg; > @@ -296,4 +297,10 @@ void spl_invoke_atf(struct spl_image_info > *spl_image); > * can implement 'board_return_to_bootrom'. > */ > void board_return_to_bootrom(void); > + > +/** > + * spl_perform_fixups() - arch/board-specific callback before > processing > + * the boot-payload > + */ > +void spl_perform_fixups(struct spl_image_info *spl_image); > #endif
Have I understood correctly that after applying this patch I can define my own spl_perform_fixup() function in my board's spl.c and then decide if I want to boot kernel/u-boot proper from eMMC, even if I started the boot process from SPI-NOR (where SPL is placed) ? Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: [email protected]
pgpwe_vSWiuRk.pgp
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

