#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
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
+ VOID *Hob;\r
VOID *DeviceTreeBase;\r
INT32 Node, Prev;\r
INT32 RtcNode;\r
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