]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: Switch timer in build time for OvmfPkg
authorMin Xu <min.m.xu@intel.com>
Tue, 26 Oct 2021 05:37:11 +0000 (13:37 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Sat, 2 Apr 2022 08:15:12 +0000 (08:15 +0000)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3711

Discussion in https://bugzilla.tianocore.org/show_bug.cgi?id=1496 shows
that 8254TimerDxe was not written for OVMF. It was moved over from
PcAtChipsetPkg to OvmfPkg in 2019.  Probably because OVMF was the only
user left.

Most likely the reason OVMF used 8254TimerDxe initially was that it could
just use the existing driver in PcAtChipsetPkg.  And it simply hasn't
been changed ever.

CSM support was moved in 2019 too. (CSM support depends on 8254/8259
drivers). So 8254TimerDxe will be used when CSM_ENABLE=TRUE.

There are 4 .dsc which include the 8254Timer.
 - OvmfPkg/AmdSev/AmdSevX64.dsc
 - OvmfPkg/OvmfPkgIa32.dsc
 - OvmfPkg/OvmfPkgIa32X64.dsc
 - OvmfPkg/OvmfPkgX64.dsc

For the three OvmfPkg* configs using 8254TimerDxe with CSM_ENABLE=TRUE
and LapicTimerDxe otherwise.

For the AmdSev config it doesn't make sense to support a CSM. So use
the lapic timer unconditionally.

Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Brijesh Singh <brijesh.singh@amd.com>
Cc: Erdem Aktas <erdemaktas@google.com>
Cc: James Bottomley <jejb@linux.ibm.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Suggested-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
Signed-off-by: Min Xu <min.m.xu@intel.com>
OvmfPkg/AmdSev/AmdSevX64.dsc
OvmfPkg/AmdSev/AmdSevX64.fdf
OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.c
OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf
OvmfPkg/OvmfPkgIa32.dsc
OvmfPkg/OvmfPkgIa32.fdf
OvmfPkg/OvmfPkgIa32X64.dsc
OvmfPkg/OvmfPkgIa32X64.fdf
OvmfPkg/OvmfPkgX64.dsc
OvmfPkg/OvmfPkgX64.fdf

index 5e096e15dc406cf6511a86ca072fe5d47ceca4c6..fcdc3efab204e3678eedcc479ed0cad58df5136f 100644 (file)
 \r
 !include OvmfPkg/OvmfTpmPcds.dsc.inc\r
 \r
+  gEfiMdePkgTokenSpaceGuid.PcdFSBClock|100000000\r
+\r
 [PcdsDynamicHii]\r
 !include OvmfPkg/OvmfTpmPcdsHii.dsc.inc\r
 \r
   }\r
 \r
   MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
-  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
   UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf\r
   UefiCpuPkg/CpuDxe/CpuDxe.inf\r
