[edk2-devel] [edk2-platforms PATCH] Platform/RaspberryPi: Check for Boot Discovery Policy change.

Ard Biesheuvel ardb at kernel.org
Wed Sep 1 08:48:50 UTC 2021


On Wed, 1 Sept 2021 at 10:45, Grzegorz Bernacki <gjb at semihalf.com> wrote:
>
> Hi Ard,
>
> The problem is that for some reason EfiBootManagerRefreshAllBootOption
> () overwrites BootOrder. For example, if USB bootable device is
> removed from the top and added at the bottom of the list.
> I will debug the problem further, however this patch is needed to
> retain correct boot order unless I find the root cause of the problem.

Thanks for the explanation.

I would prefer to find the root cause first. Pasting this workaround
all over the place is really not the right way to deal with this.


>
> wt., 31 sie 2021 o 14:11 Ard Biesheuvel <ardb at kernel.org> napisał(a):
> >
> > On Wed, 18 Aug 2021 at 09:38, Grzegorz Bernacki <gjb at semihalf.com> wrote:
> > >
> > > This patch adds checks if Boot Discovery Policy has been
> > > changed. Only in that case EfiBootManagerRefreshAllBootOption()
> > > should be called.
> > >
> > > Signed-off-by: Grzegorz Bernacki <gjb at semihalf.com>
> >
> > To be honest, I'm not a fan of this bodge. Can you explain why we need
> > two separate EFI variables to keep track of this state?
> >
> >
> > > ---
> > >  Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c | 24 +++++++++++++++++++-
> > >  1 file changed, 23 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c b/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c
> > > index c8305ce4f5..378ba0ebf4 100644
> > > --- a/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c
> > > +++ b/Platform/RaspberryPi/Library/PlatformBootManagerLib/PlatformBm.c
> > > @@ -617,6 +617,7 @@ BootDiscoveryPolicyHandler (
> > >  {
> > >    EFI_STATUS                       Status;
> > >    UINT32                           DiscoveryPolicy;
> > > +  UINT32                           DiscoveryPolicyOld;
> > >    UINTN                            Size;
> > >    EFI_BOOT_MANAGER_POLICY_PROTOCOL *BMPolicy;
> > >    EFI_GUID                         *Class;
> > > @@ -678,7 +679,28 @@ BootDiscoveryPolicyHandler (
> > >      return Status;
> > >    }
> > >
> > > -  EfiBootManagerRefreshAllBootOption();
> > > +  //
> > > +  // Refresh Boot Options if Boot Discovery Policy has been changed
> > > +  //
> > > +  Size = sizeof (DiscoveryPolicyOld);
> > > +  Status = gRT->GetVariable (
> > > +                  BOOT_DISCOVERY_POLICY_OLD_VAR,
> > > +                  &gBootDiscoveryPolicyMgrFormsetGuid,
> > > +                  NULL,
> > > +                  &Size,
> > > +                  &DiscoveryPolicyOld
> > > +                  );
> > > +  if ((Status == EFI_NOT_FOUND) || (DiscoveryPolicyOld != DiscoveryPolicy)) {
> > > +    EfiBootManagerRefreshAllBootOption();
> > > +
> > > +    Status = gRT->SetVariable (
> > > +                    BOOT_DISCOVERY_POLICY_OLD_VAR,
> > > +                    &gBootDiscoveryPolicyMgrFormsetGuid,
> > > +                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
> > > +                    sizeof (DiscoveryPolicyOld),
> > > +                    &DiscoveryPolicy
> > > +                    );
> > > +  }
> > >
> > >    return EFI_SUCCESS;
> > >  }
> > > --
> > > 2.25.1
> > >


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#80065): https://edk2.groups.io/g/devel/message/80065
Mute This Topic: https://groups.io/mt/84967553/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