--- /dev/null
+/** @file\r
+ Kvmtool platform PEI library.\r
+\r
+ Copyright (c) 2020, ARM Limited. All rights reserved.\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include <PiPei.h>\r
+\r
+#include <Guid/Early16550UartBaseAddress.h>\r
+#include <Guid/FdtHob.h>\r
+\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/HobLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/PeiServicesLib.h>\r
+#include <libfdt.h>\r
+\r
+/** Initialise Platform HOBs\r
+\r
+ @retval EFI_SUCCESS Success.\r
+ @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
+ @retval EFI_OUT_OF_RESOURCES Out of resources.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PlatformPeim (\r
+ VOID\r
+ )\r
+{\r
+ VOID *Base;\r
+ VOID *NewBase;\r
+ UINTN FdtSize;\r
+ UINTN FdtPages;\r
+ UINT64 *FdtHobData;\r
+ UINT64 *UartHobData;\r
+\r
+ Base = (VOID*)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress);\r
+ if ((Base == NULL) || (fdt_check_header (Base) != 0)) {\r
+ ASSERT (0);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ FdtSize = fdt_totalsize (Base) + PcdGet32 (PcdDeviceTreeAllocationPadding);\r
+ FdtPages = EFI_SIZE_TO_PAGES (FdtSize);\r
+ NewBase = AllocatePages (FdtPages);\r
+ if (NewBase == NULL) {\r
+ ASSERT (0);\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ fdt_open_into (Base, NewBase, EFI_PAGES_TO_SIZE (FdtPages));\r
+\r
+ FdtHobData = BuildGuidHob (&gFdtHobGuid, sizeof (*FdtHobData));\r
+ if (FdtHobData == NULL) {\r
+ ASSERT (0);\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ *FdtHobData = (UINTN)NewBase;\r
+\r
+ UartHobData = BuildGuidHob (\r
+ &gEarly16550UartBaseAddressGuid,\r
+ sizeof (*UartHobData)\r
+ );\r
+ if (UartHobData == NULL) {\r
+ ASSERT (0);\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ *UartHobData = PcdGet64 (PcdSerialRegisterBase);\r
+\r
+ BuildFvHob (PcdGet64 (PcdFvBaseAddress), PcdGet32 (PcdFvSize));\r
+\r
+ return EFI_SUCCESS;\r
+}\r
--- /dev/null
+## @file\r
+# Kvmtool platform PEI library.\r
+#\r
+# Copyright (c) 2020, ARM Limited. All rights reserved.\r
+#\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
+#\r
+##\r
+\r
+[Defines]\r
+ INF_VERSION = 0x0001001B\r
+ BASE_NAME = PlatformPeiLib\r
+ FILE_GUID = 21073FB3-BA6F-43EB-83F0-4A840C648165\r
+ MODULE_TYPE = BASE\r
+ VERSION_STRING = 1.0\r
+ LIBRARY_CLASS = KvmtoolPlatformPeiLib\r
+\r
+[Sources]\r
+ KvmtoolPlatformPeiLib.c\r
+\r
+[Packages]\r
+ ArmPkg/ArmPkg.dec\r
+ ArmVirtPkg/ArmVirtPkg.dec\r
+ EmbeddedPkg/EmbeddedPkg.dec\r
+ MdeModulePkg/MdeModulePkg.dec\r
+ MdePkg/MdePkg.dec\r
+\r
+[LibraryClasses]\r
+ DebugLib\r
+ HobLib\r
+ FdtLib\r
+ PcdLib\r
+ PeiServicesLib\r
+\r
+[FixedPcd]\r
+ gArmTokenSpaceGuid.PcdFvSize\r
+ gArmVirtTokenSpaceGuid.PcdDeviceTreeAllocationPadding\r
+\r
+[Pcd]\r
+ gArmTokenSpaceGuid.PcdFvBaseAddress\r
+ gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase\r
+\r
+[Guids]\r
+ gFdtHobGuid\r
+ gEarly16550UartBaseAddressGuid\r
+\r
+[Depex]\r
+ gEfiPeiMemoryDiscoveredPpiGuid\r