BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3711
OvmfPkg.dec is removed from [Packages] because it doesn't depend on OvmfPkg. LocalApicTimerDxe is moved to UefiCpuPkg. Cc: Jiewen Yao <jiewen....@intel.com> Cc: Gerd Hoffmann <kra...@redhat.com> Cc: Anthony Perard <anthony.per...@citrix.com> Cc: Julien Grall <jul...@xen.org> Cc: Eric Dong <eric.d...@intel.com> Cc: Ray Ni <ray...@intel.com> Acked-by: Anthony Perard <anthony.per...@citrix.com> Signed-off-by: Min Xu <min.m...@intel.com> --- OvmfPkg/AmdSev/AmdSevX64.dsc | 2 +- OvmfPkg/AmdSev/AmdSevX64.fdf | 2 +- OvmfPkg/Microvm/MicrovmX64.dsc | 2 +- OvmfPkg/Microvm/MicrovmX64.fdf | 2 +- OvmfPkg/OvmfPkgIa32.dsc | 2 +- OvmfPkg/OvmfPkgIa32.fdf | 2 +- OvmfPkg/OvmfPkgIa32X64.dsc | 2 +- OvmfPkg/OvmfPkgIa32X64.fdf | 2 +- OvmfPkg/OvmfPkgX64.dsc | 2 +- OvmfPkg/OvmfPkgX64.fdf | 2 +- OvmfPkg/OvmfXen.dsc | 2 +- OvmfPkg/OvmfXen.fdf | 2 +- .../LocalApicTimerDxe/LocalApicTimerDxe.c | 33 +++++++++---------- .../LocalApicTimerDxe/LocalApicTimerDxe.h | 18 +++++----- .../LocalApicTimerDxe/LocalApicTimerDxe.inf | 17 ++++++++-- UefiCpuPkg/UefiCpuPkg.dsc | 1 + 16 files changed, 52 insertions(+), 41 deletions(-) rename {OvmfPkg => UefiCpuPkg}/LocalApicTimerDxe/LocalApicTimerDxe.c (91%) rename {OvmfPkg => UefiCpuPkg}/LocalApicTimerDxe/LocalApicTimerDxe.h (92%) rename {OvmfPkg => UefiCpuPkg}/LocalApicTimerDxe/LocalApicTimerDxe.inf (62%) diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc index 6c53c805e824..b2636febee3d 100644 --- a/OvmfPkg/AmdSev/AmdSevX64.dsc +++ b/OvmfPkg/AmdSev/AmdSevX64.dsc @@ -679,7 +679,7 @@ MdeModulePkg/Universal/EbcDxe/EbcDxe.inf UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf UefiCpuPkg/CpuDxe/CpuDxe.inf - OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf { diff --git a/OvmfPkg/AmdSev/AmdSevX64.fdf b/OvmfPkg/AmdSev/AmdSevX64.fdf index 77e391f2106a..b3691e79e552 100644 --- a/OvmfPkg/AmdSev/AmdSevX64.fdf +++ b/OvmfPkg/AmdSev/AmdSevX64.fdf @@ -208,7 +208,7 @@ INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf INF UefiCpuPkg/CpuDxe/CpuDxe.inf -INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf +INF UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf INF OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf INF OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf INF MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc index 8fdb583877dd..7e5c131d39b3 100644 --- a/OvmfPkg/Microvm/MicrovmX64.dsc +++ b/OvmfPkg/Microvm/MicrovmX64.dsc @@ -658,7 +658,7 @@ MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf MdeModulePkg/Universal/EbcDxe/EbcDxe.inf - OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf UefiCpuPkg/CpuDxe/CpuDxe.inf OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf diff --git a/OvmfPkg/Microvm/MicrovmX64.fdf b/OvmfPkg/Microvm/MicrovmX64.fdf index 3b8370a15dff..62827b23e485 100644 --- a/OvmfPkg/Microvm/MicrovmX64.fdf +++ b/OvmfPkg/Microvm/MicrovmX64.fdf @@ -215,7 +215,7 @@ INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf -INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf +INF UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf INF UefiCpuPkg/CpuDxe/CpuDxe.inf INF OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index ff5b9d707341..a1192c24f6e0 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -770,7 +770,7 @@ OvmfPkg/8259InterruptControllerDxe/8259.inf OvmfPkg/8254TimerDxe/8254Timer.inf !else - OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf !endif OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index 9e2e90763714..c90580bc1341 100644 --- a/OvmfPkg/OvmfPkgIa32.fdf +++ b/OvmfPkg/OvmfPkgIa32.fdf @@ -218,7 +218,7 @@ INF UefiCpuPkg/CpuDxe/CpuDxe.inf INF OvmfPkg/8259InterruptControllerDxe/8259.inf INF OvmfPkg/8254TimerDxe/8254Timer.inf !else - INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + INF UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf !endif INF OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf INF OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index db44a5217f69..ee390c064547 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -786,7 +786,7 @@ OvmfPkg/8259InterruptControllerDxe/8259.inf OvmfPkg/8254TimerDxe/8254Timer.inf !else - OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf !endif OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf index 035c439e5237..7c88850bd7f2 100644 --- a/OvmfPkg/OvmfPkgIa32X64.fdf +++ b/OvmfPkg/OvmfPkgIa32X64.fdf @@ -222,7 +222,7 @@ INF UefiCpuPkg/CpuDxe/CpuDxe.inf INF OvmfPkg/8259InterruptControllerDxe/8259.inf INF OvmfPkg/8254TimerDxe/8254Timer.inf !else - INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + INF UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf !endif INF OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf INF OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index d1c1dc257797..771fa9da13e9 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -788,7 +788,7 @@ OvmfPkg/8259InterruptControllerDxe/8259.inf OvmfPkg/8254TimerDxe/8254Timer.inf !else - OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf !endif OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index c00b61f75c4c..72da93586c8f 100644 --- a/OvmfPkg/OvmfPkgX64.fdf +++ b/OvmfPkg/OvmfPkgX64.fdf @@ -245,7 +245,7 @@ INF UefiCpuPkg/CpuDxe/CpuDxe.inf INF OvmfPkg/8259InterruptControllerDxe/8259.inf INF OvmfPkg/8254TimerDxe/8254Timer.inf !else - INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + INF UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf !endif INF OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf INF OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc index 91e011f78404..f82c3adfe69c 100644 --- a/OvmfPkg/OvmfXen.dsc +++ b/OvmfPkg/OvmfXen.dsc @@ -554,7 +554,7 @@ MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf MdeModulePkg/Universal/EbcDxe/EbcDxe.inf - OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf + UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf UefiCpuPkg/CpuDxe/CpuDxe.inf OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/OvmfXen.fdf b/OvmfPkg/OvmfXen.fdf index 8e9c6721f183..ac615f66b84e 100644 --- a/OvmfPkg/OvmfXen.fdf +++ b/OvmfPkg/OvmfXen.fdf @@ -298,7 +298,7 @@ INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf -INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf +INF UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf INF UefiCpuPkg/CpuDxe/CpuDxe.inf INF OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.c b/UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.c similarity index 91% rename from OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.c rename to UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.c index 98610ebd3b06..5dce7a3223aa 100644 --- a/OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.c +++ b/UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.c @@ -54,8 +54,8 @@ volatile UINT64 mTimerPeriod = 0; VOID EFIAPI TimerInterruptHandler ( - IN EFI_EXCEPTION_TYPE InterruptType, - IN EFI_SYSTEM_CONTEXT SystemContext + IN EFI_EXCEPTION_TYPE InterruptType, + IN EFI_SYSTEM_CONTEXT SystemContext ) { EFI_TPL OriginalTPL; @@ -63,9 +63,6 @@ TimerInterruptHandler ( OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL); if (mTimerNotifyFunction != NULL) { - // - // @bug : This does not handle missed timer interrupts - // mTimerNotifyFunction (mTimerPeriod); } @@ -109,8 +106,8 @@ TimerInterruptHandler ( EFI_STATUS EFIAPI TimerDriverRegisterHandler ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - IN EFI_TIMER_NOTIFY NotifyFunction + IN EFI_TIMER_ARCH_PROTOCOL *This, + IN EFI_TIMER_NOTIFY NotifyFunction ) { // @@ -160,8 +157,8 @@ TimerDriverRegisterHandler ( EFI_STATUS EFIAPI TimerDriverSetTimerPeriod ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - IN UINT64 TimerPeriod + IN EFI_TIMER_ARCH_PROTOCOL *This, + IN UINT64 TimerPeriod ) { UINT64 TimerCount; @@ -169,6 +166,11 @@ TimerDriverSetTimerPeriod ( UINT32 DivideValue = 1; if (TimerPeriod == 0) { + // + // Stop the timer + // + InitializeApicTimer (0, 0, FALSE, LOCAL_APIC_TIMER_VECTOR); + // // Disable timer interrupt for a TimerPeriod of 0 // @@ -231,8 +233,8 @@ TimerDriverSetTimerPeriod ( EFI_STATUS EFIAPI TimerDriverGetTimerPeriod ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - OUT UINT64 *TimerPeriod + IN EFI_TIMER_ARCH_PROTOCOL *This, + OUT UINT64 *TimerPeriod ) { if (TimerPeriod == NULL) { @@ -264,7 +266,7 @@ TimerDriverGetTimerPeriod ( EFI_STATUS EFIAPI TimerDriverGenerateSoftInterrupt ( - IN EFI_TIMER_ARCH_PROTOCOL *This + IN EFI_TIMER_ARCH_PROTOCOL *This ) { EFI_TPL OriginalTPL; @@ -276,9 +278,6 @@ TimerDriverGenerateSoftInterrupt ( OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL); if (mTimerNotifyFunction != NULL) { - // - // @bug : This does not handle missed timer interrupts - // mTimerNotifyFunction (mTimerPeriod); } @@ -304,8 +303,8 @@ TimerDriverGenerateSoftInterrupt ( EFI_STATUS EFIAPI TimerDriverInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; diff --git a/OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.h b/UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.h similarity index 92% rename from OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.h rename to UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.h index a68b7b4c4bc4..93706995f8ab 100644 --- a/OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.h +++ b/UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.h @@ -50,8 +50,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent EFI_STATUS EFIAPI TimerDriverInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) ; @@ -86,8 +86,8 @@ TimerDriverInitialize ( EFI_STATUS EFIAPI TimerDriverRegisterHandler ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - IN EFI_TIMER_NOTIFY NotifyFunction + IN EFI_TIMER_ARCH_PROTOCOL *This, + IN EFI_TIMER_NOTIFY NotifyFunction ) ; @@ -122,8 +122,8 @@ TimerDriverRegisterHandler ( EFI_STATUS EFIAPI TimerDriverSetTimerPeriod ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - IN UINT64 TimerPeriod + IN EFI_TIMER_ARCH_PROTOCOL *This, + IN UINT64 TimerPeriod ) ; @@ -146,8 +146,8 @@ TimerDriverSetTimerPeriod ( EFI_STATUS EFIAPI TimerDriverGetTimerPeriod ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - OUT UINT64 *TimerPeriod + IN EFI_TIMER_ARCH_PROTOCOL *This, + OUT UINT64 *TimerPeriod ) ; @@ -171,7 +171,7 @@ TimerDriverGetTimerPeriod ( EFI_STATUS EFIAPI TimerDriverGenerateSoftInterrupt ( - IN EFI_TIMER_ARCH_PROTOCOL *This + IN EFI_TIMER_ARCH_PROTOCOL *This ) ; diff --git a/OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf b/UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf similarity index 62% rename from OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf rename to UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf index 3ad28a148c5b..9980085fc776 100644 --- a/OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf +++ b/UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf @@ -1,6 +1,13 @@ ## @file # Local APIC timer driver that provides Timer Arch protocol. -# PcdFSBClock is defined in MdePkg and it should be set by the consumer. +# +# This driver is to support fixed frequency. If a real platform happens +# to have fixed frequency, then it can be used. In this case the consumer +# should set PcdFSBClock which is defined in MdePkg. +# +# Another restriction is that LocalApicTimerDxe cannot coexist with +# SourceLevelDebug (which rely on Local Apic Timer). Anyone who choose +# this driver as the DXE timer dirver should be aware of it. # # Copyright (c) 2005 - 2019, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2019, Citrix Systems, Inc. @@ -15,13 +22,17 @@ FILE_GUID = 52fe8196-f9de-4d07-b22f-51f77a0e7c41 MODULE_TYPE = DXE_DRIVER VERSION_STRING = 1.0 - ENTRY_POINT = TimerDriverInitialize +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 +# + [Packages] MdePkg/MdePkg.dec UefiCpuPkg/UefiCpuPkg.dec - OvmfPkg/OvmfPkg.dec [LibraryClasses] UefiBootServicesTableLib diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc index 870b45284087..00cf1286a3ca 100644 --- a/UefiCpuPkg/UefiCpuPkg.dsc +++ b/UefiCpuPkg/UefiCpuPkg.dsc @@ -172,6 +172,7 @@ } UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.inf + UefiCpuPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf [BuildOptions] *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES -- 2.29.2.windows.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#84738): https://edk2.groups.io/g/devel/message/84738 Mute This Topic: https://groups.io/mt/87696613/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-