Revert "ArmVirtPkg/FdtClientDxe: install DT configuration table at ReadyToBoot"
This reverts commit 18f6d4df9e
.
We realized that DXE drivers that are independent of AcpiPlatformDxe (that
is, independent of QEMU's ACPI generation), such as RamDiskDxe and
BootGraphicsResourceTableDxe, may produce and/or manipulate ACPI tables,
at driver dispatch or even at Ready To Boot.
This makes it unsafe for us to check for ACPI presence in the UEFI system
config table in a Ready To Boot callback, in order to decide about
exposing the DT.
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
This commit is contained in:
@@ -20,7 +20,6 @@
|
|||||||
#include <Library/HobLib.h>
|
#include <Library/HobLib.h>
|
||||||
#include <libfdt.h>
|
#include <libfdt.h>
|
||||||
|
|
||||||
#include <Guid/EventGroup.h>
|
|
||||||
#include <Guid/Fdt.h>
|
#include <Guid/Fdt.h>
|
||||||
#include <Guid/FdtHob.h>
|
#include <Guid/FdtHob.h>
|
||||||
|
|
||||||
@@ -307,30 +306,6 @@ STATIC FDT_CLIENT_PROTOCOL mFdtClientProtocol = {
|
|||||||
GetOrInsertChosenNode,
|
GetOrInsertChosenNode,
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC
|
|
||||||
VOID
|
|
||||||
EFIAPI
|
|
||||||
OnReadyToBoot (
|
|
||||||
EFI_EVENT Event,
|
|
||||||
VOID *Context
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
if (!FeaturePcdGet (PcdPureAcpiBoot)) {
|
|
||||||
//
|
|
||||||
// Only install the FDT as a configuration table if we want to leave it up
|
|
||||||
// to the OS to decide whether it prefers ACPI over DT.
|
|
||||||
//
|
|
||||||
Status = gBS->InstallConfigurationTable (&gFdtTableGuid, mDeviceTreeBase);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
gBS->CloseEvent (Event);
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC EFI_EVENT mReadyToBootEvent;
|
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
InitializeFdtClientDxe (
|
InitializeFdtClientDxe (
|
||||||
@@ -358,21 +333,15 @@ InitializeFdtClientDxe (
|
|||||||
|
|
||||||
DEBUG ((EFI_D_INFO, "%a: DTB @ 0x%p\n", __FUNCTION__, mDeviceTreeBase));
|
DEBUG ((EFI_D_INFO, "%a: DTB @ 0x%p\n", __FUNCTION__, mDeviceTreeBase));
|
||||||
|
|
||||||
Status = gBS->InstallProtocolInterface (&ImageHandle, &gFdtClientProtocolGuid,
|
if (!FeaturePcdGet (PcdPureAcpiBoot)) {
|
||||||
EFI_NATIVE_INTERFACE, &mFdtClientProtocol);
|
//
|
||||||
if (EFI_ERROR (Status)) {
|
// Only install the FDT as a configuration table if we want to leave it up
|
||||||
return Status;
|
// to the OS to decide whether it prefers ACPI over DT.
|
||||||
}
|
//
|
||||||
|
Status = gBS->InstallConfigurationTable (&gFdtTableGuid, DeviceTreeBase);
|
||||||
Status = gBS->CreateEventEx (
|
|
||||||
EVT_NOTIFY_SIGNAL,
|
|
||||||
TPL_CALLBACK,
|
|
||||||
OnReadyToBoot,
|
|
||||||
NULL,
|
|
||||||
&gEfiEventReadyToBootGuid,
|
|
||||||
&mReadyToBootEvent
|
|
||||||
);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
}
|
||||||
return EFI_SUCCESS;
|
|
||||||
|
return gBS->InstallProtocolInterface (&ImageHandle, &gFdtClientProtocolGuid,
|
||||||
|
EFI_NATIVE_INTERFACE, &mFdtClientProtocol);
|
||||||
}
|
}
|
||||||
|
@@ -42,7 +42,6 @@
|
|||||||
gFdtClientProtocolGuid ## PRODUCES
|
gFdtClientProtocolGuid ## PRODUCES
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEventReadyToBootGuid
|
|
||||||
gFdtHobGuid
|
gFdtHobGuid
|
||||||
gFdtTableGuid
|
gFdtTableGuid
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user