summaryrefslogtreecommitdiffstats
path: root/EmbeddedPkg/Drivers
diff options
context:
space:
mode:
Diffstat (limited to 'EmbeddedPkg/Drivers')
-rw-r--r--EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c34
-rw-r--r--EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf2
2 files changed, 17 insertions, 19 deletions
diff --git a/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c b/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c
index 5778633b49..1014be2281 100644
--- a/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c
+++ b/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c
@@ -15,7 +15,7 @@
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/DevicePathLib.h>
-#include <Library/DxeServicesLib.h>
+#include <Library/DtPlatformDtbLoaderLib.h>
#include <Library/HiiLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
@@ -114,17 +114,13 @@ DtPlatformDxeEntryPoint (
UINTN BufferSize;
VOID *Dtb;
UINTN DtbSize;
- VOID *DtbCopy;
- //
- // Check whether a DTB blob is included in the firmware image.
- //
Dtb = NULL;
- Status = GetSectionFromAnyFv (&gDtPlatformDefaultDtbFileGuid,
- EFI_SECTION_RAW, 0, &Dtb, &DtbSize);
+ Status = DtPlatformLoadDtb (&Dtb, &DtbSize);
if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_WARN, "%a: no DTB blob found, defaulting to ACPI\n",
- __FUNCTION__));
+ DEBUG ((DEBUG_WARN,
+ "%a: no DTB blob could be loaded, defaulting to ACPI (Status == %r)\n",
+ __FUNCTION__, Status));
DtAcpiPref.Pref = DT_ACPI_SELECT_ACPI;
} else {
//
@@ -157,7 +153,7 @@ DtPlatformDxeEntryPoint (
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
sizeof (DtAcpiPref), &DtAcpiPref);
if (EFI_ERROR (Status)) {
- return Status;
+ goto FreeDtb;
}
}
@@ -172,23 +168,18 @@ DtPlatformDxeEntryPoint (
DEBUG ((DEBUG_ERROR,
"%a: failed to install gEdkiiPlatformHasAcpiGuid as a protocol\n",
__FUNCTION__));
- return Status;
+ goto FreeDtb;
}
} else if (DtAcpiPref.Pref == DT_ACPI_SELECT_DT) {
//
// DT was selected: copy the blob into newly allocated memory and install
// a reference to it as the FDT configuration table.
//
- DtbCopy = AllocateCopyPool (DtbSize, Dtb);
- if (DtbCopy == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- Status = gBS->InstallConfigurationTable (&gFdtTableGuid, DtbCopy);
+ Status = gBS->InstallConfigurationTable (&gFdtTableGuid, Dtb);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "%a: failed to install FDT configuration table\n",
__FUNCTION__));
- FreePool (DtbCopy);
- return Status;
+ goto FreeDtb;
}
} else {
ASSERT (FALSE);
@@ -210,4 +201,11 @@ DtPlatformDxeEntryPoint (
// installed in that case.
//
return InstallHiiPages ();
+
+FreeDtb:
+ if (Dtb != NULL) {
+ FreePool (Dtb);
+ }
+
+ return Status;
}
diff --git a/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf b/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
index b73877a608..45dfd9088b 100644
--- a/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
+++ b/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
@@ -40,7 +40,7 @@
[LibraryClasses]
BaseLib
DebugLib
- DxeServicesLib
+ DtPlatformDtbLoaderLib
HiiLib
MemoryAllocationLib
UefiBootServicesTableLib