From nobody Fri Dec 19 19:16:05 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+81127+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+81127+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1632611155; cv=none; d=zohomail.com; s=zohoarc; b=MHbziU/wwTRY8XmmqRmJJqSfEPtmCF3PGPiX5po5K3Qb+70ueDReCTmTzXqSmX8ehK/4u2d45MQq2HIS7uAA/XBu8LWN980nn21Th9/M3UNYgPyCbmup5L2cTQaceGaG/VQ+3P0/3/gLGsUgsYzhmTXm94LEVGIAxFJqa6XReDk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1632611155; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=gOG/hbajgt7V+QsZ4idMmdzW9L31QurvmGKIP52o6Vk=; b=ZKk3IsE/JLf1mHLMs3RnP2hTy9plLWhEMU8IaLp2I8CAnSB7oFqwTJpcLLqFhhvl8Jv7X0UyqGhCxOCkcL7TTHTaKLlRYVtzfbc6BjR2f3GvQAV6uZSv3UosuZ7YF7Ahejc8NnOzHIZ+l1m183hVi/OleMoH4sQiCv6mPuMUJTg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+81127+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1632611155430851.8566647648873; Sat, 25 Sep 2021 16:05:55 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id nE0fYY1788612xga8P3yvgdX; Sat, 25 Sep 2021 16:05:55 -0700 X-Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web09.12625.1632611151977186302 for ; Sat, 25 Sep 2021 16:05:54 -0700 X-IronPort-AV: E=McAfee;i="6200,9189,10118"; a="285311517" X-IronPort-AV: E=Sophos;i="5.85,322,1624345200"; d="scan'208";a="285311517" X-Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Sep 2021 16:05:53 -0700 X-IronPort-AV: E=Sophos;i="5.85,322,1624345200"; d="scan'208";a="586418306" X-Received: from gdong1-mobl1.amr.corp.intel.com ([10.255.67.241]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Sep 2021 16:05:53 -0700 From: "Guo Dong" To: devel@edk2.groups.io Cc: ray.ni@intel.com, maurice.ma@intel.com, benjamin.you@intel.com, Guo Dong Subject: [edk2-devel] [`edk2-devel][PATCH 8/8] UefiPayloadPkg: Add SMM support and SMM variable support Date: Sat, 25 Sep 2021 16:05:30 -0700 Message-Id: <20210925230530.861-9-guo.dong@intel.com> In-Reply-To: <20210925230530.861-1-guo.dong@intel.com> References: <20210925230530.861-1-guo.dong@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,guo.dong@intel.com X-Gm-Message-State: u2VzUzK47PIonr5Poh6SLSyrx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1632611155; bh=yZcgq+9vW5j8ssF0oQyuIGkKdX1ZYtm5H71b/t/7/p0=; h=Cc:Date:From:Reply-To:Subject:To; b=sGKGciAonZBDUVvz9khvpB97XN9nxw+nzMCS3U5DVTxiZ1v+I9Gqi06TrAT+bmXlM5d kkzrFb59avxh6+BV9jYgK/WJ51ba3kmMMEwepXA6UW1Kp3N4u2S5vYWQBjNxiSZg7VSkS oeRRbf/wx+nrF2DM6x5DaLLMeycX0Uf4pBE= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1632611156558100004 Content-Type: text/plain; charset="utf-8" From: Guo Dong Add SMM variable support for universal UEFI payload. By default they are disabled. Signed-off-by: Guo Dong --- UefiPayloadPkg/UefiPayloadPkg.dsc | 101 +++++++++++++++++++++++++++--- UefiPayloadPkg/UefiPayloadPkg.fdf | 38 ++++++++++- 2 files changed, 128 insertions(+), 11 deletions(-) diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayload= Pkg.dsc index fb805dc772..9dd17136b9 100644 --- a/UefiPayloadPkg/UefiPayloadPkg.dsc +++ b/UefiPayloadPkg/UefiPayloadPkg.dsc @@ -31,12 +31,13 @@ DEFINE RAM_DISK_ENABLE =3D FALSE DEFINE SIO_BUS_ENABLE =3D FALSE DEFINE UNIVERSAL_PAYLOAD =3D FALSE + DEFINE SMM_SUPPORT =3D FALSE =20 # # SBL: UEFI payload for Slim Bootloader # COREBOOT: UEFI payload for coreboot # - DEFINE BOOTLOADER =3D SBL + DEFINE BOOTLOADER =3D SBL =20 # # CPU options @@ -90,7 +91,13 @@ # DEFINE SHELL_TYPE =3D BUILD_SHELL =20 - DEFINE EMU_VARIABLE_ENABLE =3D TRUE + # + # EMU: UEFI payload with EMU variable + # SPI: UEFI payload with SPI NV variable support + # NONE: UEFI payload with no variable modules + # + DEFINE VARIABLE_SUPPORT =3D EMU + DEFINE DISABLE_RESET_SYSTEM =3D FALSE DEFINE NETWORK_DRIVER_ENABLE =3D FALSE =20 @@ -250,10 +257,18 @@ LockBoxLib|MdeModulePkg/Library/LockBoxNullLib/LockBoxNullLib.inf FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLib= Null.inf +!if $(VARIABLE_SUPPORT) =3D=3D "EMU" TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurem= entLibNull.inf +!elseif $(VARIABLE_SUPPORT) =3D=3D "SPI" + PlatformSecureLib|SecurityPkg/Library/PlatformSecureLibNull/PlatformSecu= reLibNull.inf + TpmMeasurementLib|SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasure= mentLib.inf + S3BootScriptLib|MdePkg/Library/BaseS3BootScriptLibNull/BaseS3BootScriptL= ibNull.inf + MmUnblockMemoryLib|MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibN= ull.inf +!endif VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyL= ib.inf VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/Var= iablePolicyHelperLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf =20 [LibraryClasses.common.SEC] HobLib|UefiPayloadPkg/Library/PayloadEntryHobLib/HobLib.inf @@ -271,7 +286,6 @@ DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf - VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf =20 [LibraryClasses.common.DXE_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf @@ -283,7 +297,6 @@ !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf - VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf =20 [LibraryClasses.common.DXE_RUNTIME_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf @@ -296,6 +309,37 @@ MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeRepor= tStatusCodeLib.inf =20 +[LibraryClasses.common.SMM_CORE] +!if $(SMM_SUPPORT) =3D=3D TRUE + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/Pi= SmmCoreSmmServicesTableLib.inf + + MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/Pi= SmmCoreMemoryAllocationLib.inf + SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/S= mmCorePlatformHookLibNull.inf + SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf + ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseRepor= tStatusCodeLibNull.inf +!endif + +[LibraryClasses.common.DXE_SMM_DRIVER] +!if $(SMM_SUPPORT) =3D=3D TRUE + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + + MemoryAllocationLib|MdePkg/Library/SmmMemoryAllocationLib/SmmMemoryAlloc= ationLib.inf + SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTableL= ib.inf + SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf + MmServicesTableLib|MdePkg/Library/MmServicesTableLib/MmServicesTableLib.= inf + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + SmmCpuPlatformHookLib|UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCp= uPlatformHookLibNull.inf + SmmCpuFeaturesLib|UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib= .inf + CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuE= xceptionHandlerLib.inf + ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseRepor= tStatusCodeLibNull.inf +!endif +!if $(VARIABLE_SUPPORT) =3D=3D "SPI" + SpiFlashLib|UefiPayloadPkg/Library/SpiFlashLib/SpiFlashLib.inf + FlashDeviceLib|UefiPayloadPkg/Library/FlashDeviceLib/FlashDeviceLib.inf + BaseCryptLib|CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf +!endif + ##########################################################################= ###### # # Pcd Section - list of all EDK II PCD Entries defined by this Platform. @@ -309,15 +353,17 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE gEfiMdeModulePkgTokenSpaceGuid.PcdHiiOsRuntimeSupport|FALSE gEfiMdeModulePkgTokenSpaceGuid.PcdPciDegradeResourceForOptionRom|FALSE + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE =20 [PcdsFixedAtBuild] gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x10000 gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x8000 gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0x10000 - # - # Make VariableRuntimeDxe work at emulated non-volatile variable mode. - # - gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable|TRUE +!if $(VARIABLE_SUPPORT) =3D=3D "EMU" + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable |TRUE +!else + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable |FALSE +!endif =20 gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress|0x0 gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE @@ -328,6 +374,7 @@ !if $(SOURCE_DEBUG_ENABLE) gEfiSourceLevelDebugPkgTokenSpaceGuid.PcdDebugLoadImageMethod|0x2 !endif + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmStackSize|0x4000 =20 [PcdsPatchableInModule.X64] gPcAtChipsetPkgTokenSpaceGuid.PcdRtcIndexRegister|$(RTC_INDEX_REGISTER) @@ -398,6 +445,14 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0 gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0 gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|3 +!if $(VARIABLE_SUPPORT) =3D=3D "SPI" + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize |0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize |0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase |0 +!endif + # Disable SMM S3 script + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable|FALSE =20 ## This PCD defines the video horizontal resolution. # This PCD could be set to 0 then video resolution could be at highest = resolution. @@ -585,6 +640,36 @@ !endif UefiPayloadPkg/GraphicsOutputDxe/GraphicsOutputDxe.inf =20 + # + # SMM Support + # +!if $(SMM_SUPPORT) =3D=3D TRUE + UefiPayloadPkg/SmmAccessDxe/SmmAccessDxe.inf + UefiPayloadPkg/SmmControlRuntimeDxe/SmmControlRuntimeDxe.inf + UefiPayloadPkg/BlSupportSmm/BlSupportSmm.inf + MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf + MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf + UefiPayloadPkg/PchSmiDispatchSmm/PchSmiDispatchSmm.inf + UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf + UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf +!endif + +!if $(VARIABLE_SUPPORT) =3D=3D "EMU" + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf +!elseif $(VARIABLE_SUPPORT) =3D=3D "SPI" + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf { + + NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf + NULL|MdeModulePkg/Library/VarCheckHiiLib/VarCheckHiiLib.inf + NULL|MdeModulePkg/Library/VarCheckPcdLib/VarCheckPcdLib.inf + NULL|MdeModulePkg/Library/VarCheckPolicyLib/VarCheckPolicyLib.inf + } + + UefiPayloadPkg/FvbRuntimeDxe/FvbSmm.inf + MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf +!endif + #------------------------------ # Build the shell #------------------------------ diff --git a/UefiPayloadPkg/UefiPayloadPkg.fdf b/UefiPayloadPkg/UefiPayload= Pkg.fdf index 6b48bfc869..79ce12ee2c 100644 --- a/UefiPayloadPkg/UefiPayloadPkg.fdf +++ b/UefiPayloadPkg/UefiPayloadPkg.fdf @@ -112,11 +112,29 @@ INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe= /MonotonicCounterRuntimeDxe !if $(DISABLE_RESET_SYSTEM) =3D=3D FALSE INF MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf !endif - INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe= .inf =20 -!if $(EMU_VARIABLE_ENABLE) =3D=3D TRUE -INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf +# +# SMM Support +# +!if $(SMM_SUPPORT) =3D=3D TRUE + INF UefiPayloadPkg/SmmAccessDxe/SmmAccessDxe.inf + INF UefiPayloadPkg/SmmControlRuntimeDxe/SmmControlRuntimeDxe.inf + INF UefiPayloadPkg/BlSupportSmm/BlSupportSmm.inf + INF MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf + INF MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf + INF UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf + INF UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf + INF UefiPayloadPkg/PchSmiDispatchSmm/PchSmiDispatchSmm.inf +!endif + +!if $(VARIABLE_SUPPORT) =3D=3D "EMU" + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf +!elseif $(VARIABLE_SUPPORT) =3D=3D "SPI" + INF UefiPayloadPkg/FvbRuntimeDxe/FvbSmm.inf + INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.i= nf + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf !endif =20 INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf @@ -269,6 +287,20 @@ INF ShellPkg/Application/Shell/Shell.inf UI STRING=3D"$(MODULE_NAME)" Optional VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBER) } +[Rule.Common.DXE_SMM_DRIVER] + FILE SMM =3D $(NAMED_GUID) { + SMM_DEPEX SMM_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBE= R) + } + +[Rule.Common.SMM_CORE] + FILE SMM_CORE =3D $(NAMED_GUID) { + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING=3D"$(MODULE_NAME)" Optional + VERSION STRING=3D"$(INF_VERSION)" Optional BUILD_NUM=3D$(BUILD_NUMBER) + } =20 [Rule.Common.UEFI_DRIVER] FILE DRIVER =3D $(NAMED_GUID) { --=20 2.32.0.windows.2 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#81127): https://edk2.groups.io/g/devel/message/81127 Mute This Topic: https://groups.io/mt/85870029/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-