-  OvmfPkg/8254TimerDxe/8254Timer.inf\r
+  OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf\r
   OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf\r
   OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf\r
   MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf {\r
index 31f2be66361fecc5b40667ed444b57fdbadc230b..844ba8a116d8b49cedc6d410927bbde828a9de19 100644 (file)
@@ -206,10 +206,9 @@ INF  MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
 INF  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf\r
 INF  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf\r
 INF  MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
-INF  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
 INF  UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf\r
 INF  UefiCpuPkg/CpuDxe/CpuDxe.inf\r
-INF  OvmfPkg/8254TimerDxe/8254Timer.inf\r
+INF  OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf\r
 INF  OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf\r
 INF  OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf\r
 INF  MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf\r
index dd9352b1208800989b813e4fd706335bf5edc2e6..cbc17c979cb60cb05d9ba33498de6d141334b89d 100644 (file)
@@ -174,7 +174,7 @@ TimerDriverSetTimerPeriod (
     //\r
     DisableApicTimerInterrupt ();\r
   } else {\r
-    TimerFrequency = PcdGet32 (PcdFSBClock) / DivideValue;\r
+    TimerFrequency = PcdGet32 (PcdFSBClock) / (UINT32)DivideValue;\r
 \r
     //\r
     // Convert TimerPeriod into local APIC counts\r
index 63b75b75c9217858396b8c0d75c397b2611ec941..3ad28a148c5b0d58d3165b9eb1fe3cb9f8785f52 100644 (file)
@@ -1,5 +1,6 @@
 ## @file\r
 # Local APIC timer driver that provides Timer Arch protocol.\r
+# PcdFSBClock is defined in MdePkg and it should be set by the consumer.\r
 #\r
 # Copyright (c) 2005 - 2019, Intel Corporation. All rights reserved.<BR>\r
 # Copyright (c) 2019, Citrix Systems, Inc.\r
index c64d469aeec46b58e72b5744c70bae537cbcfa25..2495d77864209bce82edc53bc8b55e5c20a887b7 100644 (file)
   # Set ConfidentialComputing defaults\r
   gEfiMdePkgTokenSpaceGuid.PcdConfidentialComputingGuestAttr|0\r
 \r
+!if $(CSM_ENABLE) == FALSE\r
+  gEfiMdePkgTokenSpaceGuid.PcdFSBClock|100000000\r
+!endif\r
+\r
 [PcdsDynamicHii]\r
 !include OvmfPkg/OvmfTpmPcdsHii.dsc.inc\r
 \r
   }\r
 \r
   MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
-  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
   UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf\r
   UefiCpuPkg/CpuDxe/CpuDxe.inf\r
+!ifdef $(CSM_ENABLE)\r
+  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
   OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!else\r
+  OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf\r
+!endif\r
   OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf\r
   OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf\r
   MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf {\r
index a6b2142ccd0c7cd50f75ca8d36160cf0c8ca00e7..3ab1755749d4059def65afc1291ed236e838955d 100644 (file)
@@ -206,10 +206,14 @@ INF  MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
 INF  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf\r
 INF  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf\r
 INF  MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
-INF  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
 INF  UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf\r
 INF  UefiCpuPkg/CpuDxe/CpuDxe.inf\r
-INF  OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!ifdef $(CSM_ENABLE)\r
+  INF OvmfPkg/8259InterruptControllerDxe/8259.inf\r
+  INF OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!else\r
+  INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf\r
+!endif\r
 INF  OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf\r
 INF  OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf\r
 INF  MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf\r
index f16becd028f7dbad92b9b997f05160c6d30a7554..4e3104833871c38a5d51f03b56b4f8b350c74294 100644 (file)
   # Set ConfidentialComputing defaults\r
   gEfiMdePkgTokenSpaceGuid.PcdConfidentialComputingGuestAttr|0\r
 \r
+!if $(CSM_ENABLE) == FALSE\r
+  gEfiMdePkgTokenSpaceGuid.PcdFSBClock|100000000\r
+!endif\r
+\r
 [PcdsDynamicDefault.X64]\r
   # IPv4 and IPv6 PXE Boot support.\r
   gEfiNetworkPkgTokenSpaceGuid.PcdIPv4PXESupport|0x01\r
   }\r
 \r
   MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
-  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
   UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf\r
   UefiCpuPkg/CpuDxe/CpuDxe.inf\r
+!ifdef $(CSM_ENABLE)\r
+  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
   OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!else\r
+  OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf\r
+!endif\r
   OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf\r
   OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf\r
   MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf {\r
index 49266dd46768ea0fde710b96830d8d17b7acbb69..e1638fa6ea3857d1f8707935c7fb9d28c67bc28b 100644 (file)
@@ -210,10 +210,14 @@ INF  MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
 INF  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf\r
 INF  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf\r
 INF  MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
-INF  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
 INF  UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf\r
 INF  UefiCpuPkg/CpuDxe/CpuDxe.inf\r
-INF  OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!ifdef $(CSM_ENABLE)\r
+  INF OvmfPkg/8259InterruptControllerDxe/8259.inf\r
+  INF OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!else\r
+  INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf\r
+!endif\r
 INF  OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf\r
 INF  OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf\r
 INF  MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf\r
index 2647034d08a562f178f67d76ba2954fd298764cd..f72f8c2e48fe9173968de9aaacf7dba5910d79e1 100644 (file)
   # Set ConfidentialComputing defaults\r
   gEfiMdePkgTokenSpaceGuid.PcdConfidentialComputingGuestAttr|0\r
 \r
+!if $(CSM_ENABLE) == FALSE\r
+  gEfiMdePkgTokenSpaceGuid.PcdFSBClock|100000000\r
+!endif\r
+\r
 [PcdsDynamicHii]\r
 !include OvmfPkg/OvmfTpmPcdsHii.dsc.inc\r
 \r
   }\r
 \r
   MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
-  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
   UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf\r
   UefiCpuPkg/CpuDxe/CpuDxe.inf\r
+!ifdef $(CSM_ENABLE)\r
+  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
   OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!else\r
+  OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf\r
+!endif\r
   OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf\r
   OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf\r
   MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf {\r
index d7c18bbc6ec1e39294da34a848be5644290b5a6b..71df28705ea859bc2b16b184891b972a3fa8e06d 100644 (file)
@@ -233,10 +233,14 @@ INF  MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
 INF  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf\r
 INF  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf\r
 INF  MdeModulePkg/Universal/EbcDxe/EbcDxe.inf\r
-INF  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
 INF  UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf\r
 INF  UefiCpuPkg/CpuDxe/CpuDxe.inf\r
-INF  OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!ifdef $(CSM_ENABLE)\r
+  INF  OvmfPkg/8259InterruptControllerDxe/8259.inf\r
+  INF  OvmfPkg/8254TimerDxe/8254Timer.inf\r
+!else\r
+  INF  OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf\r
+!endif\r
 INF  OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf\r
 INF  OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf\r
 INF  MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf\r