Reviewed-by: Andrei Warkentin <awarken...@vmware.com> ________________________________ From: Samer El-Haj-Mahmoud <samer.el-haj-mahm...@arm.com> Sent: Wednesday, June 17, 2020 4:33 PM To: devel@edk2.groups.io <devel@edk2.groups.io> Cc: Ard Biesheuvel <ard.biesheu...@arm.com>; Leif Lindholm <l...@nuviainc.com>; Andrei Warkentin <awarken...@vmware.com>; Pete Batard <p...@akeo.ie> Subject: [edk2-platform][PATCH v1 1/1] Platforms/RaspberryPi: Regenerate boot options on boot failure
Port tianocore/edk2@2d233af64b8f73d1b1e138b302e6344f7c2e0f4e This enables network boot by default on RPi first boot, when all other boot options fail. This is required for unattended/headless boot cases. Cc: Ard Biesheuvel <ard.biesheu...@arm.com> Cc: Leif Lindholm <l...@nuviainc.com> Cc: Andrei Warkentin <awarken...@vmware.com> Cc: Pete Batard <p...@akeo.ie> Signed-off-by: Samer El-Haj-Mahmoud <samer.el-haj-mahm...@arm.com> --- Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c | 36 +++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c b/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c index cb74d65b7f91..fa46be791732 100644 --- a/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c +++ b/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c @@ -4,7 +4,7 @@ * Copyright (c) 2017-2018, Andrei Warkentin <andrey.warken...@gmail.com> * Copyright (c) 2016, Linaro Ltd. All rights reserved. * Copyright (c) 2015-2016, Red Hat, Inc. - * Copyright (c) 2014, ARM Ltd. All rights reserved. + * Copyright (c) 2014-2020, ARM Ltd. All rights reserved. * Copyright (c) 2004-2016, Intel Corporation. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent @@ -700,6 +700,40 @@ PlatformBootManagerUnableToBoot ( EFI_INPUT_KEY Key; EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu; UINTN Index; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN OldBootOptionCount; + UINTN NewBootOptionCount; + + // + // Record the total number of boot configured boot options + // + BootOptions = EfiBootManagerGetLoadOptions (&OldBootOptionCount, + LoadOptionTypeBoot); + EfiBootManagerFreeLoadOptions (BootOptions, OldBootOptionCount); + + // + // Connect all devices, and regenerate all boot options + // + EfiBootManagerConnectAll (); + EfiBootManagerRefreshAllBootOption (); + + // + // Record the updated number of boot configured boot options + // + BootOptions = EfiBootManagerGetLoadOptions (&NewBootOptionCount, + LoadOptionTypeBoot); + EfiBootManagerFreeLoadOptions (BootOptions, NewBootOptionCount); + + // + // If the number of configured boot options has changed, reboot + // the system so the new boot options will be taken into account + // while executing the ordinary BDS bootflow sequence. + // + if (NewBootOptionCount != OldBootOptionCount) { + DEBUG ((DEBUG_WARN, "%a: rebooting after refreshing all boot options\n", + __FUNCTION__)); + gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL); + } // // BootManagerMenu doesn't contain the correct information when return status -- 2.17.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#61466): https://edk2.groups.io/g/devel/message/61466 Mute This Topic: https://groups.io/mt/74947044/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-