[PATCH 2/2] efi_loader: Reset system after CapsuleUpdate on disk
AKASHI Takahiro
takahiro.akashi at linaro.org
Tue Feb 1 04:16:43 CET 2022
On Tue, Feb 01, 2022 at 11:26:38AM +0900, Masami Hiramatsu wrote:
> 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,
While I don't object to adding a message, I'd rather see that a sub-command,
like "efidebug capsule show-result," be added to efidebug command.
Please note the result for each capsule will be recorded in "CapsuleNNNN"
variable which may contain additional information.
(I haven't implemented efi_variable_result_fmp though.)
-Takahiro Akashi
>
> >
> > >> + 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