Two minor inline comments:
> -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Michael > Kubacki > Sent: Thursday, April 7, 2022 12:27 AM > To: devel@edk2.groups.io > Cc: Wang, Jian J <jian.j.w...@intel.com>; Wu, Hao A <hao.a...@intel.com>; > Gao, Liming <gaolim...@byosoft.com.cn> > Subject: [edk2-devel] [PATCH v1 3/3] MdeModulePkg/FaultTolerantWrite: > Consume Variable Info HOB > > From: Michael Kubacki <michael.kuba...@microsoft.com> > > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3479 > > Adds support to the UEFI variable fault tolerant write (FTW) drivers > to receive FTW base and size information dynamically via the Variable > Flash Information HOB. > > This supplements support added earlier for the variable store base > address and size passed with the Variable Flash Information HOB. > > Cc: Jian J Wang <jian.j.w...@intel.com> > Cc: Hao A Wu <hao.a...@intel.com> > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Signed-off-by: Michael Kubacki <michael.kuba...@microsoft.com> > --- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c > | > 111 +++++++++++++++++--- > MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > | 7 +- > MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c > | 92 ++++++++++++++-- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h > | 9 +- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > | 11 +- > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf > | 11 +- > > MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandalon > eMm.inf | 11 +- > MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > | 10 +- > 8 files changed, 221 insertions(+), 41 deletions(-) > > diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c > index 661e1487673b..5066fe0d3711 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c > @@ -972,6 +972,48 @@ GetPreviousRecordOfWrites ( > return EFI_SUCCESS; > } > > +/** > + Get the HOB that contains variable flash information. > + > + @param[out] VariableFlashInfo Pointer to a pointer to set to the variable > flash information structure. > + > + @retval EFI_SUCCESS Variable flash information was found > successfully. > + @retval EFI_INVALID_PARAMETER The VariableFlashInfo pointer given is > NULL. > + @retval EFI_NOT_FOUND Variable flash information could not be > found. > + > +**/ > +EFI_STATUS > +GetVariableFlashInfo ( > + OUT VARIABLE_FLASH_INFO **VariableFlashInfo > + ) > +{ > + EFI_HOB_GUID_TYPE *GuidHob; > + > + if (VariableFlashInfo == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + GuidHob = GetFirstGuidHob (&gVariableFlashInfoHobGuid); > + if (GuidHob == NULL) { > + return EFI_NOT_FOUND; > + } > + > + *VariableFlashInfo = GET_GUID_HOB_DATA (GuidHob); > + > + // > + // Assert if more than one variable flash information HOB is present. > + // > + DEBUG_CODE ( > + if ((GetNextGuidHob (&gVariableFlashInfoHobGuid, GET_NEXT_HOB > (GuidHob)) != NULL)) { > + DEBUG ((DEBUG_ERROR, "ERROR: Found two variable flash information > HOBs\n")); > + ASSERT (FALSE); > + } > + > + ); > + > + return EFI_SUCCESS; > +} > + > /** > Allocate private data for FTW driver and initialize it. > > @@ -987,22 +1029,71 @@ InitFtwDevice ( > OUT EFI_FTW_DEVICE **FtwData > ) > { > - EFI_FTW_DEVICE *FtwDevice; > + EFI_STATUS Status; > + EFI_STATUS VariableFlashInfoStatus; > + UINTN FtwWorkingSize; > + VARIABLE_FLASH_INFO *VariableFlashInfo; > + EFI_FTW_DEVICE *FtwDevice; > + > + FtwWorkingSize = 0; > + VariableFlashInfoStatus = GetVariableFlashInfo (&VariableFlashInfo); > + if (!EFI_ERROR (VariableFlashInfoStatus)) { > + Status = SafeUint64ToUintn (VariableFlashInfo->FtwWorkingLength, > &FtwWorkingSize); > + if (EFI_ERROR (Status)) { > + ASSERT_EFI_ERROR (Status); > + FtwWorkingSize = 0; > + } > + } > + > + if (FtwWorkingSize == 0) { > + FtwWorkingSize = (UINTN)PcdGet32 (PcdFlashNvStorageFtwWorkingSize); > + } > > // > // Allocate private data of this driver, > // Including the FtwWorkSpace[FTW_WORK_SPACE_SIZE]. > // > - FtwDevice = AllocateZeroPool (sizeof (EFI_FTW_DEVICE) + PcdGet32 > (PcdFlashNvStorageFtwWorkingSize)); > + FtwDevice = AllocateZeroPool (sizeof (EFI_FTW_DEVICE) + FtwWorkingSize); > if (FtwDevice == NULL) { > return EFI_OUT_OF_RESOURCES; > } > > + FtwDevice->WorkSpaceLength = FtwWorkingSize; > + > + if (!EFI_ERROR (VariableFlashInfoStatus)) { > + // This driver currently assumes the size will be UINT32 so only accept "the size will be UINT32", UINTN to be more precise. > + // that for now. > + Status = SafeUint64ToUintn (VariableFlashInfo->FtwSpareLength, > &FtwDevice->SpareAreaLength); > + if (EFI_ERROR (Status)) { > + ASSERT_EFI_ERROR (Status); > + FtwDevice->SpareAreaLength = 0; > + } > + > + FtwDevice->SpareAreaAddress = VariableFlashInfo->FtwSpareBaseAddress; > + FtwDevice->WorkSpaceAddress = VariableFlashInfo- > >FtwWorkingBaseAddress; > + } > + > + if (FtwDevice->SpareAreaLength == 0) { > + FtwDevice->SpareAreaLength = (UINTN)PcdGet32 > (PcdFlashNvStorageFtwSpareSize); > + } > + > + if (FtwDevice->SpareAreaAddress == 0) { > + FtwDevice->SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 > (PcdFlashNvStorageFtwSpareBase64); > + if (FtwDevice->SpareAreaAddress == 0) { > + FtwDevice->SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 > (PcdFlashNvStorageFtwSpareBase); > + } > + } > + > + if (FtwDevice->WorkSpaceAddress == 0) { > + FtwDevice->WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 > (PcdFlashNvStorageFtwWorkingBase64); > + if (FtwDevice->WorkSpaceAddress == 0) { > + FtwDevice->WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 > (PcdFlashNvStorageFtwWorkingBase); > + } > + } > + > // > // Initialize other parameters, and set WorkSpace as FTW_ERASED_BYTE. > // > - FtwDevice->WorkSpaceLength = (UINTN)PcdGet32 > (PcdFlashNvStorageFtwWorkingSize); > - FtwDevice->SpareAreaLength = (UINTN)PcdGet32 > (PcdFlashNvStorageFtwSpareSize); > if ((FtwDevice->WorkSpaceLength == 0) || (FtwDevice->SpareAreaLength == 0)) > { > DEBUG ((DEBUG_ERROR, "Ftw: Workspace or Spare block does not exist!\n")); > FreePool (FtwDevice); > @@ -1015,16 +1106,6 @@ InitFtwDevice ( > FtwDevice->FtwWorkSpaceLba = (EFI_LBA)(-1); > FtwDevice->FtwSpareLba = (EFI_LBA)(-1); > > - FtwDevice->WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 > (PcdFlashNvStorageFtwWorkingBase64); > - if (FtwDevice->WorkSpaceAddress == 0) { > - FtwDevice->WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 > (PcdFlashNvStorageFtwWorkingBase); > - } > - > - FtwDevice->SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 > (PcdFlashNvStorageFtwSpareBase64); > - if (FtwDevice->SpareAreaAddress == 0) { > - FtwDevice->SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 > (PcdFlashNvStorageFtwSpareBase); > - } > - > *FtwData = FtwDevice; > return EFI_SUCCESS; > } > @@ -1277,7 +1358,7 @@ InitFtwProtocol ( > FtwDevice->FtwLastWriteHeader = NULL; > FtwDevice->FtwLastWriteRecord = NULL; > > - InitializeLocalWorkSpaceHeader (); > + InitializeLocalWorkSpaceHeader (FtwDevice->WorkSpaceLength); > > // > // Refresh the working space data from working block > diff --git > a/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > index 61e7a92ccea1..fd563643eb63 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c > @@ -16,10 +16,13 @@ EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER > mWorkingBlockHeader = { ZERO_GUID, 0, 0 > > Since Signature and WriteQueueSize have been known, Crc can be calculated > out, > then the work space header will be fixed. > + > + @param[in] WorkSpaceLength Length in bytes of the FTW workspace area. > + > **/ > VOID > InitializeLocalWorkSpaceHeader ( > - VOID > + IN UINTN WorkSpaceLength > ) > { > // > @@ -46,7 +49,7 @@ InitializeLocalWorkSpaceHeader ( > &gEdkiiWorkingBlockSignatureGuid, > sizeof (EFI_GUID) > ); > - mWorkingBlockHeader.WriteQueueSize = PcdGet32 > (PcdFlashNvStorageFtwWorkingSize) - sizeof > (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER); > + mWorkingBlockHeader.WriteQueueSize = WorkSpaceLength - sizeof > (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER); > > // > // Crc is calculated with all the fields except Crc and STATE, so leave > them as > FTW_ERASED_BYTE. > diff --git > a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c > b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c > index 15543f12ed29..7abf8f72d569 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c > +++ b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c > @@ -11,11 +11,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > > #include <Guid/SystemNvDataGuid.h> > #include <Guid/FaultTolerantWrite.h> > +#include <Guid/VariableFlashInfo.h> > #include <Library/PeiServicesLib.h> > #include <Library/PcdLib.h> > #include <Library/DebugLib.h> > #include <Library/BaseMemoryLib.h> > #include <Library/HobLib.h> > +#include <Library/SafeIntLib.h> > > EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = { > (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), > @@ -186,6 +188,48 @@ IsValidWorkSpace ( > return TRUE; > } > > +/** > + Get the HOB that contains variable flash information. > + > + @param[out] VariableFlashInfo Pointer to a pointer to set to the variable > flash information structure. > + > + @retval EFI_SUCCESS Variable flash information was found > successfully. > + @retval EFI_INVALID_PARAMETER The VariableFlashInfo pointer given is > NULL. > + @retval EFI_NOT_FOUND Variable flash information could not be > found. > + > +**/ > +EFI_STATUS > +GetVariableFlashInfo ( > + OUT VARIABLE_FLASH_INFO **VariableFlashInfo > + ) > +{ > + EFI_HOB_GUID_TYPE *GuidHob; > + > + if (VariableFlashInfo == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + GuidHob = GetFirstGuidHob (&gVariableFlashInfoHobGuid); > + if (GuidHob == NULL) { > + return EFI_NOT_FOUND; > + } > + > + *VariableFlashInfo = GET_GUID_HOB_DATA (GuidHob); > + > + // > + // Assert if more than one variable flash information HOB is present. > + // > + DEBUG_CODE ( > + if ((GetNextGuidHob (&gVariableFlashInfoHobGuid, GET_NEXT_HOB > (GuidHob)) != NULL)) { > + DEBUG ((DEBUG_ERROR, "ERROR: Found two variable flash information > HOBs\n")); > + ASSERT (FALSE); > + } > + > + ); > + > + return EFI_SUCCESS; > +} > + > /** > Main entry for Fault Tolerant Write PEIM. > > @@ -207,6 +251,7 @@ PeimFaultTolerantWriteInitialize ( > EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *FtwWorkingBlockHeader; > EFI_FAULT_TOLERANT_WRITE_HEADER *FtwLastWriteHeader; > EFI_FAULT_TOLERANT_WRITE_RECORD *FtwLastWriteRecord; > + VARIABLE_FLASH_INFO *VariableFlashInfo; > EFI_PHYSICAL_ADDRESS WorkSpaceAddress; > UINTN WorkSpaceLength; > EFI_PHYSICAL_ADDRESS SpareAreaAddress; > @@ -218,19 +263,52 @@ PeimFaultTolerantWriteInitialize ( > FtwLastWriteHeader = NULL; > FtwLastWriteRecord = NULL; > > - WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 > (PcdFlashNvStorageFtwWorkingBase64); > - if (WorkSpaceAddress == 0) { > - WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 > (PcdFlashNvStorageFtwWorkingBase); > + SpareAreaAddress = 0; > + SpareAreaLength = 0; > + WorkSpaceAddress = 0; > + WorkSpaceLength = 0; > + > + Status = GetVariableFlashInfo (&VariableFlashInfo); > + if (!EFI_ERROR (Status)) { > + // This driver currently assumes the size will be UINT32 so only accept "the size will be UINT32", UINTN to be more precise. Best Regards, Hao Wu > + // that for now. > + Status = SafeUint64ToUintn (VariableFlashInfo->FtwSpareLength, > &SpareAreaLength); > + if (EFI_ERROR (Status)) { > + ASSERT_EFI_ERROR (Status); > + SpareAreaLength = 0; > + } > + > + Status = SafeUint64ToUintn (VariableFlashInfo->FtwWorkingLength, > &WorkSpaceLength); > + if (EFI_ERROR (Status)) { > + ASSERT_EFI_ERROR (Status); > + WorkSpaceLength = 0; > + } > + > + SpareAreaAddress = VariableFlashInfo->FtwSpareBaseAddress; > + WorkSpaceAddress = VariableFlashInfo->FtwWorkingBaseAddress; > } > > - WorkSpaceLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwWorkingSize); > + if (SpareAreaLength == 0) { > + SpareAreaLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwSpareSize); > + } > + > + if (WorkSpaceLength == 0) { > + WorkSpaceLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwWorkingSize); > + } > > - SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 > (PcdFlashNvStorageFtwSpareBase64); > if (SpareAreaAddress == 0) { > - SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 > (PcdFlashNvStorageFtwSpareBase); > + SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 > (PcdFlashNvStorageFtwSpareBase64); > + if (SpareAreaAddress == 0) { > + SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 > (PcdFlashNvStorageFtwSpareBase); > + } > } > > - SpareAreaLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwSpareSize); > + if (WorkSpaceAddress == 0) { > + WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 > (PcdFlashNvStorageFtwWorkingBase64); > + if (WorkSpaceAddress == 0) { > + WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 > (PcdFlashNvStorageFtwWorkingBase); > + } > + } > > // > // The address of FTW working base and spare base must not be 0. > diff --git > a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h > index c14e47b5c7b2..40ef44c069eb 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h > +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.h > @@ -14,11 +14,14 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include <PiDxe.h> > > #include <Guid/SystemNvDataGuid.h> > +#include <Guid/VariableFlashInfo.h> > #include <Guid/ZeroGuid.h> > #include <Protocol/FaultTolerantWrite.h> > #include <Protocol/FirmwareVolumeBlock.h> > #include <Protocol/SwapAddressRange.h> > > +#include <Library/HobLib.h> > +#include <Library/SafeIntLib.h> > #include <Library/PcdLib.h> > #include <Library/DebugLib.h> > #include <Library/UefiLib.h> > @@ -706,12 +709,16 @@ InitFtwProtocol ( > /** > Initialize a local work space header. > > + > Since Signature and WriteQueueSize have been known, Crc can be calculated > out, > then the work space header will be fixed. > + > + @param[in] WorkSpaceLength Length in bytes of the FTW workspace area. > + > **/ > VOID > InitializeLocalWorkSpaceHeader ( > - VOID > + IN UINTN WorkSpaceLength > ); > > /** > diff --git > a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > index 96165614d178..923f0231a047 100644 > --- > a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > +++ > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > @@ -46,6 +46,8 @@ [LibraryClasses] > UefiLib > PcdLib > ReportStatusCodeLib > + HobLib > + SafeIntLib > > [Guids] > # > @@ -54,6 +56,7 @@ [Guids] > ## CONSUMES ## GUID > ## PRODUCES ## GUID > gEdkiiWorkingBlockSignatureGuid > + gVariableFlashInfoHobGuid ## CONSUMES ## HOB > > [Protocols] > gEfiSwapAddressRangeProtocolGuid | > gEfiMdeModulePkgTokenSpaceGuid.PcdFullFtwServiceEnable ## > SOMETIMES_CONSUMES > @@ -67,11 +70,11 @@ [FeaturePcd] > > [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## > SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 > ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 > ## SOMETIMES_CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > SOMETIMES_CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## > SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## > SOMETIMES_CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > SOMETIMES_CONSUMES > > # > # gBS->CalculateCrc32() is consumed in EntryPoint. > diff --git > a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf > index 8cc6028470d8..bbed17e4b611 100644 > --- > a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf > +++ > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf > @@ -52,6 +52,8 @@ [LibraryClasses] > ReportStatusCodeLib > SmmMemLib > BaseLib > + HobLib > + SafeIntLib > > [Guids] > # > @@ -60,6 +62,7 @@ [Guids] > ## CONSUMES ## GUID > ## PRODUCES ## GUID > gEdkiiWorkingBlockSignatureGuid > + gVariableFlashInfoHobGuid ## CONSUMES ## HOB > > [Protocols] > gEfiSmmSwapAddressRangeProtocolGuid | > gEfiMdeModulePkgTokenSpaceGuid.PcdFullFtwServiceEnable ## > SOMETIMES_CONSUMES > @@ -76,11 +79,11 @@ [FeaturePcd] > > [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## > SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 > ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 > ## SOMETIMES_CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > SOMETIMES_CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## > SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## > SOMETIMES_CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > SOMETIMES_CONSUMES > > # > # gBS->CalculateCrc32() is consumed in EntryPoint. > diff --git > a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandal > oneMm.inf > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandal > oneMm.inf > index d0fab7d9414f..0b394b04da7b 100644 > --- > a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandal > oneMm.inf > +++ > b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandal > oneMm.inf > @@ -46,10 +46,12 @@ [LibraryClasses] > BaseLib > BaseMemoryLib > DebugLib > + HobLib > MemoryAllocationLib > MmServicesTableLib > PcdLib > ReportStatusCodeLib > + SafeIntLib > StandaloneMmDriverEntryPoint > > [Guids] > @@ -59,6 +61,7 @@ [Guids] > ## CONSUMES ## GUID > ## PRODUCES ## GUID > gEdkiiWorkingBlockSignatureGuid > + gVariableFlashInfoHobGuid ## CONSUMES ## HOB > > [Protocols] > gEfiSmmSwapAddressRangeProtocolGuid | > gEfiMdeModulePkgTokenSpaceGuid.PcdFullFtwServiceEnable ## > SOMETIMES_CONSUMES > @@ -75,11 +78,11 @@ [FeaturePcd] > > [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## > SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 > ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 > ## SOMETIMES_CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > SOMETIMES_CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## > SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## > SOMETIMES_CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > SOMETIMES_CONSUMES > > [Depex] > TRUE > diff --git > a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > index f90892ad4493..ff9d53bf7040 100644 > --- a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > +++ > b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > @@ -39,6 +39,7 @@ [LibraryClasses] > HobLib > BaseMemoryLib > PcdLib > + SafeIntLib > > [Guids] > ## SOMETIMES_PRODUCES ## HOB > @@ -46,14 +47,15 @@ [Guids] > gEdkiiFaultTolerantWriteGuid > gEdkiiWorkingBlockSignatureGuid ## SOMETIMES_CONSUMES ## > GUID > gEfiSystemNvDataFvGuid ## SOMETIMES_CONSUMES ## > GUID > + gVariableFlashInfoHobGuid ## CONSUMES ## > HOB > > [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase ## > SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 > ## CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 > ## SOMETIMES_CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ## > SOMETIMES_CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase ## > SOMETIMES_CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## > CONSUMES > - gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 ## > SOMETIMES_CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize ## > SOMETIMES_CONSUMES > > [Depex] > TRUE > -- > 2.28.0.windows.1 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#88464): https://edk2.groups.io/g/devel/message/88464 > Mute This Topic: https://groups.io/mt/90293667/1768737 > Group Owner: devel+ow...@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [hao.a...@intel.com] > -=-=-=-=-=-= > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#88503): https://edk2.groups.io/g/devel/message/88503 Mute This Topic: https://groups.io/mt/90293667/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-