From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.4667.1592476759010322947 for ; Thu, 18 Jun 2020 03:39:19 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ard.biesheuvel@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D92FB31B; Thu, 18 Jun 2020 03:39:17 -0700 (PDT) Received: from [192.168.1.69] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 08EAF3F6CF; Thu, 18 Jun 2020 03:39:16 -0700 (PDT) Subject: Re: [edk2-platform][PATCH v1 1/1] Platforms/RaspberryPi: Regenerate boot options on boot failure To: Samer El-Haj-Mahmoud , devel@edk2.groups.io Cc: Leif Lindholm , Andrei Warkentin , Pete Batard References: <20200617213334.9127-1-Samer.El-Haj-Mahmoud@arm.com> From: "Ard Biesheuvel" Message-ID: <602b4666-4c5a-1ce3-f682-dbdb81979589@arm.com> Date: Thu, 18 Jun 2020 12:39:15 +0200 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: <20200617213334.9127-1-Samer.El-Haj-Mahmoud@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 6/17/20 11:33 PM, Samer El-Haj-Mahmoud wrote: > 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 > Cc: Leif Lindholm > Cc: Andrei Warkentin > Cc: Pete Batard > Signed-off-by: Samer El-Haj-Mahmoud 'Series' pushed as d2c797e22184 Platforms/RaspberryPi: Fix SMBIOS Type 9 b2bc8596e2ac Platforms/RaspberryPi: Add SMBIOS Type 11 8dd78ea11a38 Platforms/RaspberryPi: Regenerate boot options on boot failure Thanks, > --- > 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 > * 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 >