[PATCH 2/2] efi_loader: Reset system after CapsuleUpdate on disk
Heinrich Schuchardt
xypron.glpk at gmx.de
Mon Jan 31 13:17:26 CET 2022
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.
>> + log_info("Restarting the system to boot the updated
>> firmware.\n");
I am missing a success message for each installed capsule.
>> + 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();
>>
>
More information about the U-Boot
mailing list