On 02/04/21 15:06, Leif Lindholm wrote: > If no valid boot options were found, PlatformBootManagerLib refreshes a > set of sane default options and then reboots. However, if there is in > fact no persistent varstore, the same thing happens again on next boot, > and we end up in an endlessly rebooting loop. > > So when PcdEmuVariableNvModeEnable is TRUE, skip the reboot step and > enter the setup menu instead. > > Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org> > Cc: Laszlo Ersek <ler...@redhat.com> > Signed-off-by: Leif Lindholm <l...@nuviainc.com> > --- > > Changes in v2: > - Fix indentation. > - Add missing space in commit message. > > ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf | 1 + > ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c | 12 > ++++++++---- > 2 files changed, 9 insertions(+), 4 deletions(-) > > diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf > b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf > index 2f726d117d7d..353d7a967b76 100644 > --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf > +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf > @@ -55,6 +55,7 @@ [FeaturePcd] > gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport > > [FixedPcd] > + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable > gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits > diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c > b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c > index 9905cad22908..5ceb23d822e5 100644 > --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c > +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c > @@ -848,11 +848,15 @@ PlatformBootManagerUnableToBoot ( > // 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. > + // *Unless* persistent varstore is being emulated, since we would > + // then end up in an endless reboot loop. > // > - if (NewBootOptionCount != OldBootOptionCount) { > - DEBUG ((DEBUG_WARN, "%a: rebooting after refreshing all boot options\n", > - __FUNCTION__)); > - gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL); > + if (!PcdGetBool (PcdEmuVariableNvModeEnable)) { > + if (NewBootOptionCount != OldBootOptionCount) { > + DEBUG ((DEBUG_WARN, "%a: rebooting after refreshing all boot > options\n", > + __FUNCTION__)); > + gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL); > + } > } > > Status = EfiBootManagerGetBootManagerMenu (&BootManagerMenu); >
At the level where I commented on v1 -- i.e., totally superficially --: Acked-by: Laszlo Ersek <ler...@redhat.com> Ard should please review this patch for the logic change. Laszlo -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#71250): https://edk2.groups.io/g/devel/message/71250 Mute This Topic: https://groups.io/mt/80379806/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-