On Tue, 10 Aug 2021 at 17:23, Sunny Wang <sunny.w...@arm.com> wrote:
>
> Hi Ard,
>
> Yeah, this is a good point. Greg and I offline discussed this as well.
> If we don't miss anything, only applying this patch without platform changes 
> should be fine. There should be no behavior change. I added some details 
> below for your reference.
>   - if the platform doesn’t add PcdBootDiscoveryPolicy to platform's dsc file 
> and add BootDiscoveryPolicyUiLib to UiApp. BootDiscoveryPolicyHandler() would 
> just get PcdBootDiscoveryPolicy default value and do nothing.
>   - if the platform doesn't include BootManagerPolicyDxe driver or produce 
> EfiBootManagerPolicyProtocol, BootDiscoveryPolicyHandler() would just return 
> with only printing a message to remind users/developers that Boot Discovery 
> Policy doesn't work (driver connect will be skipped).
>

OK, thanks for double checking.

I tried to submit this but I get CI errors:



>
> -----Original Message-----
> From: Ard Biesheuvel <a...@kernel.org>
> Sent: Friday, August 6, 2021 9:45 PM
> To: Grzegorz Bernacki <g...@semihalf.com>
> Cc: edk2-devel-groups-io <devel@edk2.groups.io>; Leif Lindholm 
> <l...@nuviainc.com>; Ard Biesheuvel <ardb+tianoc...@kernel.org>; Samer 
> El-Haj-Mahmoud <samer.el-haj-mahm...@arm.com>; Sunny Wang 
> <sunny.w...@arm.com>; Marcin Wojtas <m...@semihalf.com>; upstr...@semihalf.com
> Subject: Re: [PATCH] ArmPkg: Enable boot discovery policy for ARM package.
>
> On Fri, 6 Aug 2021 at 10:30, Grzegorz Bernacki <g...@semihalf.com> wrote:
> >
> > This commit adds code which check BootDiscoveryPolicy variable and
> > calls Boot Policy Manager Protocol to connect device specified by
> > the variable. To enable that mechanism for platform
> > EfiMdeModulePkgTokenSpaceGuid.PcdBootDiscoveryPolicy PCD must be
> > added to DSC file and BootDiscoveryPolicyUiLib should be added to
> > UiApp libraries.
> >
>
> ... or the platform will be broken once we apply this patch, right? If
> so, please propose patches for all platforms in edk2-platforms that
> use this library - we can't just break them.
>
> > Signed-off-by: Grzegorz Bernacki <g...@semihalf.com>
> > ---
> >  ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf |  5 +
> >  ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c               | 96 
> > +++++++++++++++++++-
> >  2 files changed, 100 insertions(+), 1 deletion(-)
> >
> > diff --git 
> > a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf 
> > b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> > index 353d7a967b..86751b45f8 100644
> > --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> > +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> > @@ -65,11 +65,15 @@
> >
> >  [Pcd]
> >    gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdBootDiscoveryPolicy
> >
> >  [Guids]
> > +  gBootDiscoveryPolicyMgrFormsetGuid
> >    gEdkiiNonDiscoverableEhciDeviceGuid
> >    gEdkiiNonDiscoverableUhciDeviceGuid
> >    gEdkiiNonDiscoverableXhciDeviceGuid
> > +  gEfiBootManagerPolicyNetworkGuid
> > +  gEfiBootManagerPolicyConnectAllGuid
> >    gEfiFileInfoGuid
> >    gEfiFileSystemInfoGuid
> >    gEfiFileSystemVolumeLabelInfoIdGuid
> > @@ -79,6 +83,7 @@
> >
> >  [Protocols]
> >    gEdkiiNonDiscoverableDeviceProtocolGuid
> > +  gEfiBootManagerPolicyProtocolGuid
> >    gEfiDevicePathProtocolGuid
> >    gEfiGraphicsOutputProtocolGuid
> >    gEfiLoadedImageProtocolGuid
> > diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c 
> > b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
> > index 5ceb23d822..4332c45bb7 100644
> > --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
> > +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c
> > @@ -2,9 +2,10 @@
> >    Implementation for PlatformBootManagerLib library class interfaces.
> >
> >    Copyright (C) 2015-2016, Red Hat, Inc.
> > -  Copyright (c) 2014 - 2019, ARM Ltd. All rights reserved.<BR>
> > +  Copyright (c) 2014 - 2021, ARM Ltd. All rights reserved.<BR>
> >    Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
> >    Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
> > +  Copyright (c) 2021, Semihalf All rights reserved.<BR>
> >
> >    SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > @@ -19,6 +20,7 @@
> >  #include <Library/UefiBootManagerLib.h>
> >  #include <Library/UefiLib.h>
> >  #include <Library/UefiRuntimeServicesTableLib.h>
> > +#include <Protocol/BootManagerPolicy.h>
> >  #include <Protocol/DevicePath.h>
> >  #include <Protocol/EsrtManagement.h>
> >  #include <Protocol/GraphicsOutput.h>
> > @@ -27,6 +29,7 @@
> >  #include <Protocol/PciIo.h>
> >  #include <Protocol/PciRootBridgeIo.h>
> >  #include <Protocol/PlatformBootManager.h>
> > +#include <Guid/BootDiscoveryPolicy.h>
> >  #include <Guid/EventGroup.h>
> >  #include <Guid/NonDiscoverableDevice.h>
> >  #include <Guid/TtyTerm.h>
> > @@ -703,6 +706,91 @@ HandleCapsules (
> >
> >  #define VERSION_STRING_PREFIX    L"Tianocore/EDK2 firmware version "
> >
> > +/**
> > +  This functions checks the value of BootDiscoverPolicy variable and
> > +  connect devices of class specified by that variable. Then it refreshes
> > +  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));
> > +    if (Status == EFI_NOT_FOUND) {
> > +      return EFI_SUCCESS;
> > +    } else if (EFI_ERROR (Status)) {
> > +      return Status;
> > +    }
> > +    DiscoveryPolicy = PcdGet32 (PcdBootDiscoveryPolicy);
> > +  } else if (EFI_ERROR (Status)) {
> > +    return Status;
> > +  }
> > +
> > +  if (DiscoveryPolicy == BDP_CONNECT_MINIMAL) {
> > +    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_INFO, "%a - Failed to locate 
> > gEfiBootManagerPolicyProtocolGuid."
> > +      "Driver connect will be skipped.\n", __FUNCTION__));
> > +    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:
> > @@ -753,6 +841,12 @@ PlatformBootManagerAfterConsole (
> >      }
> >    }
> >
> > +  //
> > +  // Connect device specified by BootDiscoverPolicy variable and
> > +  // refresh Boot order for newly discovered boot devices
> > +  //
> > +  BootDiscoveryPolicyHandler ();
> > +
> >    //
> >    // On ARM, there is currently no reason to use the phased capsule
> >    // update approach where some capsules are dispatched before EndOfDxe
> > --
> > 2.25.1
> >
> IMPORTANT NOTICE: The contents of this email and any attachments are 
> confidential and may also be privileged. If you are not the intended 
> recipient, please notify the sender immediately and do not disclose the 
> contents to any other person, use it for any purpose, or store or copy the 
> information in any medium. Thank you.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#79107): https://edk2.groups.io/g/devel/message/79107
Mute This Topic: https://groups.io/mt/84704033/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to