[PATCH 2/2] efi_loader: Reset system after CapsuleUpdate on disk
Masami Hiramatsu
masami.hiramatsu at linaro.org
Tue Feb 1 03:26:38 CET 2022
Hi Heinrich,
2022年1月31日(月) 21:17 Heinrich Schuchardt <xypron.glpk at gmx.de>:
>
> On 1/31/22 12:19, Grant Likely wrote:
> > On 31/01/2022 09:19, Masami Hiramatsu wrote:
> >> Add a config option to reset system soon after processing capsule update
> >> on disk. This is required in UEFI specification 2.9 Section 8.5.5
> >> "Delivery of Capsules via file on Mass Storage device" as;
> >>
> >> In all cases that a capsule is identified for processing the
> >> system is
> >> restarted after capsule processing is completed.
> >>
> >> Signed-off-by: Masami Hiramatsu <masami.hiramatsu at linaro.org>
> >
> > Is there known use cases for making this an option? Feels a bit like
> > option creep that is too easy to choose the wrong setting.
> >
> > Otherwise, this looks good to me.
> >
> > g.
> >
> >> ---
> >> lib/efi_loader/Kconfig | 10 ++++++++++
> >> lib/efi_loader/efi_capsule.c | 9 +++++++++
> >> 2 files changed, 19 insertions(+)
> >>
> >> diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
> >> index 24f9a2bb75..db05c3ad90 100644
> >> --- a/lib/efi_loader/Kconfig
> >> +++ b/lib/efi_loader/Kconfig
> >> @@ -146,6 +146,16 @@ config EFI_IGNORE_OSINDICATIONS
> >> without setting the
> >> EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED
> >> flag in variable OsIndications.
> >>
> >> +config EFI_RESET_AFTER_CAPSULE_ON_DISK
> >> + bool "Reset right after CapsuleUpdate on-disk"
> >> + depends on EFI_CAPSULE_ON_DISK
> >> + default y
> >> + help
> >> + UEFI specification requests the system to be restarted after
> >> capsule
> >> + processing is complete. This implements that, but for some
> >> reason,
> >> + if you want to keep the (old) system running after the capsule
> >> update
> >> + on-disk, you can say 'n' here.
> >> +
> >> config EFI_CAPSULE_ON_DISK_EARLY
> >> bool "Initiate capsule-on-disk at U-Boot boottime"
> >> depends on EFI_CAPSULE_ON_DISK
> >> diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
> >> index 98dab1c6f5..44d4fa2f82 100644
> >> --- a/lib/efi_loader/efi_capsule.c
> >> +++ b/lib/efi_loader/efi_capsule.c
> >> @@ -1142,6 +1142,15 @@ efi_status_t efi_launch_capsules(void)
> >> free(files[i]);
> >> free(files);
> >>
> >> + /*
> >> + * UEFI spec requires to reset system after complete processing
> >> capsule
> >> + * update on the storage.
> >> + */
> >> + if (IS_ENABLED(CONFIG_EFI_RESET_AFTER_CAPSULE_ON_DISK)) {
>
> We should not allow configuring a non-compliant behavior.
OK, let me remove this option then.
>
> >> + log_info("Restarting the system to boot the updated
> >> firmware.\n");
>
> I am missing a success message for each installed capsule.
Indeed, but this reboot will be done unconditionally.
let me add a message when the capsule update is successfully completed.
Thank you,
>
> >> + do_reset(NULL, 0, 0, NULL);
>
> do_reset() may return. How about:
>
> panic("Reboot after firmware update");
>
> This will hang if do_reset() returns.
>
> >> + }
> >> +
> >> if (IS_ENABLED(CONFIG_EFI_ESRT)) {
>
> We don't need this code anymore if we call panic() above.
>
> Best regards
>
> Heinrich
>
> >> /* Rebuild the ESRT to reflect any updated FW images. */
> >> ret = efi_esrt_populate();
> >>
> >
--
Masami Hiramatsu
More information about the U-Boot
mailing list