]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmVirtPkg: Add Kvmtool Platform Pei Lib
authorSami Mujawar <sami.mujawar@arm.com>
Fri, 2 Oct 2020 21:14:04 +0000 (22:14 +0100)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 16 Oct 2020 17:21:04 +0000 (17:21 +0000)
The PlatformPeim() in the PlatformPeiLib is invoked
by the PrePiMain() and provides the platform an
opportunity to setup the plaform specific HOBs.

This PlatfromPeiLib initialises the Kvmtool platform
HOBs like the Fdt, 16550BaseAddress, etc.

Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Ard Biesheuvel <Ard.Biesheuvel@arm.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
ArmVirtPkg/Library/KvmtoolPlatformPeiLib/KvmtoolPlatformPeiLib.c [new file with mode: 0644]
ArmVirtPkg/Library/KvmtoolPlatformPeiLib/KvmtoolPlatformPeiLib.inf [new file with mode: 0644]

diff --git a/ArmVirtPkg/Library/KvmtoolPlatformPeiLib/KvmtoolPlatformPeiLib.c b/ArmVirtPkg/Library/KvmtoolPlatformPeiLib/KvmtoolPlatformPeiLib.c
new file mode 100644 (file)
index 0000000..255eb05
--- /dev/null
@@ -0,0 +1,79 @@
+/** @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
diff --git a/ArmVirtPkg/Library/KvmtoolPlatformPeiLib/KvmtoolPlatformPeiLib.inf b/ArmVirtPkg/Library/KvmtoolPlatformPeiLib/KvmtoolPlatformPeiLib.inf
new file mode 100644 (file)
index 0000000..f201aee
--- /dev/null
@@ -0,0 +1,49 @@
+## @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