[edk2-devel] [edk2-platforms PATCH v2 1/2] Platform/RaspberryPi: Enable Boot Discovery Policy.
Grzegorz Bernacki
gjb at semihalf.com
Fri Jul 9 09:47:00 UTC 2021
Hi,
Yes, you're right, I will send a corrected version of the patch.
Thanks a lot,
greg
czw., 8 lip 2021 o 10:15 Gao, Zhichao <zhichao.gao at intel.com> napisał(a):
>
> See below comments.
>
> > -----Original Message-----
> > From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of
> > Grzegorz Bernacki
> > Sent: Tuesday, July 6, 2021 6:45 PM
> > To: devel at edk2.groups.io
> > Cc: leif at nuviainc.com; ardb+tianocore at kernel.org; Samer.El-Haj-
> > Mahmoud at arm.com; sunny.Wang at arm.com; mw at semihalf.com;
> > upstream at semihalf.com; pete at akeo.ie; Wang, Jian J
> > <jian.j.wang at intel.com>; Wu, Hao A <hao.a.wu at intel.com>; Bi, Dandan
> > <dandan.bi at intel.com>; Dong, Eric <eric.dong at intel.com>; Grzegorz
> > Bernacki <gjb at semihalf.com>; Sunny Wang <sunny.wang at arm.com>
> > Subject: [edk2-devel] [edk2-platforms PATCH v2 1/2] Platform/RaspberryPi:
> > Enable Boot Discovery Policy.
> >
> > This commit modify platform boot to check the value of BootDiscoveryPolicy
> > variable and use BootPolicyManager Protocol to connect devices specified by
> > the variable.
> >
> > Signed-off-by: Grzegorz Bernacki <gjb at semihalf.com>
> > Reviewed-by: Sunny Wang <sunny.wang at arm.com>
> > ---
> > Platform/RaspberryPi/RPi4/RPi4.dsc | 3 +
> > Platform/RaspberryPi/RPi4/RPi4.fdf | 1 +
> >
> > Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBootManag
> > erLib.inf | 5 ++
> > Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c
> > | 90 ++++++++++++++++++++
> > 4 files changed, 99 insertions(+)
> >
> > diff --git a/Platform/RaspberryPi/RPi4/RPi4.dsc
> > b/Platform/RaspberryPi/RPi4/RPi4.dsc
> > index fd73c4d14b..8b9beac64a 100644
> > --- a/Platform/RaspberryPi/RPi4/RPi4.dsc
> > +++ b/Platform/RaspberryPi/RPi4/RPi4.dsc
> > @@ -555,6 +555,7 @@
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn|L"Columns"|gRasp
> > berryPiTokenSpaceGuid|0x0|80
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow|L"Rows"|gRaspb
> > erryPiTokenSpaceGuid|0x0|25
> >
> > gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow|L"Rows"|gRaspberryPi
> > TokenSpaceGuid|0x0|25
> > +
> > +
> > gEfiMdeModulePkgTokenSpaceGuid.PcdBootDiscoveryPolicy|L"BootDiscove
> > ryP
> > + olicy"|gBootDiscoveryPolicyMgrFormsetGuid|0
> >
> > [PcdsDynamicDefault.common]
> > #
> > @@ -682,6 +683,7 @@
> > #
> > # Bds
> > #
> > +
> > MdeModulePkg/Universal/BootManagerPolicyDxe/BootManagerPolicyDxe.i
> > nf
> > MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
> > MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
> > MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
> > @@ -690,6 +692,7 @@
> > Platform/RaspberryPi/Drivers/LogoDxe/LogoDxe.inf
> > MdeModulePkg/Application/UiApp/UiApp.inf {
> > <LibraryClasses>
> > +
> > +
> > NULL|MdeModulePkg/Library/BootDiscoveryPolicyUiLib/BootDiscoveryPolic
> > y
> > + UiLib.inf
> >
> > NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
> > NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
> >
> > NULL|Platform/RaspberryPi/Library/PlatformUiAppLib/PlatformUiAppLib.inf
> > diff --git a/Platform/RaspberryPi/RPi4/RPi4.fdf
> > b/Platform/RaspberryPi/RPi4/RPi4.fdf
> > index 1e13909a57..371197a93e 100644
> > --- a/Platform/RaspberryPi/RPi4/RPi4.fdf
> > +++ b/Platform/RaspberryPi/RPi4/RPi4.fdf
> > @@ -253,6 +253,7 @@ READ_LOCK_STATUS = TRUE
> > #
> > # Bds
> > #
> > + INF
> > +
> > MdeModulePkg/Universal/BootManagerPolicyDxe/BootManagerPolicyDxe.i
> > nf
> > INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
> > INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
> > INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
> > diff --git
> > a/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBootMan
> > agerLib.inf
> > b/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBootMan
> > agerLib.inf
> > index fbf510ab96..4ef2f791ae 100644
> > ---
> > a/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBootMan
> > agerLib.inf
> > +++
> > b/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBootMa
> > +++ nagerLib.inf
> > @@ -61,11 +61,13 @@
> > gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType
> >
> > [Pcd]
> > + gEfiMdeModulePkgTokenSpaceGuid.PcdBootDiscoveryPolicy
> > gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
> > gRaspberryPiTokenSpaceGuid.PcdSdIsArasan
> > gRaspberryPiTokenSpaceGuid.PcdBootPolicy
> >
> > [Guids]
> > + gBootDiscoveryPolicyMgrFormsetGuid
> > gEfiFileInfoGuid
> > gEfiFileSystemInfoGuid
> > gEfiFileSystemVolumeLabelInfoIdGuid
> > @@ -73,8 +75,11 @@
> > gEfiTtyTermGuid
> > gUefiShellFileGuid
> > gEfiEventExitBootServicesGuid
> > + gEfiBootManagerPolicyNetworkGuid
> > + gEfiBootManagerPolicyConnectAllGuid
> >
> > [Protocols]
> > + gEfiBootManagerPolicyProtocolGuid
> > gEfiDevicePathProtocolGuid
> > gEfiGraphicsOutputProtocolGuid
> > gEfiLoadedImageProtocolGuid
> > diff --git
> > a/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c
> > b/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c
> > index d081fdae63..4bfa906921 100644
> > --- a/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c
> > +++ b/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c
> > @@ -6,6 +6,7 @@
> > * Copyright (c) 2015-2016, Red Hat, Inc.
> > * Copyright (c) 2014-2021, ARM Ltd. All rights reserved.
> > * Copyright (c) 2004-2016, Intel Corporation. All rights reserved.
> > + * Copyright (c) 2021, Semihalf All rights reserved.
> > *
> > * SPDX-License-Identifier: BSD-2-Clause-Patent
> > *
> > @@ -19,10 +20,12 @@
> > #include <Library/UefiBootManagerLib.h> #include <Library/UefiLib.h>
> > #include <Library/PrintLib.h>
> > +#include <Protocol/BootManagerPolicy.h>
> > #include <Protocol/DevicePath.h>
> > #include <Protocol/EsrtManagement.h>
> > #include <Protocol/GraphicsOutput.h>
> > #include <Protocol/LoadedImage.h>
> > +#include <Guid/BootDiscoveryPolicy.h>
> > #include <Guid/EventGroup.h>
> > #include <Guid/TtyTerm.h>
> > #include <ConfigVars.h>
> > @@ -598,6 +601,88 @@ PlatformBootManagerBeforeConsole (
> > FilterAndProcess (&gEfiUsb2HcProtocolGuid, NULL, Connect); }
> >
> > +/**
> > + Connect device specified by BootDiscoverPolicy variable and refresh
> > + Boot order for newly discovered boot device.
> > +
> > + @retval EFI_SUCCESS Devices connected succesfully or connection
> > + not required.
> > + @retval others Return values from GetVariable(), LocateProtocol()
> > + and ConnectDeviceClass().
> > +--*/
> > +STATIC
> > +EFI_STATUS
> > +BootDiscoveryPolicyHandler (
> > + VOID
> > + )
> > +{
> > + EFI_STATUS Status;
> > + UINT32 DiscoveryPolicy;
> > + UINTN Size;
> > + EFI_BOOT_MANAGER_POLICY_PROTOCOL *BMPolicy;
> > + EFI_GUID *Class;
> > +
> > + Size = sizeof (DiscoveryPolicy);
> > + Status = gRT->GetVariable (
> > + BOOT_DISCOVERY_POLICY_VAR,
> > + &gBootDiscoveryPolicyMgrFormsetGuid,
> > + NULL,
> > + &Size,
> > + &DiscoveryPolicy
> > + );
> > + if (Status == EFI_NOT_FOUND) {
> > + Status = PcdSet32S (PcdBootDiscoveryPolicy, PcdGet32
> > (PcdBootDiscoveryPolicy));
>
> Why need this Pcd statement?
>
> > + if (Status == EFI_NOT_FOUND) {
> > + return EFI_SUCCESS;
> > + } else if (EFI_ERROR (Status)) {
> > + return Status;
> > + }
> > + } else if (EFI_ERROR (Status)) {
> > + return Status;
> > + }
> > +
> > + if (DiscoveryPolicy == BDP_CONNECT_MINIMAL) {
>
> If the Status is EFI_NOT_FOUND at GetVariable, then the above DiscoveryPolicy is uninitialized.
> Maybe you need to use the Pcd value if GetVariable failed.
>
> Thanks,
> Zhichao
>
> > + return EFI_SUCCESS;
> > + }
> > +
> > + switch (DiscoveryPolicy) {
> > + case BDP_CONNECT_NET:
> > + Class = &gEfiBootManagerPolicyNetworkGuid;
> > + break;
> > + case BDP_CONNECT_ALL:
> > + Class = &gEfiBootManagerPolicyConnectAllGuid;
> > + break;
> > + default:
> > + DEBUG ((
> > + DEBUG_INFO,
> > + "%a - Unexpected DiscoveryPolicy (0x%x). Run Minimal Discovery
> > Policy\n",
> > + __FUNCTION__,
> > + DiscoveryPolicy
> > + ));
> > + return EFI_SUCCESS;
> > + }
> > +
> > + Status = gBS->LocateProtocol (
> > + &gEfiBootManagerPolicyProtocolGuid,
> > + NULL,
> > + (VOID **)&BMPolicy
> > + );
> > + if (EFI_ERROR (Status)) {
> > + DEBUG ((DEBUG_ERROR, "%a - Failed to locate
> > gEfiBootManagerPolicyProtocolGuid - %r\n", __FUNCTION__, Status));
> > + return Status;
> > + }
> > +
> > + Status = BMPolicy->ConnectDeviceClass (BMPolicy, Class); if
> > + (EFI_ERROR (Status)){
> > + DEBUG ((DEBUG_ERROR, "%a - ConnectDeviceClass returns - %r\n",
> > __FUNCTION__, Status));
> > + return Status;
> > + }
> > +
> > + EfiBootManagerRefreshAllBootOption();
> > +
> > + return EFI_SUCCESS;
> > +}
> > +
> > /**
> > Do the platform specific action after the console is ready
> > Possible things that can be done in PlatformBootManagerAfterConsole:
> > @@ -644,6 +729,11 @@ PlatformBootManagerAfterConsole (
> > DEBUG ((DEBUG_INFO, "Boot Policy is Fast Boot. Skip connecting all
> > devices\n"));
> > }
> >
> > + Status = BootDiscoveryPolicyHandler (); if (EFI_ERROR(Status)) {
> > + DEBUG ((DEBUG_INFO, "Error applying Boot Discovery Policy:%r\n",
> > + Status)); }
> > +
> > Status = gBS->LocateProtocol (&gEsrtManagementProtocolGuid, NULL,
> > (VOID**)&EsrtManagement);
> > if (!EFI_ERROR (Status)) {
> > EsrtManagement->SyncEsrtFmp ();
> > --
> > 2.25.1
> >
> >
> >
> >
> >
>
>
>
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#77650): https://edk2.groups.io/g/devel/message/77650
Mute This Topic: https://groups.io/mt/84017526/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list