Just found one minor issue but I think it can be fixed during merging.

We also need to add below libraryClass in MinPlatform.dsc:
  CompressLib|MinPlatformPkg/Library/CompressLib/CompressLib.inf


Thanks,
Chasel


> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chiu, Chasel
> Sent: Tuesday, May 9, 2023 8:28 PM
> To: devel@edk2.groups.io; mikub...@linux.microsoft.com
> Cc: 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: Re: [edk2-devel] [edk2-platforms][PATCH v3 1/1] MinPlatformPkg: Add
> FspNvsBuffer compression option
> 
> 
> Reviewed-by: Chasel Chiu <chasel.c...@intel.com>
> 
> Thanks,
> Chasel
> 
> 
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Michael
> > Kubacki
> > Sent: Tuesday, May 9, 2023 8:21 PM
> > 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 v3 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:
> >     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 ++
> >  4 files changed, 60 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/BaseL
> > LargeVariableReadLib|arg
> > eVariableReadLib.inf
> >
> > LargeVariableWriteLib|MinPlatformPkg/Library/BaseLargeVariableLib/Base
> > LargeVariableWriteLib|Larg
> > 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>
> > --
> > 2.40.1.windows.1
> >
> >
> >
> > -=-=-=-=-=-=
> > Groups.io Links: You receive all messages sent to this group.
> > View/Reply Online (#104478):
> > https://edk2.groups.io/g/devel/message/104478
> > Mute This Topic: https://groups.io/mt/98799191/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 (#104490): https://edk2.groups.io/g/devel/message/104490
Mute This Topic: https://groups.io/mt/98799191/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to