On 1 September 2015 at 17:11, Laszlo Ersek <ler...@redhat.com> wrote:
> On 09/01/15 16:26, Ard Biesheuvel wrote:
>> Like the ArmVirtPkg platforms up until SVN r17713, the ArmPlatformPkg
>> platforms built with the Intel BDS fail to signal the end-of-DXE event
>> 'gEfiEndOfDxeEventGroupGuid' when entering the BDS phase, which results
>> in some loss of functionality, i.e., variable reclaim in the VariableDxe
>> drivers, and the splitting of the memory regions that is part of the recently
>> added UEFI 2.5 properties table feature.
>>
>> As discussed on the edk2-devel mailing list here:
>>
>> http://thread.gmane.org/gmane.comp.bios.tianocore.devel/16088/focus=16109
>>
>> it is up to the platform BDS to signal that event, since there may be
>> platform specific ordering constraints with respect to the signalling
>> of the event that are difficult to honor at the generic level.
>>
>> So add the SignalEvent () call to PlatformBdsInit () of ArmPlatformPkg's
>> PlatformBdsLib implementation for the Intel BDS.
>>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
>> ---
>>  ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c      | 36 
>> ++++++++++++++++++++
>>  ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.h      |  1 +
>>  ArmPlatformPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf |  1 +
>>  3 files changed, 38 insertions(+)
>>
>> diff --git a/ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c 
>> b/ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c
>> index 98d5b277a636..e27e6d66df91 100644
>> --- a/ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c
>> +++ b/ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.c
>> @@ -31,6 +31,24 @@ PlatformIntelBdsConstructor (
>>    return EFI_SUCCESS;
>>  }
>>
>> +/**
>> +  An empty function to pass error checking of CreateEventEx ().
>> +
>> +  @param  Event                 Event whose notification function is being 
>> invoked.
>> +  @param  Context               Pointer to the notification function's 
>> context,
>> +                                which is implementation-dependent.
>> +
>> +**/
>> +STATIC
>> +VOID
>> +EFIAPI
>> +EmptyCallbackFunction (
>> +  IN EFI_EVENT                Event,
>> +  IN VOID                     *Context
>> +  )
>> +{
>> +}
>> +
>>  //
>>  // BDS Platform Functions
>>  //
>> @@ -45,6 +63,24 @@ PlatformBdsInit (
>>    VOID
>>    )
>>  {
>> +  EFI_EVENT           EndOfDxeEvent;
>> +  EFI_STATUS          Status;
>> +
>> +  //
>> +  // Signal EndOfDxe PI Event
>> +  //
>> +  Status = gBS->CreateEventEx (
>> +                  EVT_NOTIFY_SIGNAL,
>> +                  TPL_CALLBACK,
>> +                  EmptyCallbackFunction,
>> +                  NULL,
>> +                  &gEfiEndOfDxeEventGroupGuid,
>> +                  &EndOfDxeEvent
>> +                  );
>> +  if (!EFI_ERROR (Status)) {
>> +    gBS->SignalEvent (EndOfDxeEvent);
>> +    gBS->CloseEvent (EndOfDxeEvent);
>> +  }
>>  }
>>
>>  STATIC
>> diff --git a/ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.h 
>> b/ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.h
>> index 7122d58be7d7..da428288fb9f 100644
>> --- a/ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.h
>> +++ b/ArmPlatformPkg/Library/PlatformIntelBdsLib/IntelBdsPlatform.h
>> @@ -30,5 +30,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
>> EXPRESS OR IMPLIED.
>>  #include <Library/PlatformBdsLib.h>
>>
>>  #include <Guid/GlobalVariable.h>
>> +#include <Guid/EventGroup.h>
>>
>>  #endif // _INTEL_BDS_PLATFORM_H
>> diff --git 
>> a/ArmPlatformPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf 
>> b/ArmPlatformPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf
>> index a18c5ea71f70..39df113288d2 100644
>> --- a/ArmPlatformPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf
>> +++ b/ArmPlatformPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf
>> @@ -53,6 +53,7 @@ [LibraryClasses]
>>
>>  [Guids]
>>    gArmGlobalVariableGuid
>> +  gEfiEndOfDxeEventGroupGuid
>>
>>  [Pcd]
>>    gArmPlatformTokenSpaceGuid.PcdDefaultConInPaths
>>
>
> As far as I can see, the only platform affected by this change (ie. the
> only client of the library instance) is "ArmVirtPkg/ArmVirtXen.dsc". I
> think it should be okay to signal End-of-Dxe on that platform, as early
> as in PlatformBdsInit(). (We do the same in ArmVirtQemu.)
>

I am adding support for the Intel BDS to ArmVExpress-FVP-AArch64 as
well, and noticed that the memory protection feature did not work in
that case.

> Reviewed-by: Laszlo Ersek <ler...@redhat.com>

Thanks,
Ard.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to