]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/ArmVirtualizationPkg/VirtFdtDxe/VirtFdtDxe.c
ArmVirtualizationPkg: use a HOB to store device tree blob
[mirror_edk2.git] / ArmPlatformPkg / ArmVirtualizationPkg / VirtFdtDxe / VirtFdtDxe.c
index 041ad88e10bcb2cfb06cf77e2ba5f1f6cf36dbf7..e63294a12e11ddb5df340f489545151054cfecf9 100644 (file)
 #include <Library/DevicePathLib.h>\r
 #include <Library/PcdLib.h>\r
 #include <Library/DxeServicesLib.h>\r
+#include <Library/HobLib.h>\r
 #include <libfdt.h>\r
 \r
 #include <Guid/Fdt.h>\r
 #include <Guid/VirtioMmioTransport.h>\r
+#include <Guid/FdtHob.h>\r
 \r
 #pragma pack (1)\r
 typedef struct {\r
@@ -277,6 +279,7 @@ InitializeVirtFdtDxe (
   IN EFI_SYSTEM_TABLE     *SystemTable\r
   )\r
 {\r
+  VOID                           *Hob;\r
   VOID                           *DeviceTreeBase;\r
   INT32                          Node, Prev;\r
   INT32                          RtcNode;\r
@@ -297,8 +300,11 @@ InitializeVirtFdtDxe (
   UINT64                         FwCfgDataAddress;\r
   UINT64                         FwCfgDataSize;\r
 \r
-  DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeBaseAddress);\r
-  ASSERT (DeviceTreeBase != NULL);\r
+  Hob = GetFirstGuidHob(&gFdtHobGuid);\r
+  if (Hob == NULL || GET_GUID_HOB_DATA_SIZE (Hob) != sizeof (UINT64)) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+  DeviceTreeBase = (VOID *)(UINTN)*(UINT64 *)GET_GUID_HOB_DATA (Hob);\r
 \r
   if (fdt_check_header (DeviceTreeBase) != 0) {\r
     DEBUG ((EFI_D_ERROR, "%a: No DTB found @ 0x%p\n", __FUNCTION__, DeviceTreeBase));\r