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