When reviewing the Variable feature that adds integrity and confidentiality,
I suggested that the interface between the Variable services and the NVStorage
could provide an abstraction to encode/decode the stored data that would
support encryption, compression, or both.  Could also support a platform 
policy for which variables the encode/decode operation is applied.

Wouldn't that be a better abstraction than piecemeal adding these
features?

Doesn't mean that this can't go in as-is.  But would be an opportunity to
consolidate in the future.

Mike

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chiu,
> Chasel
> Sent: Monday, May 8, 2023 12:37 PM
> To: Oram, Isaac W <isaac.w.o...@intel.com>; Gudla, Raghava
> <raghava.gu...@intel.com>; devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desim...@intel.com>; Kubacki,
> Michael <michael.kuba...@microsoft.com>; Chaganty, Rangasai V
> <rangasai.v.chaga...@intel.com>; Chiu, Chasel <chasel.c...@intel.com>
> Subject: Re: [edk2-devel] [edk2-platforms:PATCH V1]
> MinPlatformPkg/SaveMemoryConfig: Support NVS Data compression.
> 
> 
> Hi Isaac,
> 
> Just my thoughts, I would vote for platform/bootloader to decide
> compressing the variable data before saving to NVRAM or not.
> It should be optional and when platform having big SPI flash they might not
> want to do this.
> 
> Thanks,
> Chasel
> 
> 
> > -----Original Message-----
> > From: Oram, Isaac W <isaac.w.o...@intel.com>
> > Sent: Monday, May 8, 2023 12:15 PM
> > To: Gudla, Raghava <raghava.gu...@intel.com>; devel@edk2.groups.io
> > Cc: Chiu, Chasel <chasel.c...@intel.com>; Desimone, Nathaniel L
> > <nathaniel.l.desim...@intel.com>; Kubacki, Michael
> > <michael.kuba...@microsoft.com>; Chaganty, Rangasai V
> > <rangasai.v.chaga...@intel.com>
> > Subject: RE: [edk2-platforms:PATCH V1] MinPlatformPkg/SaveMemoryConfig:
> > Support NVS Data compression.
> >
> > The proposed implementation is fine and I will reviewed-by and push if that
> is
> > the desired direction.
> >
> > My question is if we generally like the design of doing compression in
> common
> > MinPlatform code, decompression in board specific FSP wrapper code.  The
> > alternative design is to do compression and decompression inside the FSP.
> This
> > seems like a slightly simpler separation of responsibilities.
> > The board code is responsible for save/restore, the FSP code is responsible
> for
> > data blob creation and use.  Data integrity, authentication, compression, 
> > etc
> all
> > can be done based on more detailed knowledge of the silicon
> implementation
> > requirements.
> >
> > I can see another argument though that doing it inside FSP effectively 
> > forces
> > both bootloader and FSP to carry compression/decompression.  The
> > compression/decompression aren't likely to need to be silicon specific.  And
> > bootloader may have more requirements to balance than just the silicon
> > requirements.
> >
> > Can I get some votes on preferred answer for compressing/decompressing
> FSP
> > non-volatile data in bootloader or FSP?
> >
> > Thanks,
> > Isaac
> >
> > -----Original Message-----
> > From: Gudla, Raghava <raghava.gu...@intel.com>
> > Sent: Friday, May 5, 2023 5:03 PM
> > To: devel@edk2.groups.io
> > Cc: Gudla, Raghava <raghava.gu...@intel.com>; Chiu, Chasel
> > <chasel.c...@intel.com>; Desimone, Nathaniel L
> > <nathaniel.l.desim...@intel.com>; Oram, Isaac W
> <isaac.w.o...@intel.com>
> > Subject: [edk2-platforms:PATCH V1] MinPlatformPkg/SaveMemoryConfig:
> > Support NVS Data compression.
> >
> > Around 50KB "FspNonVolatileStorageHob" data can be compressed to
> > approximately 3 KB which can save NVRAM space and enhance life of the SPI
> > part by decreasing the number of reclaim cycles needed.
> >
> > This patch added support to compress "FspNonVolatileStorageHob" data
> before
> > saving to NVRAM.
> >
> > A PcdEnableCompressFspNvsHob is introduced to enable/disable this
> feature per
> > platform usage.
> >
> > Cc: Chasel Chiu <chasel.c...@intel.com>
> > Cc: Nate DeSimone <nathaniel.l.desim...@intel.com>
> > Cc: Isaac Oram <isaac.w.o...@intel.com>
> >
> > Signed-off-by: Raghava Gudla <raghava.gu...@intel.com>
> > ---
> >  .../SaveMemoryConfig/SaveMemoryConfig.c       | 34 +++++++++++++++++++
> >  .../SaveMemoryConfig/SaveMemoryConfig.inf     |  6 +++-
> >  .../Include/Dsc/CoreCommonLib.dsc             |  1 +
> >  .../Intel/MinPlatformPkg/MinPlatformPkg.dec   |  5 +++
> >  4 files changed, 45 insertions(+), 1 deletion(-)
> >
> > diff --git
> >
> a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemo
> r
> > yConfig.c
> >
> b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMem
> or
> > yConfig.c
> > index 0215e8eed..8aa935b54 100644
> > ---
> >
> a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemo
> r
> > yConfig.c
> > +++
> >
> b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMem
> o
> > +++ ryConfig.c
> > @@ -21,6 +21,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> >  #include <Library/LargeVariableWriteLib.h> #include
> > <Library/VariableWriteLib.h> #include
> > <Guid/FspNonVolatileStorageHob2.h>+#include <Library/PcdLib.h>+#include
> > <Library/CompressLib.h>  /**   This is the standard EFI driver point that
> detects
> > whether there is a@@ -45,6 +47,9 @@ SaveMemoryConfigEntryPoint (
> >    UINTN             DataSize;   UINTN             BufferSize;   BOOLEAN
> > DataIsIdentical;+  VOID              *CompressedData;+  UINT64
> > CompressedSize;+  UINTN             CompressedAllocationPages;    DataSize
> = 0;
> > BufferSize      = 0;@@ -73,6 +78,35 @@ SaveMemoryConfigEntryPoint (
> >      }   } +  if (PcdGetBool (PcdEnableCompressFspNvsHob) == 1) {+
> > CompressedData            = NULL;+    CompressedSize            = 0;+
> > CompressedAllocationPages = 0;++    DEBUG ((DEBUG_INFO, "compressing
> mem
> > config nvs variable\n"));+    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",
> > __func__));+        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", __func__,
> > Status));+        ASSERT_EFI_ERROR (Status);+
> FreePool(CompressedData);+
> > return Status;+      } else {+        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));diff --git
> >
> a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemo
> r
> > yConfig.inf
> >
> b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMem
> or
> > yConfig.inf
> > index 61e85a658..77920d031 100644
> > ---
> >
> a/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemo
> r
> > yConfig.inf
> > +++
> >
> b/Platform/Intel/MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMem
> o
> > +++ ryConfig.inf
> > @@ -26,6 +26,7 @@
> >    LargeVariableReadLib   LargeVariableWriteLib   BaseLib+  CompressLib
> > [Packages]   MdePkg/MdePkg.dec@@ -45,6 +46,9 @@
> >    gFspNonVolatileStorageHob2Guid                ## CONSUMES
> > gFspNvsBufferVariableGuid                     ## PRODUCES +[Pcd]+
> > gMinPlatformPkgTokenSpaceGuid.PcdEnableCompressFspNvsHob+ [Depex]
> > gEfiVariableArchProtocolGuid        AND-  gEfiVariableWriteArchProtocolGuid
> > \ No newline at end of file
> > +  gEfiVariableWriteArchProtocolGuiddiff --git
> > + a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc
> > + b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc
> > index 5ce21cf31..dfe7d836d 100644
> > --- a/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc
> > +++ b/Platform/Intel/MinPlatformPkg/Include/Dsc/CoreCommonLib.dsc
> > @@ -147,6 +147,7 @@
> >
> >
> BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSuppor
> tLi
> > b.inf
> >
> LargeVariableReadLib|MinPlatformPkg/Library/BaseLargeVariableLib/BaseLarg
> > eVariableReadLib.inf
> >
> LargeVariableWriteLib|MinPlatformPkg/Library/BaseLargeVariableLib/BaseLarg
> > eVariableWriteLib.inf+
> > CompressLib|MinPlatformPkg/Library/CompressLib/CompressLib.inf    #   #
> > CryptLibdiff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec
> > b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec
> > index 784abb828..e21d55fb3 100644
> > --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec
> > +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dec
> > @@ -348,6 +348,11 @@
> >
> >
> gMinPlatformPkgTokenSpaceGuid.PcdFadtFlags|0x000086A5|UINT32|0x90000
> > 027
> >
> gMinPlatformPkgTokenSpaceGuid.PcdFadtMajorVersion|0x06|UINT8|0x90000
> 0
> > 30
> >
> gMinPlatformPkgTokenSpaceGuid.PcdFadtMinorVersion|0x03|UINT8|0x90000
> 0
> > 31+## Controls whether the Memory Config UEFI Variable 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.PcdEnableCompressFspNvsHob|FALSE|BOO
> L
> > EAN|0x90000032  [PcdsFixedAtBuild] --
> > 2.19.1.windows.1
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#104293): https://edk2.groups.io/g/devel/message/104293
Mute This Topic: https://groups.io/mt/98719541/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: 
https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to