]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c
OvmfPkg: Update DxeAcpiTimerLib to read HostBridgeDevId in PlatformInfoHob
[mirror_edk2.git] / OvmfPkg / Library / AcpiTimerLib / DxeAcpiTimerLib.c
index 1158461874550db1b8c40a5a1560e09ceff78cbc..01a41a6a451504dfbce6f94a800554552f4aa8eb 100644 (file)
@@ -6,10 +6,16 @@
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
+#include <Uefi/UefiBaseType.h>\r
+#include <Uefi/UefiMultiPhase.h>\r
+#include <Pi/PiBootMode.h>\r
+#include <Pi/PiHob.h>\r
+#include <Library/HobLib.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/IoLib.h>\r
 #include <Library/PcdLib.h>\r
 #include <Library/PciLib.h>\r
+#include <Library/PlatformInitLib.h>\r
 #include <OvmfPlatforms.h>\r
 \r
 //\r
@@ -36,13 +42,26 @@ AcpiTimerLibConstructor (
   VOID\r
   )\r
 {\r
-  UINT16  HostBridgeDevId;\r
-  UINTN   Pmba;\r
+  UINT16                 HostBridgeDevId;\r
+  UINTN                  Pmba;\r
+  EFI_HOB_GUID_TYPE      *GuidHob;\r
+  EFI_HOB_PLATFORM_INFO  *PlatformInfoHob = NULL;\r
 \r
   //\r
   // Query Host Bridge DID to determine platform type\r
+  // Tdx guest stores the HostBridgePciDevId in a GuidHob.\r
+  // So we first check if this HOB exists\r
   //\r
-  HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);\r
+  GuidHob = GetFirstGuidHob (&gUefiOvmfPkgPlatformInfoGuid);\r
+  if (GuidHob != NULL) {\r
+    PlatformInfoHob = (EFI_HOB_PLATFORM_INFO *)GET_GUID_HOB_DATA (GuidHob);\r
+    HostBridgeDevId = PlatformInfoHob->HostBridgeDevId;\r
+  } else {\r
+    DEBUG ((DEBUG_ERROR, "PlatformInfoHob is not found.\n"));\r
+    ASSERT (FALSE);\r
+    return RETURN_UNSUPPORTED;\r
+  }\r
+\r
   switch (HostBridgeDevId) {\r
     case INTEL_82441_DEVICE_ID:\r
       Pmba = POWER_MGMT_REGISTER_PIIX4 (PIIX4_PMBA);\r