Patch merged: https://github.com/tianocore/edk2-platforms/commit/dbd802cd273ad1b51be46ca09a58a15e4b70863f
Thanks, Chasel > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Michael > Kubacki > Sent: Wednesday, May 10, 2023 8:02 AM > To: devel@edk2.groups.io > Cc: Chiu, Chasel <chasel.c...@intel.com>; Desimone, Nathaniel L > <nathaniel.l.desim...@intel.com>; Oram, Isaac W <isaac.w.o...@intel.com>; > Gao, Liming <gaolim...@byosoft.com.cn>; Dong, Eric <eric.d...@intel.com>; > Gudla, Raghava <raghava.gu...@intel.com> > Subject: [edk2-devel] [edk2-platforms][PATCH v4 1/1] MinPlatformPkg: Add > FspNvsBuffer compression option > > From: Michael Kubacki <michael.kuba...@microsoft.com> > > Adds a PCD called "PcdEnableCompressedFspNvsBuffer" that allows the > "FspNvsBuffer" UEFI variable data to be saved as compressed data. > > Especially due to the nature of the data saved in this variable, it > compresses well. > For example, it has been found to reduce ~63KB of data to ~13KB. Boot time > impact has been found to be negligible. > > The default value is FALSE to keep default behavior consistent. > > Decompression can be performed on the variable data using the standard > UefiDecompressLib. > > Cc: Chasel Chiu <chasel.c...@intel.com> > Cc: Nate DeSimone <nathaniel.l.desim...@intel.com> > Cc: Isaac Oram <isaac.w.o...@intel.com> > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Cc: Eric Dong <eric.d...@intel.com> > Cc: Raghava Gudla <raghava.gu...@intel.com> > Signed-off-by: Michael Kubacki <michael.kuba...@microsoft.com> > --- > > Notes: > v4: > - Rebase onto 42a677e992d2 > - Add CompressLib to MinPlatformPkg.dsc as well > v3: > - Rebase onto 7ac91ec277db > - Add CompressLib instance to CoreCommonLib.dsc > v2: Rebase onto 9769bf28d1fc > > > Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryC > onfig.c | 62 ++++++++++++++++---- > > Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryC > onfig.inf | 4 ++ > Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc > | > 1 + > Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > | 6 ++ > Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > | 1 + > 5 files changed, 61 insertions(+), 13 deletions(-) > > diff --git > a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemor > yConfig.c > b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemor > yConfig.c > index 0215e8eeddfb..95b8cef8b32b 100644 > --- > a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemor > yConfig.c > +++ > b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemo > +++ ryConfig.c > @@ -3,6 +3,7 @@ > exists, and saves the data to nvRAM. > > Copyright (c) 2017 - 2022, Intel Corporation. All rights reserved.<BR> > +Copyright (c) Microsoft Corporation.<BR> > SPDX-License-Identifier: BSD-2-Clause-Patent > > **/ > @@ -10,6 +11,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include > <Base.h> #include <Uefi.h> #include <Library/BaseLib.h> > +#include <Library/CompressLib.h> > #include <Library/UefiBootServicesTableLib.h> > #include <Library/UefiRuntimeServicesTableLib.h> > #include <Library/HobLib.h> > @@ -19,6 +21,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include > <Library/BaseMemoryLib.h> #include <Library/LargeVariableReadLib.h> > #include <Library/LargeVariableWriteLib.h> > +#include <Library/PcdLib.h> > #include <Library/VariableWriteLib.h> > #include <Guid/FspNonVolatileStorageHob2.h> > > @@ -38,20 +41,26 @@ SaveMemoryConfigEntryPoint ( > IN EFI_SYSTEM_TABLE *SystemTable > ) > { > - EFI_STATUS Status; > - EFI_HOB_GUID_TYPE *GuidHob; > - VOID *HobData; > - VOID *VariableData; > - UINTN DataSize; > - UINTN BufferSize; > - BOOLEAN DataIsIdentical; > + EFI_STATUS Status; > + EFI_HOB_GUID_TYPE *GuidHob; > + VOID *HobData; > + VOID *VariableData; > + UINTN DataSize; > + UINTN BufferSize; > + BOOLEAN DataIsIdentical; > + VOID *CompressedData; > + UINT64 CompressedSize; > + UINTN CompressedAllocationPages; > > - DataSize = 0; > - BufferSize = 0; > - VariableData = NULL; > - GuidHob = NULL; > - HobData = NULL; > - DataIsIdentical = FALSE; > + DataSize = 0; > + BufferSize = 0; > + VariableData = NULL; > + GuidHob = NULL; > + HobData = NULL; > + DataIsIdentical = FALSE; > + CompressedData = NULL; > + CompressedSize = 0; > + CompressedAllocationPages = 0; > > // > // Search for the Memory Configuration GUID HOB. If it is not present, > then > @@ -73,6 +82,29 @@ SaveMemoryConfigEntryPoint ( > } > } > > + if (PcdGetBool (PcdEnableCompressedFspNvsBuffer)) { > + if (DataSize > 0) { > + CompressedAllocationPages = EFI_SIZE_TO_PAGES (DataSize); > + CompressedData = AllocatePages (CompressedAllocationPages); > + if (CompressedData == NULL) { > + DEBUG ((DEBUG_ERROR, "[%a] - Failed to allocate compressed data > buffer.\n", __FUNCTION__)); > + ASSERT_EFI_ERROR (EFI_OUT_OF_RESOURCES); > + return EFI_OUT_OF_RESOURCES; > + } > + > + CompressedSize = EFI_PAGES_TO_SIZE (CompressedAllocationPages); > + Status = Compress (HobData, DataSize, CompressedData, > &CompressedSize); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "[%a] - failed to compress data. Status = %r\n", > __FUNCTION__, Status)); > + ASSERT_EFI_ERROR (Status); > + return Status; > + } > + } > + > + HobData = CompressedData; > + DataSize = (UINTN)CompressedSize; > + } > + > if (HobData != NULL) { > DEBUG ((DEBUG_INFO, "FspNvsHob.NvsDataLength:%d\n", DataSize)); > DEBUG ((DEBUG_INFO, "FspNvsHob.NvsDataPtr : 0x%x\n", HobData)); > @@ -136,6 +168,10 @@ SaveMemoryConfigEntryPoint ( > DEBUG((DEBUG_ERROR, "Memory S3 Data HOB was not found\n")); > } > > + if (CompressedData != NULL) { > + FreePages (CompressedData, CompressedAllocationPages); } > + > // > // This driver does not produce any protocol services, so always unload it. > // > diff --git > a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemor > yConfig.inf > b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemor > yConfig.inf > index 61e85a658693..0f12deb131ca 100644 > --- > a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemor > yConfig.inf > +++ > b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemo > +++ ryConfig.inf > @@ -26,6 +26,7 @@ [LibraryClasses] > LargeVariableReadLib > LargeVariableWriteLib > BaseLib > + CompressLib > > [Packages] > MdePkg/MdePkg.dec > @@ -45,6 +46,9 @@ [Guids] > gFspNonVolatileStorageHob2Guid ## CONSUMES > gFspNvsBufferVariableGuid ## PRODUCES > > +[Pcd] > + gMinPlatformPkgTokenSpaceGuid.PcdEnableCompressedFspNvsBuffer > + > [Depex] > gEfiVariableArchProtocolGuid AND > gEfiVariableWriteArchProtocolGuid > \ No newline at end of file > diff --git a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc > b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc > index 5ce21cf31e17..dfe7d836d32a 100644 > --- a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc > +++ b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc > @@ -147,6 +147,7 @@ [LibraryClasses.common] > > BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLi > b.inf > > LargeVariableReadLib|MinPlatformPkg/Library/BaseLargeVariableLib/BaseLarg > eVariableReadLib.inf > > LargeVariableWriteLib|MinPlatformPkg/Library/BaseLargeVariableLib/BaseLarg > eVariableWriteLib.inf > + CompressLib|MinPlatformPkg/Library/CompressLib/CompressLib.inf > > # > # CryptLib > diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > index 784abb828e76..45c75f8ec2c9 100644 > --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec > @@ -311,6 +311,12 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, > PcdsDynamic, PcdsDynamicEx] > > > gMinPlatformPkgTokenSpaceGuid.PcdPlatformMemoryCheckLevel|0|UINT32|0 > x30000009 > > + ## Controls whether the FSP NVS buffer is saved as compressed data. > + # Data compression can significantly reduce variable storage usage for FSP > NVS buffer data. > + # Platforms that choose to compress the data will need to decompress > + the variable data upon # extraction. > + > + > gMinPlatformPkgTokenSpaceGuid.PcdEnableCompressedFspNvsBuffer|FALSE|B > O > + OLEAN|0x30000010 > + > ## This PCD is to control which device is the potential trusted console > input > device.<BR><BR> > # For example:<BR> > # USB Short Form: UsbHID(0xFFFF,0xFFFF,0x1,0x1)<BR> diff --git > a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > index 90127c16b59e..087fa48dd00a 100644 > --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc > @@ -101,6 +101,7 @@ [LibraryClasses.common.DXE_DRIVER] > # > # DXE phase common > # > + CompressLib|MinPlatformPkg/Library/CompressLib/CompressLib.inf > > FspWrapperPlatformLib|MinPlatformPkg/FspWrapper/Library/DxeFspWrapperPl > atformLib/DxeFspWrapperPlatformLib.inf > > TestPointCheckLib|MinPlatformPkg/Test/Library/TestPointCheckLib/DxeTestPoi > ntCheckLib.inf > TestPointLib|MinPlatformPkg/Test/Library/TestPointLib/DxeTestPointLib.inf > -- > 2.40.1.windows.1 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#104568): https://edk2.groups.io/g/devel/message/104568 > Mute This Topic: https://groups.io/mt/98807775/1777047 > Group Owner: devel+ow...@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [chasel.c...@intel.com] > -=-=-=-=-=-= > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104581): https://edk2.groups.io/g/devel/message/104581 Mute This Topic: https://groups.io/mt/98807775/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-