From deee7a100b2539d8a302c6d37344b507f8312faa Mon Sep 17 00:00:00 2001 From: Min M Xu Date: Sat, 7 May 2022 09:36:23 +0800 Subject: [PATCH] OvmfPkg: Enable 2 different CpuMpPei and CpuDxe drivers BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3918 In OvmfPkgX64 we enable 2 different CpuMpPei and CpuDxe drivers. The difference between the drivers is the MpInitLib or MpInitLibUp. This is acomplished by adding a MpInitLibDepLib. In IntelTdxX64 we enable 2 versions of CpuDxe drivers. It is because PEI is skipped in IntelTdxX64. Cc: Eric Dong Cc: Ray Ni Cc: Brijesh Singh Cc: Erdem Aktas Cc: James Bottomley Cc: Jiewen Yao Cc: Tom Lendacky Cc: Gerd Hoffmann Signed-off-by: Min Xu Tested-by: Tom Lendacky Acked-by: Gerd Hoffmann Acked-by: Jiewen Yao Reviewed-by: Ray Ni --- OvmfPkg/IntelTdx/IntelTdxX64.dsc | 30 ++++++++++++++++- OvmfPkg/IntelTdx/IntelTdxX64.fdf | 3 ++ OvmfPkg/OvmfPkgX64.dsc | 55 ++++++++++++++++++++++++++++++-- OvmfPkg/OvmfPkgX64.fdf | 4 +++ 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/OvmfPkg/IntelTdx/IntelTdxX64.dsc b/OvmfPkg/IntelTdx/IntelTdxX64.dsc index 73a6c30096..80c331ea23 100644 --- a/OvmfPkg/IntelTdx/IntelTdxX64.dsc +++ b/OvmfPkg/IntelTdx/IntelTdxX64.dsc @@ -57,6 +57,11 @@ !endif !endif + # + # Define the FILE_GUID of CpuDxe for unique-processor version. + # + DEFINE UP_CPU_DXE_GUID = 6490f1c5-ebcc-4665-8892-0075b9bb49b7 + [BuildOptions] GCC:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG INTEL:RELEASE_*_*_CC_FLAGS = /D MDEPKG_NDEBUG @@ -550,7 +555,30 @@ MdeModulePkg/Universal/EbcDxe/EbcDxe.inf UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf - UefiCpuPkg/CpuDxe/CpuDxe.inf + + UefiCpuPkg/CpuDxe/CpuDxe.inf { + + # + # Directly use DxeMpInitLib. It depends on DxeMpInitLibMpDepLib which + # checks the Protocol of gEfiMpInitLibMpDepProtocolGuid. + # + MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf + NULL|OvmfPkg/Library/MpInitLibDepLib/DxeMpInitLibMpDepLib.inf + } + + UefiCpuPkg/CpuDxe/CpuDxe.inf { + + FILE_GUID = $(UP_CPU_DXE_GUID) + + + # + # Directly use MpInitLibUp. It depends on DxeMpInitLibUpDepLib which + # checks the Protocol of gEfiMpInitLibUpDepProtocolGuid. + # + MpInitLib|UefiCpuPkg/Library/MpInitLibUp/MpInitLibUp.inf + NULL|OvmfPkg/Library/MpInitLibDepLib/DxeMpInitLibUpDepLib.inf + } + OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/IntelTdx/IntelTdxX64.fdf b/OvmfPkg/IntelTdx/IntelTdxX64.fdf index 9e290ea78f..1029916c34 100644 --- a/OvmfPkg/IntelTdx/IntelTdxX64.fdf +++ b/OvmfPkg/IntelTdx/IntelTdxX64.fdf @@ -185,7 +185,10 @@ INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf + INF UefiCpuPkg/CpuDxe/CpuDxe.inf +INF FILE_GUID = $(UP_CPU_DXE_GUID) UefiCpuPkg/CpuDxe/CpuDxe.inf + INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf INF OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.inf INF OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 45ffa2dbe3..71526bba31 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -72,6 +72,12 @@ !endif !endif + # + # Define the FILE_GUID of CpuMpPei/CpuDxe for unique-processor version. + # + DEFINE UP_CPU_PEI_GUID = 280251c4-1d09-4035-9062-839acb5f18c1 + DEFINE UP_CPU_DXE_GUID = 6490f1c5-ebcc-4665-8892-0075b9bb49b7 + [BuildOptions] GCC:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG INTEL:RELEASE_*_*_CC_FLAGS = /D MDEPKG_NDEBUG @@ -728,7 +734,29 @@ MdeModulePkg/Universal/Variable/Pei/VariablePei.inf OvmfPkg/SmmAccess/SmmAccessPei.inf !endif - UefiCpuPkg/CpuMpPei/CpuMpPei.inf + + UefiCpuPkg/CpuMpPei/CpuMpPei.inf { + + # + # Directly use PeiMpInitLib. It depends on PeiMpInitLibMpDepLib which + # checks the PPI of gEfiPeiMpInitLibMpDepPpiGuid. + # + MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf + NULL|OvmfPkg/Library/MpInitLibDepLib/PeiMpInitLibMpDepLib.inf + } + + UefiCpuPkg/CpuMpPei/CpuMpPei.inf { + + FILE_GUID = $(UP_CPU_PEI_GUID) + + + # + # Directly use MpInitLibUp. It depends on PeiMpInitLibUpDepLib which + # checks the PPI of gEfiPeiMpInitLibUpDepPpiGuid. + # + MpInitLib|UefiCpuPkg/Library/MpInitLibUp/MpInitLibUp.inf + NULL|OvmfPkg/Library/MpInitLibDepLib/PeiMpInitLibUpDepLib.inf + } !include OvmfPkg/OvmfTpmComponentsPei.dsc.inc @@ -760,7 +788,30 @@ MdeModulePkg/Universal/EbcDxe/EbcDxe.inf UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf - UefiCpuPkg/CpuDxe/CpuDxe.inf + + UefiCpuPkg/CpuDxe/CpuDxe.inf { + + # + # Directly use DxeMpInitLib. It depends on DxeMpInitLibMpDepLib which + # checks the Protocol of gEfiMpInitLibMpDepProtocolGuid. + # + MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf + NULL|OvmfPkg/Library/MpInitLibDepLib/DxeMpInitLibMpDepLib.inf + } + + UefiCpuPkg/CpuDxe/CpuDxe.inf { + + FILE_GUID = $(UP_CPU_DXE_GUID) + + + # + # Directly use MpInitLibUp. It depends on DxeMpInitLibUpDepLib which + # checks the Protocol of gEfiMpInitLibUpDepProtocolGuid. + # + MpInitLib|UefiCpuPkg/Library/MpInitLibUp/MpInitLibUp.inf + NULL|OvmfPkg/Library/MpInitLibDepLib/DxeMpInitLibUpDepLib.inf + } + !ifdef $(CSM_ENABLE) OvmfPkg/8259InterruptControllerDxe/8259.inf OvmfPkg/8254TimerDxe/8254Timer.inf diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index 6e72cdf345..aa9a83032d 100644 --- a/OvmfPkg/OvmfPkgX64.fdf +++ b/OvmfPkg/OvmfPkgX64.fdf @@ -185,6 +185,7 @@ INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf INF OvmfPkg/SmmAccess/SmmAccessPei.inf !endif INF UefiCpuPkg/CpuMpPei/CpuMpPei.inf +INF FILE_GUID = $(UP_CPU_PEI_GUID) UefiCpuPkg/CpuMpPei/CpuMpPei.inf !include OvmfPkg/OvmfTpmPei.fdf.inc @@ -239,7 +240,10 @@ INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf + INF UefiCpuPkg/CpuDxe/CpuDxe.inf +INF FILE_GUID = $(UP_CPU_DXE_GUID) UefiCpuPkg/CpuDxe/CpuDxe.inf + !ifdef $(CSM_ENABLE) INF OvmfPkg/8259InterruptControllerDxe/8259.inf INF OvmfPkg/8254TimerDxe/8254Timer.inf -- 2.39.2