public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Ni, Ray" <ray.ni@intel.com>
To: "Gao, Zhichao" <zhichao.gao@intel.com>,
	"'devel@edk2.groups.io'" <devel@edk2.groups.io>
Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>,
	"Wang, Jian J" <jian.j.wang@intel.com>,
	"Zeng, Star" <star.zeng@intel.com>,
	"Gao, Liming" <liming.gao@intel.com>,
	Sean Brogan <sean.brogan@microsoft.com>,
	"Michael Turner" <Michael.Turner@microsoft.com>
Subject: Re: [PATCH 2/2] MdeModulePkg/BdsDxe: Use a pcd to set OS indications bit
Date: Wed, 10 Apr 2019 01:59:52 +0000	[thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C0DD146@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <3CE959C139B4C44DBEA1810E3AA6F9000B7C1237@SHSMSX101.ccr.corp.intel.com>

The PlatformRecovery#### can be set by PlatformBootManagerLib.
We cannot execute these if the feature is not supported.

Wait a sec, can I get clarification on the PCD's meaning a bit more:
Why do we need such a configuration flag?
Turning it off will break the functionality to boot default boot option like
EFI\BOOT\BOOTIA32.EFI
EFI\BOOT\BOOTx64.EFI
...

Is that expected?
If it's not, we still need to support booting from these boot options even
the PCD is OFF.

Thanks,
Ray

> -----Original Message-----
> From: Gao, Zhichao
> Sent: Wednesday, April 10, 2019 8:45 AM
> To: Ni, Ray <ray.ni@intel.com>; 'devel@edk2.groups.io' <devel@edk2.groups.io>
> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>; Wang, Jian J
> <jian.j.wang@intel.com>; Zeng, Star <star.zeng@intel.com>; Gao, Liming
> <liming.gao@intel.com>; Sean Brogan <sean.brogan@microsoft.com>; Michael
> Turner <Michael.Turner@microsoft.com>
> Subject: RE: [PATCH 2/2] MdeModulePkg/BdsDxe: Use a pcd to set OS
> indications bit
> 
> This section can work fine even through the L"PlatformRecovery####" is not set.
> But if we do not support it, it should be better not to run it.
> Thanks for your comments, I will update it later.
> 
> Thanks,
> Zhichao
> 
> > -----Original Message-----
> > From: Ni, Ray
> > Sent: Tuesday, April 9, 2019 5:32 PM
> > To: Gao, Zhichao <zhichao.gao@intel.com>; 'devel@edk2.groups.io'
> > <devel@edk2.groups.io>
> > Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>; Wang, Jian J
> > <jian.j.wang@intel.com>; Zeng, Star <star.zeng@intel.com>; Gao, Liming
> > <liming.gao@intel.com>; Sean Brogan <sean.brogan@microsoft.com>;
> > Michael Turner <Michael.Turner@microsoft.com>
> > Subject: RE: [PATCH 2/2] MdeModulePkg/BdsDxe: Use a pcd to set OS
> > indications bit
> >
> > Resend to groups.io.
> >
> > > -----Original Message-----
> > > From: Ni, Ray
> > > Sent: Tuesday, April 9, 2019 5:31 PM
> > > To: Gao, Zhichao <zhichao.gao@intel.com>; edk2-devel@lists.01.org
> > > Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>; Wang, Jian J
> > > <jian.j.wang@intel.com>; Zeng, Star <star.zeng@intel.com>; Gao,
> > > Liming <liming.gao@intel.com>; Sean Brogan
> > > <sean.brogan@microsoft.com>; Michael Turner
> > > <Michael.Turner@microsoft.com>
> > > Subject: RE: [PATCH 2/2] MdeModulePkg/BdsDxe: Use a pcd to set OS
> > > indications bit
> > >
> > > Zhichao,
> > > In the very bottom of BdsEntry(), below code is always executed no
> > > matter the PCD is true or false.
> > > I don't think that's the right behavior.
> > >
> > >   if (!BootSuccess) {
> > >     LoadOptions = EfiBootManagerGetLoadOptions (&LoadOptionCount,
> > > LoadOptionTypePlatformRecovery);
> > >     ProcessLoadOptions (LoadOptions, LoadOptionCount);
> > >     EfiBootManagerFreeLoadOptions (LoadOptions, LoadOptionCount);
> > >   }
> > >
> > > > -----Original Message-----
> > > > From: Gao, Zhichao <zhichao.gao@intel.com>
> > > > Sent: Tuesday, April 2, 2019 1:50 PM
> > > > To: edk2-devel@lists.01.org
> > > > Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>; Wang, Jian J
> > > > <jian.j.wang@intel.com>; Ni, Ray <ray.ni@intel.com>; Zeng, Star
> > > > <star.zeng@intel.com>; Gao, Liming <liming.gao@intel.com>; Sean
> > > > Brogan <sean.brogan@microsoft.com>; Michael Turner
> > > > <Michael.Turner@microsoft.com>
> > > > Subject: [PATCH 2/2] MdeModulePkg/BdsDxe: Use a pcd to set OS
> > > > indications bit
> > > >
> > > > From: Bret Barkelew <Bret.Barkelew@microsoft.com>
> > > >
> > > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1678
> > > >
> > > > Use the pcd PcdPlatformRecoverySupport to control whether to set
> > > > the PlatformRecovery#### variable and whether to set the
> > > > EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY bit of variable
> > > > "OsIndicationsSupported".
> > > >
> > > > Cc: Jian J Wang <jian.j.wang@intel.com>
> > > > Cc: Ray Ni <ray.ni@intel.com>
> > > > Cc: Star Zeng <star.zeng@intel.com>
> > > > Cc: Liming Gao <liming.gao@intel.com>
> > > > Cc: Sean Brogan <sean.brogan@microsoft.com>
> > > > Cc: Michael Turner <Michael.Turner@microsoft.com>
> > > > Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
> > > > Contributed-under: TianoCore Contribution Agreement 1.1
> > > > Signed-off-by: Zhichao Gao <zhichao.gao@intel.com>
> > > > ---
> > > >  MdeModulePkg/Universal/BdsDxe/BdsDxe.inf |  1 +
> > > > MdeModulePkg/Universal/BdsDxe/BdsEntry.c | 74 +++++++++++++------
> > --
> > > --
> > > > -
> > > >  2 files changed, 41 insertions(+), 34 deletions(-)
> > > >
> > > > diff --git a/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> > > > b/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> > > > index 82eb8aafc6..9caabbce7f 100644
> > > > --- a/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> > > > +++ b/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> > > > @@ -101,6 +101,7 @@
> > > >    gEfiMdeModulePkgTokenSpaceGuid.PcdConInConnectOnDemand
> > > > ## CONSUMES
> > > >    gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable
> > ##
> > > > SOMETIMES_CONSUMES
> > > >    gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed                       ##
> > > > CONSUMES
> > > > +  gEfiMdeModulePkgTokenSpaceGuid.PcdPlatformRecoverySupport
> > > > ## CONSUMES
> > > >
> > > >  [Depex]
> > > >    TRUE
> > > > diff --git a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> > > > b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> > > > index 8946d79ab2..ade77adb7d 100644
> > > > --- a/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> > > > +++ b/MdeModulePkg/Universal/BdsDxe/BdsEntry.c
> > > > @@ -552,10 +552,14 @@ BdsFormalizeOSIndicationVariable (
> > > >    //
> > > >    Status = EfiBootManagerGetBootManagerMenu (&BootManagerMenu);
> > > >    if (Status != EFI_NOT_FOUND) {
> > > > -    OsIndicationSupport = EFI_OS_INDICATIONS_BOOT_TO_FW_UI |
> > > > EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY;
> > > > +    OsIndicationSupport = EFI_OS_INDICATIONS_BOOT_TO_FW_UI;
> > > >      EfiBootManagerFreeLoadOption (&BootManagerMenu);
> > > >    } else {
> > > > -    OsIndicationSupport =
> > > > EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY;
> > > > +    OsIndicationSupport = 0;
> > > > +  }
> > > > +
> > > > +  if (PcdGetBool (PcdPlatformRecoverySupport)) {
> > > > +    OsIndicationSupport |=
> > > > EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY;
> > > >    }
> > > >
> > > >    Status = gRT->SetVariable (
> > > > @@ -769,41 +773,43 @@ BdsEntry (
> > > >    //
> > > >    InitializeLanguage (TRUE);
> > > >
> > > > -  //
> > > > -  // System firmware must include a PlatformRecovery#### variable
> > > > specifying
> > > > -  // a short-form File Path Media Device Path containing the
> > > > platform default
> > > > -  // file path for removable media
> > > > -  //
> > > > -  FilePath = FileDevicePath (NULL,
> > > > EFI_REMOVABLE_MEDIA_FILE_NAME);
> > > > -  Status = EfiBootManagerInitializeLoadOption (
> > > > -             &LoadOption,
> > > > -             LoadOptionNumberUnassigned,
> > > > -             LoadOptionTypePlatformRecovery,
> > > > -             LOAD_OPTION_ACTIVE,
> > > > -             L"Default PlatformRecovery",
> > > > -             FilePath,
> > > > -             NULL,
> > > > -             0
> > > > -             );
> > > > -  ASSERT_EFI_ERROR (Status);
> > > > -  LoadOptions = EfiBootManagerGetLoadOptions (&LoadOptionCount,
> > > > LoadOptionTypePlatformRecovery);
> > > > -  if (EfiBootManagerFindLoadOption (&LoadOption, LoadOptions,
> > > > LoadOptionCount) == -1) {
> > > > -    for (Index = 0; Index < LoadOptionCount; Index++) {
> > > > -      //
> > > > -      // The PlatformRecovery#### options are sorted by OptionNumber.
> > > > -      // Find the the smallest unused number as the new OptionNumber.
> > > > -      //
> > > > -      if (LoadOptions[Index].OptionNumber != Index) {
> > > > -        break;
> > > > +  if (PcdGetBool (PcdPlatformRecoverySupport)) {
> > > > +    //
> > > > +    // System firmware must include a PlatformRecovery####
> > > > + variable
> > > > specifying
> > > > +    // a short-form File Path Media Device Path containing the
> > > > + platform
> > > > default
> > > > +    // file path for removable media
> > > > +    //
> > > > +    FilePath = FileDevicePath (NULL,
> > EFI_REMOVABLE_MEDIA_FILE_NAME);
> > > > +    Status = EfiBootManagerInitializeLoadOption (
> > > > +               &LoadOption,
> > > > +               LoadOptionNumberUnassigned,
> > > > +               LoadOptionTypePlatformRecovery,
> > > > +               LOAD_OPTION_ACTIVE,
> > > > +               L"Default PlatformRecovery",
> > > > +               FilePath,
> > > > +               NULL,
> > > > +               0
> > > > +               );
> > > > +    ASSERT_EFI_ERROR (Status);
> > > > +    LoadOptions = EfiBootManagerGetLoadOptions (&LoadOptionCount,
> > > > LoadOptionTypePlatformRecovery);
> > > > +    if (EfiBootManagerFindLoadOption (&LoadOption, LoadOptions,
> > > > LoadOptionCount) == -1) {
> > > > +      for (Index = 0; Index < LoadOptionCount; Index++) {
> > > > +        //
> > > > +        // The PlatformRecovery#### options are sorted by OptionNumber.
> > > > +        // Find the the smallest unused number as the new OptionNumber.
> > > > +        //
> > > > +        if (LoadOptions[Index].OptionNumber != Index) {
> > > > +          break;
> > > > +        }
> > > >        }
> > > > +      LoadOption.OptionNumber = Index;
> > > > +      Status = EfiBootManagerLoadOptionToVariable (&LoadOption);
> > > > +      ASSERT_EFI_ERROR (Status);
> > > >      }
> > > > -    LoadOption.OptionNumber = Index;
> > > > -    Status = EfiBootManagerLoadOptionToVariable (&LoadOption);
> > > > -    ASSERT_EFI_ERROR (Status);
> > > > +    EfiBootManagerFreeLoadOption (&LoadOption);
> > > > +    FreePool (FilePath);
> > > > +    EfiBootManagerFreeLoadOptions (LoadOptions, LoadOptionCount);
> > > >    }
> > > > -  EfiBootManagerFreeLoadOption (&LoadOption);
> > > > -  FreePool (FilePath);
> > > > -  EfiBootManagerFreeLoadOptions (LoadOptions, LoadOptionCount);
> > > >
> > > >    //
> > > >    // Report Status Code to indicate connecting drivers will
> > > > happen
> > > > --
> > > > 2.21.0.windows.1


  reply	other threads:[~2019-04-10  1:59 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-02  5:49 [PATCH 0/2] Use a pcd to control Platform Recovery behavior Zhichao Gao
2019-04-02  5:49 ` [PATCH 1/2] MdeModulePkg: Add a pcd to set the OS indications bit Zhichao Gao
2019-04-09  9:23   ` [edk2-devel] " Ni, Ray
2019-04-02  5:49 ` [PATCH 2/2] MdeModulePkg/BdsDxe: Use a pcd to set " Zhichao Gao
     [not found]   ` <734D49CCEBEEF84792F5B80ED585239D5C0DBCB4@SHSMSX104.ccr.corp.intel.com>
2019-04-09  9:32     ` Ni, Ray
2019-04-10  0:44       ` Gao, Zhichao
2019-04-10  1:59         ` Ni, Ray [this message]
2019-04-10  2:00         ` Ni, Ray
2019-04-26  3:12           ` Gao, Zhichao
2019-04-26  5:55             ` Ni, Ray

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=734D49CCEBEEF84792F5B80ED585239D5C0DD146@SHSMSX104.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox