Guo: This is a bug fix. I think it is OK to merge for this stable tag. Thanks Liming > -----邮件原件----- > 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Guo Dong > 发送时间: 2023年5月13日 7:40 > 收件人: devel@edk2.groups.io; Gao, Liming <gaolim...@byosoft.com.cn> > 抄送: Ni, Ray <ray...@intel.com>; Rhodes, Sean <sean@starlabs.systems>; > Lu, James <james...@intel.com>; Guo, Gua <gua....@intel.com> > 主题: Re: [edk2-devel][PATCH V2] UefiPayloadPkg: Fix boot shell issue for > universal UEFI payload > > > Hi Liming, > I know EDK2 is code freeze now. This patch fixes the UEFI payload boot to > shell bug and it got reviewed and should have no impact to other packages. > Do you think we could merge it for this stable release? > https://github.com/tianocore/edk2/pull/4377 > > Thanks, > Guo > > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Guo Dong > Sent: Friday, May 12, 2023 3:44 PM > To: devel@edk2.groups.io > Cc: Dong, Guo <guo.d...@intel.com>; Ni, Ray <ray...@intel.com>; Rhodes, > Sean <sean@starlabs.systems>; Lu, James <james...@intel.com>; Guo, Gua > <gua....@intel.com> > Subject: [edk2-devel][PATCH V2] UefiPayloadPkg: Fix boot shell issue for > universal UEFI payload > > From: Guo Dong <guo.d...@intel.com> > > After moving BDS driver to a new FV for universal UEFI payload, the shell boot > option path is not correct since it used the BDS FV instead of DXE FV in its > device path. > This patch would find the correct FV by reading shell file. > It also removed PcdShellFile by using gUefiShellFileGuid. > > Signed-off-by: Guo Dong <guo.d...@intel.com> > Cc: Ray Ni <ray...@intel.com> > Cc: Sean Rhodes <sean@starlabs.systems> > Cc: James Lu <james...@intel.com> > Cc: Gua Guo <gua....@intel.com> > Reviewed-by: James Lu <james...@intel.com> > Reviewed-by: Gua Guo <gua....@intel.com> > --- > UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c > | 82 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > +++++++++++++------- > > UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.i > nf | 5 +++-- > UefiPayloadPkg/UefiPayloadPkg.dec > | 3 --- > 3 files changed, 78 insertions(+), 12 deletions(-) > > diff --git > a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c > b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c > index 62637ae6aa..1660d6c330 100644 > --- > a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c > +++ > b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager. > +++ c > @@ -2,7 +2,7 @@ > This file include all platform action which can be customized by > IBV/OEM. -Copyright (c) 2015 - 2021, Intel Corporation. All rights > reserved.<BR>+Copyright (c) 2015 - 2023, Intel Corporation. All rights > reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/@@ -11,6 > +11,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include "PlatformConsole.h" #include <Guid/BootManagerMenu.h> > #include <Library/HobLib.h>+#include <Protocol/FirmwareVolume2.h> /** > Signal EndOfDxe event and install SMM Ready to lock protocol.@@ -89,6 > +90,77 @@ PlatformFindLoadOption ( > return -1; } +/**+ Get the FV device path for the shell file.++ @return > A pointer to device path structure.+**/+EFI_DEVICE_PATH_PROTOCOL > *+BdsGetShellFvDevicePath (+ VOID+ )+{+ UINTN > FvHandleCount;+ EFI_HANDLE *FvHandleBuffer;+ > UINTN Index;+ EFI_STATUS > Status;+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;+ UINTN > Size;+ UINT32 AuthenticationStatus;+ > EFI_DEVICE_PATH_PROTOCOL *DevicePath;+ EFI_FV_FILETYPE > FoundType;+ EFI_FV_FILE_ATTRIBUTES FileAttributes;++ Status > = EFI_SUCCESS;+ gBS->LocateHandleBuffer (+ ByProtocol,+ > &gEfiFirmwareVolume2ProtocolGuid,+ NULL,+ > &FvHandleCount,+ &FvHandleBuffer+ );++ for (Index = > 0; Index < FvHandleCount; Index++) {+ Size = 0;+ > gBS->HandleProtocol (+ FvHandleBuffer[Index],+ > &gEfiFirmwareVolume2ProtocolGuid,+ (VOID > **)&Fv+ );+ Status = Fv->ReadFile (+ > Fv,+ &gUefiShellFileGuid,+ > NULL,+ &Size,+ &FoundType,+ > &FileAttributes,+ > &AuthenticationStatus+ );+ if (!EFI_ERROR (Status)) > {+ //+ // Found the shell file+ //+ > break;+ }+ }++ if (EFI_ERROR (Status)) {+ if (FvHandleCount) {+ > FreePool (FvHandleBuffer);+ }++ return NULL;+ }++ DevicePath = > DevicePathFromHandle (FvHandleBuffer[Index]);++ if (FvHandleCount) {+ > FreePool (FvHandleBuffer);+ }++ return DevicePath;+}+ /** Register a > boot option using a file GUID in the FV. @@ -109,15 +181,11 @@ > PlatformRegisterFvBootOption ( > EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; UINTN > BootOptionCount; MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;- > EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; > EFI_DEVICE_PATH_PROTOCOL *DevicePath; - Status = > gBS->HandleProtocol (gImageHandle, &gEfiLoadedImageProtocolGuid, (VOID > **)&LoadedImage);- ASSERT_EFI_ERROR (Status);- > EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid); DevicePath = > AppendDevicePathNode (- DevicePathFromHandle > (LoadedImage->DeviceHandle),+ > BdsGetShellFvDevicePath (), > (EFI_DEVICE_PATH_PROTOCOL *)&FileNode ); @@ > -248,7 +316,7 @@ PlatformBootManagerAfterConsole ( > // // Register UEFI Shell //- PlatformRegisterFvBootOption > (PcdGetPtr (PcdShellFile), L"UEFI Shell", LOAD_OPTION_ACTIVE);+ > PlatformRegisterFvBootOption (&gUefiShellFileGuid, L"UEFI Shell", > LOAD_OPTION_ACTIVE); if (FixedPcdGetBool (PcdBootManagerEscape)) > { Print (diff --git > a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib > .inf > b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib > .inf > index f9626175e2..a3951b7a7e 100644 > --- > a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib > .inf > +++ > b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerL > +++ ib.inf > @@ -1,7 +1,7 @@ > ## @file # Include all platform action which can be customized by > IBV/OEM. #-# Copyright (c) 2012 - 2021, Intel Corporation. All rights > reserved.<BR>+# Copyright (c) 2012 - 2023, Intel Corporation. All rights > reserved.<BR> # SPDX-License-Identifier: BSD-2-Clause-Patent # ##@@ > -32,6 +32,7 @@ > MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec > UefiPayloadPkg/UefiPayloadPkg.dec+ ShellPkg/ShellPkg.dec > [LibraryClasses] BaseLib@@ -52,6 +53,7 @@ > [Guids] gEfiEndOfDxeEventGroupGuid > gEdkiiBootManagerMenuFileGuid+ gUefiShellFileGuid [Protocols] > gEfiGenericMemTestProtocolGuid ## CONSUMES@@ -69,7 +71,6 @@ > gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow > gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn > gEfiMdeModulePkgTokenSpaceGuid.PcdConInConnectOnDemand- > gUefiPayloadPkgTokenSpaceGuid.PcdShellFile > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParitydiff --git > a/UefiPayloadPkg/UefiPayloadPkg.dec b/UefiPayloadPkg/UefiPayloadPkg.dec > index a23a7b5a78..8d111f3a90 100644 > --- a/UefiPayloadPkg/UefiPayloadPkg.dec > +++ b/UefiPayloadPkg/UefiPayloadPkg.dec > @@ -67,9 +67,6 @@ > gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize|0|UINT32|0x10000 > 002 > ## Save bootloader parameter > gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter|0|UINT64|0x100 > 00004 -## FFS filename to find the shell > application.-gUefiPayloadPkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, > 0x7C, 0x3E, 0x9E, 0x1c, 0x4f, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, > 0xD1 }|VOID*|0x10000005- ## Used to help reduce fragmentation in the EFI > memory map > gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0x > 19|UINT32|0x10000012 > gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0x04| > UINT32|0x10000013-- > 2.39.1.windows.1 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#104812): > https://edk2.groups.io/g/devel/message/104812 > Mute This Topic: https://groups.io/mt/98859456/1781375 > Group Owner: devel+ow...@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [guo.d...@intel.com] > -=-=-=-=-=-= > > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104828): https://edk2.groups.io/g/devel/message/104828 Mute This Topic: https://groups.io/mt/98894131/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-