From cb26461c5a1e7bfb96bda79188a12ec0d4603464 Mon Sep 17 00:00:00 2001 From: Dun Tan Date: Fri, 21 Jun 2024 11:23:16 +0800 Subject: [PATCH 1/8] Platform/Intel: Create MmPlatformHobProducerLib instance Create MmPlatformHobProducerLib instance for QSP boot. In this libarary, CreateMmPlatformHob() function is called by StandaloneMm IPL to create all Platform specific HOBs that required by Standalone MM environment. On return, a list of ResourceDescriptorHob are generated to report MMIO ranges. All memory ranges except SMRAM and EFI_RESOURCE_SYSTEM_MEMORY type memory ranges are treated as MMIO. Signed-off-by: Dun Tan Cc: Ray Ni Cc: Jiaxin Wu Cc: Nate DeSimone Cc: Star Zeng Cc: Wei6 Xu Cc: Yuanhao Xie --- .../MmPlatformHobProducerLib.c | 340 ++++++++++++++++++ .../MmPlatformHobProducerLib.inf | 40 +++ 2 files changed, 380 insertions(+) create mode 100644 Platform/Intel/SimicsOpenBoardPkg/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.c create mode 100644 Platform/Intel/SimicsOpenBoardPkg/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.inf diff --git a/Platform/Intel/SimicsOpenBoardPkg/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.c b/Platform/Intel/SimicsOpenBoardPkg/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.c new file mode 100644 index 00000000000..cff8dd075d7 --- /dev/null +++ b/Platform/Intel/SimicsOpenBoardPkg/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.c @@ -0,0 +1,340 @@ +/** @file + Instance of MM Platform HOB Producer Library Class. + + CreateMmPlatformHob() function is called by StandaloneMm IPL to create all + Platform specific HOBs that required by Standalone MM environment. In this + library instance, a list of ResourceDescriptorHob are generated to report + MMIO ranges. All memory ranges except SMRAM and EFI_RESOURCE_SYSTEM_MEMORY + type memory ranges are treated as MMIO. + + Copyright (c) 2024, Intel Corporation. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +typedef struct { + EFI_PHYSICAL_ADDRESS Base; + UINT64 Length; +} MM_PLATFORM_MEMORY_REGION; + +/** + Initialize the EFI_HOB_GENERIC_HEADER based on input Hob. + + @param[in] Hob Pointer to the new HOB buffer. + @param[in] HobType Type of the new HOB. + @param[in] HobLength Length of the new HOB to allocate. + +**/ +VOID +MmCreateHob ( + IN VOID *Hob, + IN UINT16 HobType, + IN UINT16 HobLength + ) +{ + // + // Check Length to avoid data overflow. + // + ASSERT (HobLength < MAX_UINT16 - 0x7); + + ((EFI_HOB_GENERIC_HEADER *)Hob)->HobType = HobType; + ((EFI_HOB_GENERIC_HEADER *)Hob)->HobLength = HobLength; + ((EFI_HOB_GENERIC_HEADER *)Hob)->Reserved = 0; +} + +/** + Builds a EFI_HOB_TYPE_RESOURCE_DESCRIPTOR HOB. + + @param[in] Hob Pointer to the new HOB buffer. + @param[in] ResourceType The type of resource described by this HOB. + @param[in] ResourceAttribute The resource attributes of the memory described by this HOB. + @param[in] PhysicalStart The 64 bit physical address of memory described by this HOB. + @param[in] NumberOfBytes The length of the memory described by this HOB in bytes. + +**/ +VOID +MmBuildResourceDescriptorHob ( + IN EFI_HOB_RESOURCE_DESCRIPTOR *Hob, + IN EFI_RESOURCE_TYPE ResourceType, + IN EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute, + IN EFI_PHYSICAL_ADDRESS PhysicalStart, + IN UINT64 NumberOfBytes + ) +{ + ASSERT (Hob != NULL); + MmCreateHob (Hob, EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, sizeof (EFI_HOB_RESOURCE_DESCRIPTOR)); + + Hob->ResourceType = ResourceType; + Hob->ResourceAttribute = ResourceAttribute; + Hob->PhysicalStart = PhysicalStart; + Hob->ResourceLength = NumberOfBytes; +} + +/** + Calculate the maximum support address. + + @return the maximum support address. +**/ +static +UINT8 +MmCalculateMaximumSupportAddress ( + VOID + ) +{ + UINT32 RegEax; + UINT8 PhysicalAddressBits; + VOID *Hob; + + // + // Get physical address bits supported. + // + Hob = GetFirstHob (EFI_HOB_TYPE_CPU); + if (Hob != NULL) { + PhysicalAddressBits = ((EFI_HOB_CPU *)Hob)->SizeOfMemorySpace; + } else { + AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL); + if (RegEax >= 0x80000008) { + AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL); + PhysicalAddressBits = (UINT8)RegEax; + } else { + PhysicalAddressBits = 36; + } + } + + return PhysicalAddressBits; +} + +/** + Builds resource HOB list for all MMIO range. + + This function treats all all ranges outside the system memory range and smram range + as mmio and builds resource HOB list for all MMIO range. + + @param[in] Create FALSE to indicate Buffer is not used and the return buffer size + is increased by the required buffer size. + @param[in] MemoryRegion MM_PLATFORM_MEMORY_REGION that describes all system memory range. + @param[in] Count Number of MM_PLATFORM_MEMORY_REGION. + @param[in] Buffer The pointer of new HOB buffer. + + @return The expected/used buffer size. +**/ +UINTN +MmBuildHobForMmio ( + IN BOOLEAN Create, + IN MM_PLATFORM_MEMORY_REGION *MemoryRegion, + IN UINTN Count, + IN UINT8 *Buffer + ) +{ + UINT64 PreviousAddress; + UINT64 Base; + UINT64 Limit; + UINT8 PhysicalAddressBits; + UINTN Index; + UINTN BufferSize; + + Index = 0; + PreviousAddress = 0; + PhysicalAddressBits = MmCalculateMaximumSupportAddress (); + Limit = LShiftU64 (1, PhysicalAddressBits); + BufferSize = 0; + + for (Index = 0; Index <= Count; Index++) { + // + // When Index is equal to Count, Base covers the very last region. + // + Base = (Index == Count) ? Limit : MemoryRegion[Index].Base; + if (Base > PreviousAddress) { + if (Create) { + MmBuildResourceDescriptorHob ( + (EFI_HOB_RESOURCE_DESCRIPTOR *)(Buffer + BufferSize), + EFI_RESOURCE_MEMORY_MAPPED_IO, + 0, + PreviousAddress, + Base - PreviousAddress + ); + } + + BufferSize += sizeof (EFI_HOB_RESOURCE_DESCRIPTOR); + } + + if (Index < Count) { + PreviousAddress = MemoryRegion[Index].Base + MemoryRegion[Index].Length; + } + } + + return BufferSize; +} + +/** + Function to compare 2 MM_PLATFORM_MEMORY_REGION pointer based on Base. + + @param[in] Buffer1 pointer to MP_INFORMATION2_HOB_DATA poiner to compare + @param[in] Buffer2 pointer to second MP_INFORMATION2_HOB_DATA pointer to compare + + @retval 0 Buffer1 equal to Buffer2 + @retval <0 Buffer1 is less than Buffer2 + @retval >0 Buffer1 is greater than Buffer2 +**/ +static +INTN +EFIAPI +MmMemoryDescriptorCompare ( + IN CONST VOID *Buffer1, + IN CONST VOID *Buffer2 + ) +{ + if (((MM_PLATFORM_MEMORY_REGION *)Buffer1)->Base > ((MM_PLATFORM_MEMORY_REGION *)Buffer2)->Base) { + return 1; + } else if (((MM_PLATFORM_MEMORY_REGION *)Buffer1)->Base < ((MM_PLATFORM_MEMORY_REGION *)Buffer2)->Base) { + return -1; + } + + return 0; +} + +/** + Create the platform specific HOBs needed by the Standalone MM environment. + + The following HOBs are created by StandaloneMm IPL common logic. + Hence they should NOT be created by this function: + * Single EFI_HOB_TYPE_FV to describe the Firmware Volume where MM Core resides. + * Single GUIDed (gEfiSmmSmramMemoryGuid) HOB to describe the MM regions. + * Single EFI_HOB_MEMORY_ALLOCATION_MODULE to describe the MM region used by MM Core. + * Multiple EFI_HOB_RESOURCE_DESCRIPTOR to describe the non-MM regions and their access permissions. + Note: All accessible non-MM regions should be described by EFI_HOB_RESOURCE_DESCRIPTOR HOBs. + * Single GUIDed (gMmCommBufferHobGuid) HOB to identify MM Communication buffer in non-MM region. + * Multiple GUIDed (gSmmBaseHobGuid) HOB to describe the SMM base address of each processor. + * Multiple GUIDed (gMpInformation2HobGuid) HOB to describe the MP information. + * Single GUIDed (gMmCpuSyncConfigHobGuid) HOB to describe how BSP synchronizes with APs in x86 SMM. + * Single GUIDed (gMmAcpiS3EnableHobGuid) HOB to describe the ACPI S3 enable status. + * Single GUIDed (gEfiAcpiVariableGuid) HOB to identify the S3 data root region in x86. + * Single GUIDed (gMmProfileDataHobGuid) HOB to describe the MM profile data region. + + @param[in] Buffer The free buffer to be used for HOB creation. + @param[in, out] BufferSize The buffer size. + On return, the expected/used size. + + @retval RETURN_INVALID_PARAMETER BufferSize is NULL. + @retval RETURN_INVALID_PARAMETER Buffer is NULL and BufferSize is not 0. + @retval RETURN_BUFFER_TOO_SMALL The buffer is too small for HOB creation. + BufferSize is updated to indicate the expected buffer size. + When the input BufferSize is bigger than the expected buffer size, + the BufferSize value will be changed to the used buffer size. + @retval RETURN_SUCCESS The HOB list is created successfully. + +**/ +EFI_STATUS +EFIAPI +CreateMmPlatformHob ( + IN VOID *Buffer, + IN OUT UINTN *BufferSize + ) +{ + EFI_PEI_HOB_POINTERS Hob; + EFI_PEI_HOB_POINTERS FirstResHob; + UINTN Count; + UINTN Index; + MM_PLATFORM_MEMORY_REGION *MemoryRegion; + MM_PLATFORM_MEMORY_REGION SortBuffer; + UINTN RequiredSize; + EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *SmramHob; + + if (BufferSize == NULL) { + return RETURN_INVALID_PARAMETER; + } + + if ((*BufferSize != 0) && (Buffer == NULL)) { + return RETURN_INVALID_PARAMETER; + } + + Count = 0; + RequiredSize = 0; + + // + // Count the Resource HOB number + // + Hob.Raw = GetFirstHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR); + FirstResHob = Hob; + while (Hob.Raw != NULL) { + if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) { + Count++; + } + + Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, GET_NEXT_HOB (Hob)); + } + + // + // Count the gEfiSmmSmramMemoryGuid Descriptor number + // + Hob.Raw = GetFirstGuidHob (&gEfiSmmSmramMemoryGuid); + ASSERT (Hob.Raw != NULL); + SmramHob = GET_GUID_HOB_DATA (Hob.Raw); + Count += SmramHob->NumberOfSmmReservedRegions; + + MemoryRegion = AllocatePool (Count * sizeof (MM_PLATFORM_MEMORY_REGION)); + ASSERT (MemoryRegion != NULL); + + // + // Cache gEfiSmmSmramMemoryGuid Descriptor + // + Index = 0; + while (Index < SmramHob->NumberOfSmmReservedRegions) { + MemoryRegion[Index].Base = SmramHob->Descriptor[Index].PhysicalStart; + MemoryRegion[Index].Length = SmramHob->Descriptor[Index].PhysicalSize; + Index++; + } + + // + // Cache resource HOB + // + Hob = FirstResHob; + while (Hob.Raw != NULL) { + if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) { + MemoryRegion[Index].Base = Hob.ResourceDescriptor->PhysicalStart; + MemoryRegion[Index].Length = Hob.ResourceDescriptor->ResourceLength; + Index++; + } + + Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, GET_NEXT_HOB (Hob)); + } + + ASSERT (Index == Count); + + // + // Perform QuickSort for all MM_PLATFORM_MEMORY_REGION range for calculating the MMIO + // + QuickSort (MemoryRegion, Count, sizeof (MM_PLATFORM_MEMORY_REGION), (BASE_SORT_COMPARE)MmMemoryDescriptorCompare, &SortBuffer); + + // + // Calculate needed buffer size. + // + RequiredSize = MmBuildHobForMmio (FALSE, MemoryRegion, Count, NULL); + + if (*BufferSize < RequiredSize) { + *BufferSize = RequiredSize; + FreePool (MemoryRegion); + return EFI_BUFFER_TOO_SMALL; + } + + // + // Build resource HOB for MMIO range. + // + *BufferSize = MmBuildHobForMmio (TRUE, MemoryRegion, Count, Buffer); + FreePool (MemoryRegion); + + return EFI_SUCCESS; +} diff --git a/Platform/Intel/SimicsOpenBoardPkg/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.inf b/Platform/Intel/SimicsOpenBoardPkg/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.inf new file mode 100644 index 00000000000..6b1d9105581 --- /dev/null +++ b/Platform/Intel/SimicsOpenBoardPkg/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.inf @@ -0,0 +1,40 @@ +## @file +# Instance of MM Platform HOB Producer Library Class. +# +# Copyright (c) 2024, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION = 0x00010017 + BASE_NAME = MmPlatformHobProducerLib + FILE_GUID = 98700A68-CB99-4B2A-97DC-F0A0C8755EE7 + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + LIBRARY_CLASS = MmPlatformHobProducerLib + +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + MmPlatformHobProducerLib.c + +[Packages] + MdePkg/MdePkg.dec + UefiCpuPkg/UefiCpuPkg.dec + StandaloneMmPkg/StandaloneMmPkg.dec + SimicsOpenBoardPkg/OpenBoardPkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + DebugLib + MemoryAllocationLib + HobLib + +[Guids] + gEfiSmmSmramMemoryGuid From 218b4a82ac2e76d5a25ee566b9fed8a88ac89443 Mon Sep 17 00:00:00 2001 From: Dun Tan Date: Mon, 24 Jun 2024 11:54:45 +0800 Subject: [PATCH 2/8] Platform/Intel: Add MmPlatformHobProducerLib instance in DSC Add MmPlatformHobProducerLib.inf in the BoardX58Ich10/OpenBoardPkg.dsc Signed-off-by: Dun Tan --- .../Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc index 95214a63339..164e5eca2da 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc +++ b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc @@ -150,6 +150,11 @@ TestPointLib|$(PLATFORM_PACKAGE)/Test/Library/TestPointLib/PeiTestPointLib.inf SetCacheMtrrLib|$(PLATFORM_PACKAGE)/Library/SetCacheMtrrLib/SetCacheMtrrLib.inf + ####################################### + # Board Package + ####################################### + MmPlatformHobProducerLib|$(BOARD_PKG)/Library/MmPlatformHobProducerLib/MmPlatformHobProducerLib.inf + [LibraryClasses.common.DXE_DRIVER] ##################################### From 67473da9062f75cc838f67eb97b9ac76bda555ad Mon Sep 17 00:00:00 2001 From: Jiaxin Wu Date: Sat, 22 Jun 2024 14:58:04 +0800 Subject: [PATCH 3/8] Platform/Intel: Force PE/COFF sections 4KB aligned Force PE/COFF sections to be aligned at 4KB boundaries to support MemoryAttribute table. Signed-off-by: Jiaxin Wu --- .../BoardX58Ich10/OpenBoardPkgBuildOption.dsc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgBuildOption.dsc b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgBuildOption.dsc index 25998b83e7f..f729ff29b05 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgBuildOption.dsc +++ b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgBuildOption.dsc @@ -76,3 +76,7 @@ #[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER] # MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096 # GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 + +[BuildOptions.common.EDKII.MM_CORE_STANDALONE, BuildOptions.common.EDKII.MM_STANDALONE] + MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096 /FILEALIGN:4096 + GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000 /FILEALIGN:4096 From 03345eb0fe5643326ff97a809d3e6d8ef08d7956 Mon Sep 17 00:00:00 2001 From: Jiaxin Wu Date: Sat, 22 Jun 2024 14:02:07 +0800 Subject: [PATCH 4/8] Platform/Intel: Update dynamic PCD to fixed PCD for MM_STANDALONE This patch changes below dynamic PCD to fixed PCD for MM_STANDALONE: gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 Signed-off-by: Jiaxin Wu --- .../SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc | 4 ++-- Platform/Intel/SimicsOpenBoardPkg/SimicsPei/Platform.c | 1 - Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc index 6ca06d56ba7..9337044b4f3 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc +++ b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc @@ -200,6 +200,8 @@ gPcAtChipsetPkgTokenSpaceGuid.PcdMinimalValidYear|2015 gPcAtChipsetPkgTokenSpaceGuid.PcdMaximalValidYear|2099 gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmCodeAccessCheckEnable |TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 [PcdsPatchableInModule.common] ###################################### @@ -219,8 +221,6 @@ # Edk2 Configuration ###################################### gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|1024 gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600 diff --git a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/Platform.c b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/Platform.c index 28dff3f702c..ac07b914757 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/Platform.c +++ b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/Platform.c @@ -484,7 +484,6 @@ ReserveEmuVariableNvStore ( VariableStore, (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024 )); - PcdSet64S (PcdEmuVariableNvStoreReserved, VariableStore); } diff --git a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf index c26b400d536..f9405a78405 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf +++ b/Platform/Intel/SimicsOpenBoardPkg/SimicsPei/SimicsPei.inf @@ -85,7 +85,6 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable From c9aeb78460171bb09e0848d272dbd2787cd2402d Mon Sep 17 00:00:00 2001 From: Jiaxin Wu Date: Sat, 22 Jun 2024 11:23:19 +0800 Subject: [PATCH 5/8] Platform/Intel: Add PcdStandaloneMmEnable feature PCD Add PcdStandaloneMmEnable feature PCD, default set to FALSE. Signed-off-by: Jiaxin Wu --- Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec | 1 + .../Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc | 1 + 2 files changed, 2 insertions(+) diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec index 09312d32924..67965d3e245 100644 --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec @@ -425,3 +425,4 @@ gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable |FALSE|BOOLEAN|0xF00000A5 gMinPlatformPkgTokenSpaceGuid.PcdPerformanceEnable |FALSE|BOOLEAN|0xF00000A7 gMinPlatformPkgTokenSpaceGuid.PcdSerialTerminalEnable |FALSE|BOOLEAN|0xF00000B0 + gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable |FALSE|BOOLEAN|0xF00000B1 diff --git a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc index 9337044b4f3..93b206733cf 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc +++ b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc @@ -46,6 +46,7 @@ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE gUefiCpuPkgTokenSpaceGuid.PcdSmmFeatureControlEnable|FALSE gUefiCpuPkgTokenSpaceGuid.PcdSmrrEnable|TRUE + gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable|FALSE ###################################### # Platform Configuration From 58a3a53f40d4c9f642d129ca279e114c59689f2a Mon Sep 17 00:00:00 2001 From: Jiaxin Wu Date: Sat, 22 Jun 2024 14:09:53 +0800 Subject: [PATCH 6/8] Silicon/Intel: Include required StandaloneMm drivers Include required StandaloneMm drivers under PcdStandaloneMmEnable PCD. Signed-off-by: Jiaxin Wu --- Silicon/Intel/SimicsIch10Pkg/IchUefiBootInclude.fdf | 6 +++++- Silicon/Intel/SimicsX58SktPkg/SktUefiBootInclude.fdf | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Silicon/Intel/SimicsIch10Pkg/IchUefiBootInclude.fdf b/Silicon/Intel/SimicsIch10Pkg/IchUefiBootInclude.fdf index 8211a8a6274..ed345ec5ccc 100644 --- a/Silicon/Intel/SimicsIch10Pkg/IchUefiBootInclude.fdf +++ b/Silicon/Intel/SimicsIch10Pkg/IchUefiBootInclude.fdf @@ -9,5 +9,9 @@ !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE INF $(PCH_PKG)/SmmControl/RuntimeDxe/SmmControl2Dxe.inf - INF $(PCH_PKG)/Spi/Smm/PchSpiSmm.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + INF $(PCH_PKG)/Spi/Smm/PchSpiStandaloneMm.inf + !else + INF $(PCH_PKG)/Spi/Smm/PchSpiSmm.inf + !endif !endif diff --git a/Silicon/Intel/SimicsX58SktPkg/SktUefiBootInclude.fdf b/Silicon/Intel/SimicsX58SktPkg/SktUefiBootInclude.fdf index 42c8408c05c..28d970912e4 100644 --- a/Silicon/Intel/SimicsX58SktPkg/SktUefiBootInclude.fdf +++ b/Silicon/Intel/SimicsX58SktPkg/SktUefiBootInclude.fdf @@ -9,6 +9,10 @@ !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE INF IntelSiliconPkg/Feature/SmmAccess/SmmAccessDxe/SmmAccess.inf - INF UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + INF UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuStandaloneMm.inf + !else + INF UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf + !endif !endif INF MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf From 41fa5803a4f253e841655fa2c343186a60132e74 Mon Sep 17 00:00:00 2001 From: Jiaxin Wu Date: Sat, 22 Jun 2024 14:11:19 +0800 Subject: [PATCH 7/8] Platform/Intel: Include required StandaloneMm modules Include required StandaloneMm Drivers and Libs under PcdStandaloneMmEnable PCD. Change the PcdStandaloneMmEnable to TRUE to enable the MM on QSP. Signed-off-by: Jiaxin Wu --- .../Include/Dsc/CoreCommonLib.dsc | 2 +- .../Include/Dsc/CoreDxeInclude.dsc | 64 +++++++++++++------ .../MinPlatformPkg/Include/Dsc/CoreDxeLib.dsc | 31 ++++++++- .../MinPlatformPkg/Include/Dsc/CorePeiLib.dsc | 7 +- .../Include/Fdf/CoreOsBootInclude.fdf | 48 +++++++++----- .../Include/Fdf/CoreSecurityLateInclude.fdf | 14 ++-- .../Intel/MinPlatformPkg/MinPlatformPkg.dsc | 1 + .../BoardX58Ich10/OpenBoardPkg.dsc | 43 +++++++++---- .../BoardX58Ich10/OpenBoardPkg.fdf | 12 +++- .../BoardX58Ich10/OpenBoardPkgPcd.dsc | 2 +- 10 files changed, 167 insertions(+), 57 deletions(-) diff --git a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc index 790fccf4009..780e2c27b93 100644 --- a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc +++ b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc @@ -112,7 +112,7 @@ # # Platform # - TimerLib|PcAtChipsetPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.inf + TimerLib|UefiCpuPkg/Library/CpuTimerLib/BaseCpuTimerLib.inf # # Misc diff --git a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreDxeInclude.dsc b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreDxeInclude.dsc index 600a9565370..1641d7eec51 100644 --- a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreDxeInclude.dsc +++ b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreDxeInclude.dsc @@ -40,14 +40,25 @@ # # Real variables for stages 5+ # - MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf { + + NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf + NULL|MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLibStandaloneMm.inf + } + + !else + MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf { + + NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf + NULL|MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiLib.inf + NULL|MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf + } + !endif + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf - MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf { - - NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf - NULL|MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiLib.inf - NULL|MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf - } MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf @@ -126,21 +137,33 @@ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf } - MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf - MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + StandaloneMmPkg/Drivers/StandaloneMmIplPei/StandaloneMmIplPei.inf + StandaloneMmPkg/Core/StandaloneMmCore.inf { + + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + HobPrintLib|MdeModulePkg/Library/HobPrintLib/HobPrintLib.inf + } + + MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterStandaloneMm.inf + MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandaloneMm.inf + UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf + MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceStandaloneMm.inf + !else + MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf + MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf + + MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf + MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf + UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf + MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf + MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf + !endif - MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf - MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf - - #UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf - - UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf MdeModulePkg/Universal/SmmCommunicationBufferDxe/SmmCommunicationBufferDxe.inf - MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf - MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf !if gMinPlatformPkgTokenSpaceGuid.PcdUefiSecureBootEnable == TRUE @@ -155,7 +178,12 @@ NULL|SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2InstanceLibDTpm.inf NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf } - SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + SecurityPkg/Tcg/Tcg2Smm/Tcg2StandaloneMm.inf + !else + SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf + !endif + SecurityPkg/Tcg/Tcg2Acpi/Tcg2Acpi.inf SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDxe.inf !endif diff --git a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreDxeLib.dsc b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreDxeLib.dsc index 3b9cf101f18..a18a2a1bb0a 100644 --- a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreDxeLib.dsc +++ b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreDxeLib.dsc @@ -24,7 +24,11 @@ HstiLib|MdePkg/Library/DxeHstiLib/DxeHstiLib.inf - LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf + !else + LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf + !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf @@ -93,6 +97,31 @@ VariableReadLib|MinPlatformPkg/Library/SmmVariableReadLib/TraditionalMmVariableReadLib.inf VariableWriteLib|MinPlatformPkg/Library/SmmVariableWriteLib/TraditionalMmVariableWriteLib.inf +[LibraryClasses.common.MM_STANDALONE] + MemoryAllocationLib|StandaloneMmPkg/Library/StandaloneMmMemoryAllocationLib/StandaloneMmMemoryAllocationLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf + HobLib|StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf + StandaloneMmDriverEntryPoint|MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf + MemLib|StandaloneMmPkg/Library/StandaloneMmMemLib/StandaloneMmMemLib.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLibStandaloneMm.inf + SmmCpuPlatformHookLib|UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf + MmSaveStateLib|UefiCpuPkg/Library/MmSaveStateLib/IntelMmSaveStateLib.inf + SmmCpuFeaturesLib|UefiCpuPkg/Library/SmmCpuFeaturesLib/StandaloneMmCpuFeaturesLib.inf + CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuExceptionHandlerLib.inf + CcExitLib|UefiCpuPkg/Library/CcExitLibNull/CcExitLibNull.inf + +[LibraryClasses.common.MM_CORE_STANDALONE] + HobLib|StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf + ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf + FvLib|StandaloneMmPkg/Library/FvLib/FvLib.inf + MemoryAllocationLib|StandaloneMmPkg/Library/StandaloneMmCoreMemoryAllocationLib/StandaloneMmCoreMemoryAllocationLib.inf + MemLib|StandaloneMmPkg/Library/StandaloneMmMemLib/StandaloneMmMemLib.inf + StandaloneMmCoreEntryPoint|StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/StandaloneMmCoreEntryPoint.inf + MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf + [LibraryClasses.common.SMM_CORE] MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf diff --git a/Platform/Intel/MinPlatformPkg/Include/Dsc/CorePeiLib.dsc b/Platform/Intel/MinPlatformPkg/Include/Dsc/CorePeiLib.dsc index b5d5d009318..bd16a9e1cd1 100644 --- a/Platform/Intel/MinPlatformPkg/Include/Dsc/CorePeiLib.dsc +++ b/Platform/Intel/MinPlatformPkg/Include/Dsc/CorePeiLib.dsc @@ -28,7 +28,11 @@ ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLibBase.inf - LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf + !else + LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf + !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf !if gMinPlatformPkgTokenSpaceGuid.PcdPerformanceEnable == TRUE @@ -64,3 +68,4 @@ SmmRelocationLib|UefiCpuPkg/Library/SmmRelocationLib/SmmRelocationLib.inf SmmControlLib|IntelSiliconPkg/Feature/SmmControl/Library/PeiSmmControlLib/PeiSmmControlLib.inf + MmUnblockMemoryLib|UefiCpuPkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLib.inf diff --git a/Platform/Intel/MinPlatformPkg/Include/Fdf/CoreOsBootInclude.fdf b/Platform/Intel/MinPlatformPkg/Include/Fdf/CoreOsBootInclude.fdf index 64bfcd9745c..f6612f9e81f 100644 --- a/Platform/Intel/MinPlatformPkg/Include/Fdf/CoreOsBootInclude.fdf +++ b/Platform/Intel/MinPlatformPkg/Include/Fdf/CoreOsBootInclude.fdf @@ -8,26 +8,44 @@ ## !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE -INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf -INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf -INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf + !else + INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf + !endif !endif !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE -INF MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf -INF MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf -INF MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf -INF MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf -#INF UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf -INF UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf -INF MdeModulePkg/Universal/SmmCommunicationBufferDxe/SmmCommunicationBufferDxe.inf -INF MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf + INF MdeModulePkg/Universal/SmmCommunicationBufferDxe/SmmCommunicationBufferDxe.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + INF StandaloneMmPkg/Core/StandaloneMmCore.inf + INF StandaloneMmPkg/Drivers/StandaloneMmIplPei/StandaloneMmIplPei.inf + + INF MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterStandaloneMm.inf + INF MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandaloneMm.inf + INF UefiCpuPkg/CpuIo2Smm/CpuIo2StandaloneMm.inf + !else + INF MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf + INF MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf + + INF MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf + INF MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf + INF UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf + INF MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf + !endif !endif !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE -INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf -INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf -INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf -INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf + INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf + INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceStandaloneMm.inf + !else + INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf + !endif !endif diff --git a/Platform/Intel/MinPlatformPkg/Include/Fdf/CoreSecurityLateInclude.fdf b/Platform/Intel/MinPlatformPkg/Include/Fdf/CoreSecurityLateInclude.fdf index 3edc878e173..6d3e6fadeec 100644 --- a/Platform/Intel/MinPlatformPkg/Include/Fdf/CoreSecurityLateInclude.fdf +++ b/Platform/Intel/MinPlatformPkg/Include/Fdf/CoreSecurityLateInclude.fdf @@ -12,9 +12,13 @@ INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.i !endif !if gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable == TRUE -INF SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf -INF SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf -INF SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf -INF RuleOverride = DRIVER_ACPITABLE SecurityPkg/Tcg/Tcg2Acpi/Tcg2Acpi.inf -INF SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDxe.inf + INF SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf + INF SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf + INF RuleOverride = DRIVER_ACPITABLE SecurityPkg/Tcg/Tcg2Acpi/Tcg2Acpi.inf + INF SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDxe.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + INF SecurityPkg/Tcg/Tcg2Smm/Tcg2StandaloneMm.inf + !else + INF SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf + !endif !endif diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc index 405a3afb01e..7ff85ddf1c5 100644 --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc @@ -97,6 +97,7 @@ TestPointCheckLib|MinPlatformPkg/Test/Library/TestPointCheckLib/PeiTestPointCheckLib.inf TestPointLib|MinPlatformPkg/Test/Library/TestPointLib/PeiTestPointLib.inf SetCacheMtrrLib|MinPlatformPkg/Library/SetCacheMtrrLib/SetCacheMtrrLibNull.inf + MmUnblockMemoryLib|UefiCpuPkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLib.inf [LibraryClasses.common.DXE_DRIVER] # diff --git a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc index 164e5eca2da..2880e4743b5 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc +++ b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.dsc @@ -100,6 +100,7 @@ CpuExceptionHandlerLib|MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLibNull.inf S3BootScriptLib|MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf + StandaloneMmMemLib|StandaloneMmPkg/Library/StandaloneMmMemLib/StandaloneMmMemLib.inf ##################################### # Platform Package @@ -168,7 +169,7 @@ BoardBdsHookLib|$(BOARD_PKG)/Library/BoardBdsHookLib/BoardBdsHookLib.inf BoardBootManagerLib|$(BOARD_PKG)/Library/BoardBootManagerLib/BoardBootManagerLib.inf -[LibraryClasses.common.DXE_SMM_DRIVER] +[LibraryClasses.common.DXE_SMM_DRIVER, LibraryClasses.common.MM_STANDALONE] ####################################### # Silicon Initialization Package ####################################### @@ -183,10 +184,7 @@ ####################################### # S3 SMM driver # @todo: UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf - UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf { - - LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf - } + UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf ####################################### # Silicon Initialization Package @@ -248,9 +246,20 @@ MdeModulePkg/Universal/PrintDxe/PrintDxe.inf !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf - UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuStandaloneMm.inf + !else + UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf + !endif !endif UefiCpuPkg/CpuDxe/CpuDxe.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + StandaloneMmPkg/Drivers/MmCommunicationDxe/MmCommunicationDxe.inf { + + NULL|StandaloneMmPkg/Library/VariableMmDependency/VariableMmDependency.inf + NULL|StandaloneMmPkg/Library/SmmLockBoxMmDependency/SmmLockBoxMmDependency.inf + } + !endif ShellPkg/Application/Shell/Shell.inf { @@ -283,18 +292,26 @@ # Silicon Initialization Package ####################################### SimicsIch10BinPkg/UndiBinary/UndiDxe.inf -!if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE - $(PCH_PKG)/SmmControl/RuntimeDxe/SmmControl2Dxe.inf - $(PCH_PKG)/Spi/Smm/PchSpiSmm.inf - IntelSiliconPkg/Feature/SmmAccess/SmmAccessDxe/SmmAccess.inf - IntelSiliconPkg/Feature/Flash/SpiFvbService/SpiFvbServiceSmm.inf -!endif + !if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE + $(PCH_PKG)/SmmControl/RuntimeDxe/SmmControl2Dxe.inf + IntelSiliconPkg/Feature/SmmAccess/SmmAccessDxe/SmmAccess.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + $(PCH_PKG)/Spi/Smm/PchSpiStandaloneMm.inf + IntelSiliconPkg/Feature/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.inf + !else + $(PCH_PKG)/Spi/Smm/PchSpiSmm.inf + IntelSiliconPkg/Feature/Flash/SpiFvbService/SpiFvbServiceSmm.inf + !endif + !endif ##################################### # Platform Package ##################################### $(PLATFORM_PACKAGE)/PlatformInit/PlatformInitDxe/PlatformInitDxe.inf - $(PLATFORM_PACKAGE)/PlatformInit/PlatformInitSmm/PlatformInitSmm.inf + !if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + !else + $(PLATFORM_PACKAGE)/PlatformInit/PlatformInitSmm/PlatformInitSmm.inf + !endif ####################################### # Board Package diff --git a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.fdf b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.fdf index ceace433a69..3db28d86865 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.fdf +++ b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkg.fdf @@ -204,7 +204,6 @@ INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf -INF IntelSiliconPkg/Feature/Flash/SpiFvbService/SpiFvbServiceSmm.inf INF MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf INF BoardModulePkg/LegacySioDxe/LegacySioDxe.inf INF BoardModulePkg/BoardBdsHookDxe/BoardBdsHookDxe.inf @@ -219,9 +218,18 @@ INF RuleOverride=ACPITABLE $(BOARD_PKG)/AcpiTables/AcpiTables.inf INF $(BOARD_PKG)/SimicsVideoDxe/SimicsVideoDxe.inf INF MinPlatformPkg/PlatformInit/PlatformInitDxe/PlatformInitDxe.inf -INF MinPlatformPkg/PlatformInit/PlatformInitSmm/PlatformInitSmm.inf INF $(BOARD_PKG)/SimicsDxe/SimicsDxe.inf +!if gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable == TRUE + #INF UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuStandaloneMm.inf + INF StandaloneMmPkg/Drivers/MmCommunicationDxe/MmCommunicationDxe.inf + INF IntelSiliconPkg/Feature/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.inf +!else + #INF UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf + INF IntelSiliconPkg/Feature/Flash/SpiFvbService/SpiFvbServiceSmm.inf + INF MinPlatformPkg/PlatformInit/PlatformInitSmm/PlatformInitSmm.inf +!endif + FILE FREEFORM = 7BB28B99-61BB-11D5-9A5D-0090273FC14D { SECTION RAW = $(BOARD_PKG)/Logo/Logo.bmp } diff --git a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc index 93b206733cf..936ad025dd6 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc +++ b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc @@ -46,7 +46,7 @@ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE gUefiCpuPkgTokenSpaceGuid.PcdSmmFeatureControlEnable|FALSE gUefiCpuPkgTokenSpaceGuid.PcdSmrrEnable|TRUE - gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable|FALSE + gMinPlatformPkgTokenSpaceGuid.PcdStandaloneMmEnable|TRUE ###################################### # Platform Configuration From 7608d541d2b95e5a28888f30b30518ba1470c809 Mon Sep 17 00:00:00 2001 From: Jiaxin Wu Date: Wed, 7 Aug 2024 13:48:03 +0800 Subject: [PATCH 8/8] Platform/Intel: Add SmmProfile enable/disable control for QSP Add PcdCpuSmmProfileEnable & PcdCpuSmmRestrictedMemoryAccess for the SmmProfile enable/disable control for QSP. Signed-off-by: Jiaxin Wu --- .../SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc index 936ad025dd6..20f0f66256f 100644 --- a/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc +++ b/Platform/Intel/SimicsOpenBoardPkg/BoardX58Ich10/OpenBoardPkgPcd.dsc @@ -32,6 +32,10 @@ ###################################### # Edk2 Configuration ###################################### + # + # For X64, PcdCpuSmmRestrictedMemoryAccess must be FALSE if PcdCpuSmmProfileEnable is TRUE. + # + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmProfileEnable|FALSE gEfiMdeModulePkgTokenSpaceGuid.PcdBrowerGrayOutReadOnlyMenu|TRUE gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportUefiDecompress|FALSE !if $(PEI_ARCH) == "IA32" && $(DXE_ARCH) == "X64" @@ -203,6 +207,7 @@ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmCodeAccessCheckEnable |TRUE gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmRestrictedMemoryAccess|TRUE [PcdsPatchableInModule.common] ######################################