Skip to content

Commit

Permalink
Revert "ArmVirtPkg/FdtClientDxe: install DT configuration table at Re…
Browse files Browse the repository at this point in the history
…adyToBoot"

This reverts commit 18f6d4d.

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 <[email protected]>
Cc: Leif Lindholm <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <[email protected]>
Reviewed-by: Ard Biesheuvel <[email protected]>
  • Loading branch information
lersek committed Mar 28, 2017
1 parent 30cb148 commit a00601c
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 41 deletions.
49 changes: 9 additions & 40 deletions ArmVirtPkg/FdtClientDxe/FdtClientDxe.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include <Library/HobLib.h>
#include <libfdt.h>

#include <Guid/EventGroup.h>
#include <Guid/Fdt.h>
#include <Guid/FdtHob.h>

Expand Down Expand Up @@ -307,30 +306,6 @@ STATIC FDT_CLIENT_PROTOCOL mFdtClientProtocol = {
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
EFIAPI
InitializeFdtClientDxe (
Expand Down Expand Up @@ -358,21 +333,15 @@ InitializeFdtClientDxe (

DEBUG ((EFI_D_INFO, "%a: DTB @ 0x%p\n", __FUNCTION__, mDeviceTreeBase));

Status = gBS->InstallProtocolInterface (&ImageHandle, &gFdtClientProtocolGuid,
EFI_NATIVE_INTERFACE, &mFdtClientProtocol);
if (EFI_ERROR (Status)) {
return 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, DeviceTreeBase);
ASSERT_EFI_ERROR (Status);
}

Status = gBS->CreateEventEx (
EVT_NOTIFY_SIGNAL,
TPL_CALLBACK,
OnReadyToBoot,
NULL,
&gEfiEventReadyToBootGuid,
&mReadyToBootEvent
);
ASSERT_EFI_ERROR (Status);

return EFI_SUCCESS;
return gBS->InstallProtocolInterface (&ImageHandle, &gFdtClientProtocolGuid,
EFI_NATIVE_INTERFACE, &mFdtClientProtocol);
}
1 change: 0 additions & 1 deletion ArmVirtPkg/FdtClientDxe/FdtClientDxe.inf
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
gFdtClientProtocolGuid ## PRODUCES

[Guids]
gEfiEventReadyToBootGuid
gFdtHobGuid
gFdtTableGuid

Expand Down

0 comments on commit a00601c

Please sign in to comment.