[edk2-devel] [edk2-platforms][PATCH v4 25/41] MinPlatformPkg: Remove SpiFvbService modules

Chiu, Chasel chasel.chiu at intel.com
Mon Jun 28 01:37:45 UTC 2021


Reviewed-by: Chasel Chiu <chasel.chiu at intel.com>



> -----Original Message-----
> From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Michael
> Kubacki
> Sent: Saturday, June 26, 2021 5:21 AM
> To: devel at edk2.groups.io
> Cc: Chiu, Chasel <chasel.chiu at intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone at intel.com>; Liming Gao <gaoliming at byosoft.com.cn>;
> Dong, Eric <eric.dong at intel.com>
> Subject: [edk2-devel] [edk2-platforms][PATCH v4 25/41] MinPlatformPkg:
> Remove SpiFvbService modules
> 
> From: Michael Kubacki <michael.kubacki at microsoft.com>
> 
> REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3307
> 
> SpiFvbServiceSmm and SpiFvbServiceStandaloneMm have moved to
> IntelSiliconPkg.
> 
> Cc: Chasel Chiu <chasel.chiu at intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone at intel.com>
> Cc: Liming Gao <gaoliming at byosoft.com.cn>
> Cc: Eric Dong <eric.dong at intel.com>
> Signed-off-by: Michael Kubacki <michael.kubacki at microsoft.com>
> Reviewed-by: Nate DeSimone <nathaniel.l.desimone at intel.com>
> Reviewed-by: Chasel Chiu <chasel.chiu at intel.com>
> ---
>  Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c                     |  94 -
> -
>  Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c
> | 903 --------------------
>  Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c
> | 271 ------
> 
> Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneM
> m.c   |  32 -
> 
> Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditionalM
> m.c  |  32 -
>  Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h
> | 158 ----
>  Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h
> |  22 -
>  Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf
> |  68 --
> 
> Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneM
> m.inf |  67 --
>  Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc                                |   2 -
>  10 files changed, 1649 deletions(-)
> 
> diff --git a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c
> deleted file mode 100644
> index 7f2678fa9e5a..000000000000
> --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/FvbInfo.c
> +++ /dev/null
> @@ -1,94 +0,0 @@
> -/**@file
> -  Defines data structure that is the volume header found.
> -  These data is intent to decouple FVB driver with FV header.
> -
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> -SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -**/
> -
> -#include "SpiFvbServiceCommon.h"
> -
> -#define FIRMWARE_BLOCK_SIZE         0x10000
> -#define FVB_MEDIA_BLOCK_SIZE        FIRMWARE_BLOCK_SIZE
> -
> -#define NV_STORAGE_BASE_ADDRESS
> FixedPcdGet32(PcdFlashNvStorageVariableBase)
> -#define SYSTEM_NV_BLOCK_NUM
> ((FixedPcdGet32(PcdFlashNvStorageVariableSize)+
> FixedPcdGet32(PcdFlashNvStorageFtwWorkingSize) +
> FixedPcdGet32(PcdFlashNvStorageFtwSpareSize))/ FVB_MEDIA_BLOCK_SIZE)
> -
> -typedef struct {
> -  EFI_PHYSICAL_ADDRESS        BaseAddress;
> -  EFI_FIRMWARE_VOLUME_HEADER  FvbInfo;
> -  EFI_FV_BLOCK_MAP_ENTRY      End[1];
> -} EFI_FVB2_MEDIA_INFO;
> -
> -//
> -// This data structure contains a template of all correct FV headers, which is
> used to restore
> -// Fv header if it's corrupted.
> -//
> -EFI_FVB2_MEDIA_INFO mPlatformFvbMediaInfo[] = {
> -  //
> -  // Systen NvStorage FVB
> -  //
> -  {
> -    NV_STORAGE_BASE_ADDRESS,
> -    {
> -      {0,}, //ZeroVector[16]
> -      EFI_SYSTEM_NV_DATA_FV_GUID,
> -      FVB_MEDIA_BLOCK_SIZE * SYSTEM_NV_BLOCK_NUM,
> -      EFI_FVH_SIGNATURE,
> -      0x0004feff, // check MdePkg/Include/Pi/PiFirmwareVolume.h for details on
> EFI_FVB_ATTRIBUTES_2
> -      sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof
> (EFI_FV_BLOCK_MAP_ENTRY),
> -      0,    //CheckSum which will be calucated dynamically.
> -      0,    //ExtHeaderOffset
> -      {0,}, //Reserved[1]
> -      2,    //Revision
> -      {
> -        {
> -          SYSTEM_NV_BLOCK_NUM,
> -          FVB_MEDIA_BLOCK_SIZE,
> -        }
> -      }
> -    },
> -    {
> -      {
> -        0,
> -        0
> -      }
> -    }
> -  }
> -};
> -
> -EFI_STATUS
> -GetFvbInfo (
> -  IN  EFI_PHYSICAL_ADDRESS         FvBaseAddress,
> -  OUT EFI_FIRMWARE_VOLUME_HEADER   **FvbInfo
> -  )
> -{
> -  UINTN                       Index;
> -  EFI_FIRMWARE_VOLUME_HEADER  *FvHeader;
> -
> -  for (Index = 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof
> (EFI_FVB2_MEDIA_INFO); Index++) {
> -    if (mPlatformFvbMediaInfo[Index].BaseAddress == FvBaseAddress) {
> -      FvHeader = &mPlatformFvbMediaInfo[Index].FvbInfo;
> -
> -      //
> -      // Update the checksum value of FV header.
> -      //
> -      FvHeader->Checksum = CalculateCheckSum16 ( (UINT16 *) FvHeader,
> FvHeader->HeaderLength);
> -
> -      *FvbInfo = FvHeader;
> -
> -      DEBUG ((DEBUG_INFO, "BaseAddr: 0x%lx \n", FvBaseAddress));
> -      DEBUG ((DEBUG_INFO, "FvLength: 0x%lx \n", (*FvbInfo)->FvLength));
> -      DEBUG ((DEBUG_INFO, "HeaderLength: 0x%x \n", (*FvbInfo)-
> >HeaderLength));
> -      DEBUG ((DEBUG_INFO, "Header Checksum: 0x%X\n", (*FvbInfo)-
> >Checksum));
> -      DEBUG ((DEBUG_INFO, "FvBlockMap[0].NumBlocks: 0x%x \n", (*FvbInfo)-
> >BlockMap[0].NumBlocks));
> -      DEBUG ((DEBUG_INFO, "FvBlockMap[0].BlockLength: 0x%x \n", (*FvbInfo)-
> >BlockMap[0].Length));
> -      DEBUG ((DEBUG_INFO, "FvBlockMap[1].NumBlocks: 0x%x \n", (*FvbInfo)-
> >BlockMap[1].NumBlocks));
> -      DEBUG ((DEBUG_INFO, "FvBlockMap[1].BlockLength: 0x%x \n\n",
> (*FvbInfo)->BlockMap[1].Length));
> -
> -      return EFI_SUCCESS;
> -    }
> -  }
> -  return EFI_NOT_FOUND;
> -}
> diff --git
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c
> deleted file mode 100644
> index 113c749d04ff..000000000000
> ---
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.c
> +++ /dev/null
> @@ -1,903 +0,0 @@
> -/** @file
> -  Common driver source for several Serial Flash devices
> -  which are compliant with the Intel(R) Serial Flash Interface Compatibility
> Specification.
> -
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> -SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -**/
> -
> -#include "SpiFvbServiceCommon.h"
> -
> -//
> -// Global variable for this FVB driver  which contains
> -// the private data of all firmware volume block instances
> -//
> -FVB_GLOBAL   mFvbModuleGlobal;
> -
> -//
> -// This platform driver knows there are multiple FVs on FD.
> -// Now we only provide FVs on Variable region and MicorCode region for
> performance issue.
> -//
> -FV_INFO mPlatformFvBaseAddress[] = {
> -  {0, 0}, // {FixedPcdGet32(PcdFlashNvStorageVariableBase),
> FixedPcdGet32(PcdFlashNvStorageVariableSize)},
> -  {0, 0}, // {FixedPcdGet32(PcdFlashFvMicrocodeBase),
> FixedPcdGet32(PcdFlashFvMicrocodeSize)},
> -  {0, 0}
> -};
> -
> -FV_INFO mPlatformDefaultBaseAddress[] = {
> -  {0, 0}, // {FixedPcdGet32(PcdFlashNvStorageVariableBase),
> FixedPcdGet32(PcdFlashNvStorageVariableSize)},
> -  {0, 0}, // {FixedPcdGet32(PcdFlashFvMicrocodeBase),
> FixedPcdGet32(PcdFlashFvMicrocodeSize)},
> -  {0, 0}
> -};
> -
> -FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = {
> -  {
> -    {
> -      HARDWARE_DEVICE_PATH,
> -      HW_MEMMAP_DP,
> -      {
> -        (UINT8)(sizeof (MEMMAP_DEVICE_PATH)),
> -        (UINT8)(sizeof (MEMMAP_DEVICE_PATH) >> 8)
> -      }
> -    },
> -    EfiMemoryMappedIO,
> -    (EFI_PHYSICAL_ADDRESS) 0,
> -    (EFI_PHYSICAL_ADDRESS) 0,
> -  },
> -  {
> -    END_DEVICE_PATH_TYPE,
> -    END_ENTIRE_DEVICE_PATH_SUBTYPE,
> -    {
> -      END_DEVICE_PATH_LENGTH,
> -      0
> -    }
> -  }
> -};
> -
> -FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate = {
> -  {
> -    {
> -      MEDIA_DEVICE_PATH,
> -      MEDIA_PIWG_FW_VOL_DP,
> -      {
> -        (UINT8)(sizeof (MEDIA_FW_VOL_DEVICE_PATH)),
> -        (UINT8)(sizeof (MEDIA_FW_VOL_DEVICE_PATH) >> 8)
> -      }
> -    },
> -    { 0 }
> -  },
> -  {
> -    END_DEVICE_PATH_TYPE,
> -    END_ENTIRE_DEVICE_PATH_SUBTYPE,
> -    {
> -      END_DEVICE_PATH_LENGTH,
> -      0
> -    }
> -  }
> -};
> -
> -//
> -// Template structure used when installing FVB protocol
> -//
> -EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL mFvbProtocolTemplate = {
> -  FvbProtocolGetAttributes,
> -  FvbProtocolSetAttributes,
> -  FvbProtocolGetPhysicalAddress,
> -  FvbProtocolGetBlockSize,
> -  FvbProtocolRead,
> -  FvbProtocolWrite,
> -  FvbProtocolEraseBlocks,
> -  NULL
> -};
> -
> -/**
> -  Get the EFI_FVB_ATTRIBUTES_2 of a FV.
> -
> -  @param[in]  FvbInstance The pointer to the EFI_FVB_INSTANCE.
> -
> -  @return     Attributes of the FV identified by FvbInstance.
> -
> -**/
> -EFI_FVB_ATTRIBUTES_2
> -FvbGetVolumeAttributes (
> -  IN EFI_FVB_INSTANCE         *FvbInstance
> -  )
> -{
> -  return FvbInstance->FvHeader.Attributes;
> -}
> -
> -/**
> -  Retrieves the starting address of an LBA in an FV. It also
> -  return a few other attribut of the FV.
> -
> -  @param[in]  FvbInstance     The pointer to the EFI_FVB_INSTANCE.
> -  @param[in]  Lba             The logical block address
> -  @param[out] LbaAddress      On output, contains the physical starting address
> -                              of the Lba
> -  @param[out] LbaLength       On output, contains the length of the block
> -  @param[out] NumOfBlocks     A pointer to a caller allocated UINTN in which
> the
> -                              number of consecutive blocks starting with Lba is
> -                              returned. All blocks in this range have a size of
> -                              BlockSize
> -
> -  @retval   EFI_SUCCESS Successfully returns
> -  @retval   EFI_INVALID_PARAMETER Instance not found
> -
> -**/
> -EFI_STATUS
> -FvbGetLbaAddress (
> -  IN  EFI_FVB_INSTANCE                    *FvbInstance,
> -  IN  EFI_LBA                             Lba,
> -  OUT UINTN                               *LbaAddress,
> -  OUT UINTN                               *LbaLength,
> -  OUT UINTN                               *NumOfBlocks
> -  )
> -{
> -  UINT32                                  NumBlocks;
> -  UINT32                                  BlockLength;
> -  UINTN                                   Offset;
> -  EFI_LBA                                 StartLba;
> -  EFI_LBA                                 NextLba;
> -  EFI_FV_BLOCK_MAP_ENTRY                  *BlockMap;
> -
> -  StartLba  = 0;
> -  Offset    = 0;
> -  BlockMap  = &(FvbInstance->FvHeader.BlockMap[0]);
> -
> -  //
> -  // Parse the blockmap of the FV to find which map entry the Lba belongs to
> -  //
> -  while (TRUE) {
> -    NumBlocks   = BlockMap->NumBlocks;
> -    BlockLength = BlockMap->Length;
> -
> -    if ( NumBlocks == 0 || BlockLength == 0) {
> -      return EFI_INVALID_PARAMETER;
> -    }
> -
> -    NextLba = StartLba + NumBlocks;
> -
> -    //
> -    // The map entry found
> -    //
> -    if (Lba >= StartLba && Lba < NextLba) {
> -      Offset = Offset + (UINTN)MultU64x32((Lba - StartLba), BlockLength);
> -      if (LbaAddress ) {
> -        *LbaAddress = FvbInstance->FvBase + Offset;
> -      }
> -
> -      if (LbaLength ) {
> -        *LbaLength = BlockLength;
> -      }
> -
> -      if (NumOfBlocks ) {
> -        *NumOfBlocks = (UINTN)(NextLba - Lba);
> -      }
> -      return EFI_SUCCESS;
> -    }
> -
> -    StartLba  = NextLba;
> -    Offset    = Offset + NumBlocks * BlockLength;
> -    BlockMap++;
> -  }
> -}
> -
> -/**
> -  Reads specified number of bytes into a buffer from the specified block.
> -
> -  @param[in]      FvbInstance           The pointer to the EFI_FVB_INSTANCE
> -  @param[in]      Lba                   The logical block address to be read from
> -  @param[in]      BlockOffset           Offset into the block at which to begin
> reading
> -  @param[in]      NumBytes              Pointer that on input contains the total size
> of
> -                                        the buffer. On output, it contains the total number
> -                                        of bytes read
> -  @param[in]      Buffer                Pointer to a caller allocated buffer that will be
> -                                        used to hold the data read
> -
> -
> -  @retval         EFI_SUCCESS           The firmware volume was read successfully
> and
> -                                        contents are in Buffer
> -  @retval         EFI_BAD_BUFFER_SIZE   Read attempted across a LBA boundary.
> On output,
> -                                        NumBytes contains the total number of bytes returned
> -                                        in Buffer
> -  @retval         EFI_ACCESS_DENIED     The firmware volume is in the
> ReadDisabled state
> -  @retval         EFI_DEVICE_ERROR      The block device is not functioning
> correctly and
> -                                        could not be read
> -  @retval         EFI_INVALID_PARAMETER Instance not found, or NumBytes,
> Buffer are NULL
> -
> -**/
> -EFI_STATUS
> -FvbReadBlock (
> -  IN EFI_FVB_INSTANCE                     *FvbInstance,
> -  IN EFI_LBA                              Lba,
> -  IN UINTN                                BlockOffset,
> -  IN OUT UINTN                            *NumBytes,
> -  IN UINT8                                *Buffer
> -  )
> -{
> -  EFI_FVB_ATTRIBUTES_2                    Attributes;
> -  UINTN                                   LbaAddress;
> -  UINTN                                   LbaLength;
> -  EFI_STATUS                              Status;
> -  BOOLEAN                                 BadBufferSize = FALSE;
> -
> -  if ((NumBytes == NULL) || (Buffer == NULL)) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -  if (*NumBytes == 0) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  Status = FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength,
> NULL);
> -  if (EFI_ERROR(Status)) {
> -    return Status;
> -  }
> -
> -  Attributes = FvbGetVolumeAttributes (FvbInstance);
> -
> -  if ((Attributes & EFI_FVB2_READ_STATUS) == 0) {
> -    return EFI_ACCESS_DENIED;
> -  }
> -
> -  if (BlockOffset > LbaLength) {
> -   return EFI_INVALID_PARAMETER;
> -  }
> -
> -  if (LbaLength < (*NumBytes + BlockOffset)) {
> -    DEBUG ((DEBUG_INFO,
> -      "FvReadBlock: Reducing Numbytes from 0x%x to 0x%x\n",
> -      *NumBytes,
> -      (UINT32)(LbaLength - BlockOffset))
> -      );
> -    *NumBytes     = (UINT32) (LbaLength - BlockOffset);
> -    BadBufferSize = TRUE;
> -  }
> -
> -  Status = SpiFlashRead (LbaAddress + BlockOffset, (UINT32 *)NumBytes,
> Buffer);
> -
> -  if (!EFI_ERROR (Status) && BadBufferSize) {
> -    return EFI_BAD_BUFFER_SIZE;
> -  } else {
> -    return Status;
> -  }
> -}
> -
> -/**
> -  Writes specified number of bytes from the input buffer to the block.
> -
> -  @param[in]  FvbInstance           The pointer to the EFI_FVB_INSTANCE
> -  @param[in]  Lba                   The starting logical block index to write to
> -  @param[in]  BlockOffset           Offset into the block at which to begin writing
> -  @param[in]  NumBytes              Pointer that on input contains the total size of
> -                                    the buffer. On output, it contains the total number
> -                                    of bytes actually written
> -  @param[in]  Buffer                Pointer to a caller allocated buffer that contains
> -                                    the source for the write
> -  @retval     EFI_SUCCESS           The firmware volume was written successfully
> -  @retval     EFI_BAD_BUFFER_SIZE   Write attempted across a LBA boundary.
> On output,
> -                                    NumBytes contains the total number of bytes
> -                                    actually written
> -  @retval     EFI_ACCESS_DENIED     The firmware volume is in the WriteDisabled
> state
> -  @retval     EFI_DEVICE_ERROR      The block device is not functioning correctly
> and
> -                                    could not be written
> -  @retval     EFI_INVALID_PARAMETER Instance not found, or NumBytes, Buffer
> are NULL
> -
> -**/
> -EFI_STATUS
> -FvbWriteBlock (
> -  IN EFI_FVB_INSTANCE                     *FvbInstance,
> -  IN EFI_LBA                              Lba,
> -  IN UINTN                                BlockOffset,
> -  IN OUT UINTN                            *NumBytes,
> -  IN UINT8                                *Buffer
> -  )
> -{
> -  EFI_FVB_ATTRIBUTES_2                    Attributes;
> -  UINTN                                   LbaAddress;
> -  UINTN                                   LbaLength;
> -  EFI_STATUS                              Status;
> -  BOOLEAN                                 BadBufferSize = FALSE;
> -
> -  if ((NumBytes == NULL) || (Buffer == NULL)) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -  if (*NumBytes == 0) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  Status = FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength,
> NULL);
> -  if (EFI_ERROR(Status)) {
> -    return Status;
> -  }
> -
> -  //
> -  // Check if the FV is write enabled
> -  //
> -  Attributes = FvbGetVolumeAttributes (FvbInstance);
> -  if ((Attributes & EFI_FVB2_WRITE_STATUS) == 0)  {
> -    return EFI_ACCESS_DENIED;
> -  }
> -
> -  //
> -  // Perform boundary checks and adjust NumBytes
> -  //
> -  if (BlockOffset > LbaLength) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  if (LbaLength < (*NumBytes + BlockOffset)) {
> -    DEBUG ((DEBUG_INFO,
> -      "FvWriteBlock: Reducing Numbytes from 0x%x to 0x%x\n",
> -      *NumBytes,
> -      (UINT32)(LbaLength - BlockOffset))
> -      );
> -    *NumBytes     = (UINT32) (LbaLength - BlockOffset);
> -    BadBufferSize = TRUE;
> -  }
> -
> -  Status = SpiFlashWrite (LbaAddress + BlockOffset, (UINT32 *)NumBytes,
> Buffer);
> -  if (EFI_ERROR (Status)) {
> -    return Status;
> -  }
> -
> -  Status = SpiFlashLock ();
> -  if (EFI_ERROR (Status)) {
> -    return Status;
> -  }
> -
> -  WriteBackInvalidateDataCacheRange ((VOID *) (LbaAddress + BlockOffset),
> *NumBytes);
> -
> -  if (!EFI_ERROR (Status) && BadBufferSize) {
> -    return EFI_BAD_BUFFER_SIZE;
> -  } else {
> -    return Status;
> -  }
> -}
> -
> -
> -
> -/**
> -  Erases and initializes a firmware volume block.
> -
> -  @param[in]    FvbInstance       The pointer to the EFI_FVB_INSTANCE
> -  @param[in]    Lba               The logical block index to be erased
> -
> -  @retval   EFI_SUCCESS           The erase request was successfully completed
> -  @retval   EFI_ACCESS_DENIED     The firmware volume is in the WriteDisabled
> state
> -  @retval   EFI_DEVICE_ERROR      The block device is not functioning correctly
> and
> -                                  could not be written. Firmware device may have been
> -                                  partially erased
> -  @retval   EFI_INVALID_PARAMETER Instance not found
> -
> -**/
> -EFI_STATUS
> -FvbEraseBlock (
> -  IN EFI_FVB_INSTANCE           *FvbInstance,
> -  IN EFI_LBA                    Lba
> -  )
> -{
> -
> -  EFI_FVB_ATTRIBUTES_2                    Attributes;
> -  UINTN                                   LbaAddress;
> -  UINTN                                   LbaLength;
> -  EFI_STATUS                              Status;
> -
> -  //
> -  // Check if the FV is write enabled
> -  //
> -  Attributes = FvbGetVolumeAttributes (FvbInstance);
> -
> -  if( (Attributes & EFI_FVB2_WRITE_STATUS) == 0)  {
> -    return EFI_ACCESS_DENIED;
> -  }
> -
> -  //
> -  // Get the starting address of the block for erase.
> -  //
> -  Status = FvbGetLbaAddress (FvbInstance, Lba, &LbaAddress, &LbaLength,
> NULL);
> -  if (EFI_ERROR(Status)) {
> -    return Status;
> -  }
> -
> -  Status = SpiFlashBlockErase (LbaAddress, &LbaLength);
> -  if (EFI_ERROR (Status)) {
> -    return Status;
> -  }
> -
> -  Status = SpiFlashLock ();
> -  if (EFI_ERROR (Status)) {
> -    return Status;
> -  }
> -
> -  WriteBackInvalidateDataCacheRange ((VOID *) LbaAddress, LbaLength);
> -
> -  return Status;
> -}
> -
> -/**
> -  Modifies the current settings of the firmware volume according to the
> -  input parameter, and returns the new setting of the volume
> -
> -  @param[in]  FvbInstance           The pointer to the EFI_FVB_INSTANCE.
> -  @param[in]  Attributes            On input, it is a pointer to
> EFI_FVB_ATTRIBUTES_2
> -                                    containing the desired firmware volume settings.
> -                                    On successful return, it contains the new settings
> -                                    of the firmware volume
> -
> -  @retval     EFI_SUCCESS           Successfully returns
> -  @retval     EFI_ACCESS_DENIED     The volume setting is locked and cannot be
> modified
> -  @retval     EFI_INVALID_PARAMETER Instance not found, or The attributes
> requested are
> -                                    in conflict with the capabilities as declared in the
> -                                    firmware volume header
> -
> -**/
> -EFI_STATUS
> -FvbSetVolumeAttributes (
> -  IN EFI_FVB_INSTANCE                     *FvbInstance,
> -  IN OUT EFI_FVB_ATTRIBUTES_2             *Attributes
> -  )
> -{
> -  EFI_FVB_ATTRIBUTES_2                      OldAttributes;
> -  EFI_FVB_ATTRIBUTES_2                      *AttribPtr;
> -  EFI_FVB_ATTRIBUTES_2                      UnchangedAttributes;
> -  UINT32                                    Capabilities;
> -  UINT32                                    OldStatus, NewStatus;
> -
> -  AttribPtr     = (EFI_FVB_ATTRIBUTES_2 *) &(FvbInstance->FvHeader.Attributes);
> -  OldAttributes = *AttribPtr;
> -  Capabilities  = OldAttributes & EFI_FVB2_CAPABILITIES;
> -  OldStatus     = OldAttributes & EFI_FVB2_STATUS;
> -  NewStatus     = *Attributes & EFI_FVB2_STATUS;
> -
> -  UnchangedAttributes = EFI_FVB2_READ_DISABLED_CAP  | \
> -                        EFI_FVB2_READ_ENABLED_CAP   | \
> -                        EFI_FVB2_WRITE_DISABLED_CAP | \
> -                        EFI_FVB2_WRITE_ENABLED_CAP  | \
> -                        EFI_FVB2_LOCK_CAP           | \
> -                        EFI_FVB2_STICKY_WRITE       | \
> -                        EFI_FVB2_MEMORY_MAPPED      | \
> -                        EFI_FVB2_ERASE_POLARITY     | \
> -                        EFI_FVB2_READ_LOCK_CAP      | \
> -                        EFI_FVB2_WRITE_LOCK_CAP     | \
> -                        EFI_FVB2_ALIGNMENT;
> -
> -  //
> -  // Some attributes of FV is read only can *not* be set
> -  //
> -  if ((OldAttributes & UnchangedAttributes) ^ (*Attributes &
> UnchangedAttributes)) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  //
> -  // If firmware volume is locked, no status bit can be updated
> -  //
> -  if ( OldAttributes & EFI_FVB2_LOCK_STATUS ) {
> -    if ( OldStatus ^ NewStatus ) {
> -      return EFI_ACCESS_DENIED;
> -    }
> -  }
> -
> -  //
> -  // Test read disable
> -  //
> -  if ((Capabilities & EFI_FVB2_READ_DISABLED_CAP) == 0) {
> -    if ((NewStatus & EFI_FVB2_READ_STATUS) == 0) {
> -      return EFI_INVALID_PARAMETER;
> -    }
> -  }
> -
> -  //
> -  // Test read enable
> -  //
> -  if ((Capabilities & EFI_FVB2_READ_ENABLED_CAP) == 0) {
> -    if (NewStatus & EFI_FVB2_READ_STATUS) {
> -      return EFI_INVALID_PARAMETER;
> -    }
> -  }
> -
> -  //
> -  // Test write disable
> -  //
> -  if ((Capabilities & EFI_FVB2_WRITE_DISABLED_CAP) == 0) {
> -    if ((NewStatus & EFI_FVB2_WRITE_STATUS) == 0) {
> -      return EFI_INVALID_PARAMETER;
> -    }
> -  }
> -
> -  //
> -  // Test write enable
> -  //
> -  if ((Capabilities & EFI_FVB2_WRITE_ENABLED_CAP) == 0) {
> -    if (NewStatus & EFI_FVB2_WRITE_STATUS) {
> -      return EFI_INVALID_PARAMETER;
> -    }
> -  }
> -
> -  //
> -  // Test lock
> -  //
> -  if ((Capabilities & EFI_FVB2_LOCK_CAP) == 0) {
> -    if (NewStatus & EFI_FVB2_LOCK_STATUS) {
> -      return EFI_INVALID_PARAMETER;
> -    }
> -  }
> -
> -  *AttribPtr  = (*AttribPtr) & (0xFFFFFFFF & (~EFI_FVB2_STATUS));
> -  *AttribPtr  = (*AttribPtr) | NewStatus;
> -  *Attributes = *AttribPtr;
> -
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  Check the integrity of firmware volume header
> -
> -  @param[in]  FvHeader   A pointer to a firmware volume header
> -
> -  @retval     TRUE          The firmware volume is consistent
> -  @retval     FALSE         The firmware volume has corrupted.
> -
> -**/
> -BOOLEAN
> -IsFvHeaderValid (
> -  IN       EFI_PHYSICAL_ADDRESS          FvBase,
> -  IN CONST EFI_FIRMWARE_VOLUME_HEADER    *FvHeader
> -  )
> -{
> -  if (FvBase == PcdGet32(PcdFlashNvStorageVariableBase)) {
> -    if (CompareMem (&FvHeader->FileSystemGuid, &gEfiSystemNvDataFvGuid,
> sizeof(EFI_GUID)) != 0 ) {
> -      return FALSE;
> -    }
> -  } else {
> -    if (CompareMem (&FvHeader->FileSystemGuid,
> &gEfiFirmwareFileSystem2Guid, sizeof(EFI_GUID)) != 0 ) {
> -      return FALSE;
> -    }
> -  }
> -  if ( (FvHeader->Revision != EFI_FVH_REVISION)   ||
> -       (FvHeader->Signature != EFI_FVH_SIGNATURE) ||
> -       (FvHeader->FvLength == ((UINTN) -1))       ||
> -       ((FvHeader->HeaderLength & 0x01 ) !=0) )  {
> -    return FALSE;
> -  }
> -
> -  if (CalculateCheckSum16 ((UINT16 *) FvHeader, FvHeader->HeaderLength) != 0)
> {
> -    return FALSE;
> -  }
> -
> -  return TRUE;
> -}
> -
> -//
> -// FVB protocol APIs
> -//
> -
> -/**
> -  Retrieves the physical address of the device.
> -
> -  @param[in]  This    A pointer to EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL.
> -  @param[out] Address Output buffer containing the address.
> -
> -  retval      EFI_SUCCESS The function always return successfully.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolGetPhysicalAddress (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,
> -  OUT EFI_PHYSICAL_ADDRESS                     *Address
> -  )
> -{
> -  EFI_FVB_INSTANCE      *FvbInstance;
> -
> -  FvbInstance = FVB_INSTANCE_FROM_THIS (This);
> -
> -  *Address = FvbInstance->FvBase;
> -
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  Retrieve the size of a logical block
> -
> -  @param[in]  This        Calling context
> -  @param[in]  Lba         Indicates which block to return the size for.
> -  @param[out] BlockSize   A pointer to a caller allocated UINTN in which
> -                          the size of the block is returned
> -  @param[out] NumOfBlocks A pointer to a caller allocated UINTN in which the
> -                          number of consecutive blocks starting with Lba is
> -                          returned. All blocks in this range have a size of
> -                          BlockSize
> -
> -  @retval     EFI_SUCCESS The function always return successfully.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolGetBlockSize (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,
> -  IN  EFI_LBA                                  Lba,
> -  OUT UINTN                                    *BlockSize,
> -  OUT UINTN                                    *NumOfBlocks
> -  )
> -{
> -  EFI_FVB_INSTANCE                 *FvbInstance;
> -
> -  FvbInstance = FVB_INSTANCE_FROM_THIS (This);
> -
> -  DEBUG((DEBUG_INFO,
> -    "FvbProtocolGetBlockSize: Lba: 0x%lx BlockSize: 0x%x NumOfBlocks:
> 0x%x\n",
> -    Lba,
> -    BlockSize,
> -    NumOfBlocks)
> -    );
> -
> -  return FvbGetLbaAddress (
> -           FvbInstance,
> -           Lba,
> -           NULL,
> -           BlockSize,
> -           NumOfBlocks
> -           );
> -}
> -
> -/**
> -  Retrieves Volume attributes.  No polarity translations are done.
> -
> -  @param[in]    This        Calling context
> -  @param[out]   Attributes  Output buffer which contains attributes
> -
> -  @retval       EFI_SUCCESS The function always return successfully.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolGetAttributes (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
> -  OUT EFI_FVB_ATTRIBUTES_2                *Attributes
> -  )
> -{
> -  EFI_FVB_INSTANCE                 *FvbInstance;
> -
> -  FvbInstance = FVB_INSTANCE_FROM_THIS (This);
> -
> -  *Attributes = FvbGetVolumeAttributes (FvbInstance);
> -
> -  DEBUG ((DEBUG_INFO,
> -    "FvbProtocolGetAttributes: This: 0x%x Attributes: 0x%x\n",
> -    This,
> -    *Attributes)
> -    );
> -
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  Sets Volume attributes. No polarity translations are done.
> -
> -  @param[in]  This        Calling context
> -  @param[out] Attributes  Output buffer which contains attributes
> -
> -  @retval     EFI_SUCCESS The function always return successfully.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolSetAttributes (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
> -  IN OUT EFI_FVB_ATTRIBUTES_2                   *Attributes
> -  )
> -{
> -  EFI_STATUS                       Status;
> -  EFI_FVB_INSTANCE                 *FvbInstance;
> -
> -  DEBUG((DEBUG_INFO,
> -    "FvbProtocolSetAttributes: Before SET -  This: 0x%x Attributes: 0x%x\n",
> -    This,
> -    *Attributes)
> -    );
> -
> -  FvbInstance  = FVB_INSTANCE_FROM_THIS (This);
> -
> -  Status = FvbSetVolumeAttributes (FvbInstance, Attributes);
> -
> -  DEBUG((DEBUG_INFO,
> -    "FvbProtocolSetAttributes: After SET -  This: 0x%x Attributes: 0x%x\n",
> -    This,
> -    *Attributes)
> -    );
> -
> -  return Status;
> -}
> -
> -/**
> -  The EraseBlock() function erases one or more blocks as denoted by the
> -  variable argument list. The entire parameter list of blocks must be verified
> -  prior to erasing any blocks.  If a block is requested that does not exist
> -  within the associated firmware volume (it has a larger index than the last
> -  block of the firmware volume), the EraseBlock() function must return
> -  EFI_INVALID_PARAMETER without modifying the contents of the firmware
> volume.
> -
> -  @param[in] This         Calling context
> -  @param[in] ...          Starting LBA followed by Number of Lba to erase.
> -                          a -1 to terminate the list.
> -
> -  @retval EFI_SUCCESS       The erase request was successfully completed
> -  @retval EFI_ACCESS_DENIED The firmware volume is in the WriteDisabled
> state
> -  @retval EFI_DEVICE_ERROR  The block device is not functioning correctly and
> -                            could not be written. Firmware device may have been
> -                            partially erased
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolEraseBlocks (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    *This,
> -  ...
> -  )
> -{
> -  EFI_FVB_INSTANCE                      *FvbInstance;
> -  UINTN                                 NumOfBlocks;
> -  VA_LIST                               Args;
> -  EFI_LBA                               StartingLba;
> -  UINTN                                 NumOfLba;
> -  EFI_STATUS                            Status;
> -
> -  DEBUG((DEBUG_INFO, "FvbProtocolEraseBlocks: \n"));
> -
> -  FvbInstance  = FVB_INSTANCE_FROM_THIS (This);
> -
> -  NumOfBlocks = FvbInstance->NumOfBlocks;
> -
> -  VA_START (Args, This);
> -
> -  do {
> -    StartingLba = VA_ARG (Args, EFI_LBA);
> -    if ( StartingLba == EFI_LBA_LIST_TERMINATOR ) {
> -      break;
> -    }
> -
> -    NumOfLba = VA_ARG (Args, UINT32);
> -
> -    //
> -    // Check input parameters
> -    //
> -    if (NumOfLba == 0) {
> -      VA_END (Args);
> -      return EFI_INVALID_PARAMETER;
> -    }
> -
> -    if ( ( StartingLba + NumOfLba ) > NumOfBlocks ) {
> -      return EFI_INVALID_PARAMETER;
> -    }
> -  } while ( 1 );
> -
> -  VA_END (Args);
> -
> -  VA_START (Args, This);
> -  do {
> -    StartingLba = VA_ARG (Args, EFI_LBA);
> -    if (StartingLba == EFI_LBA_LIST_TERMINATOR) {
> -      break;
> -    }
> -
> -    NumOfLba = VA_ARG (Args, UINT32);
> -
> -    while ( NumOfLba > 0 ) {
> -      Status = FvbEraseBlock (FvbInstance, StartingLba);
> -      if ( EFI_ERROR(Status)) {
> -        VA_END (Args);
> -        return Status;
> -      }
> -      StartingLba ++;
> -      NumOfLba --;
> -    }
> -
> -  } while ( 1 );
> -
> -  VA_END (Args);
> -
> -  return EFI_SUCCESS;
> -}
> -
> -/**
> -  Writes data beginning at Lba:Offset from FV. The write terminates either
> -  when *NumBytes of data have been written, or when a block boundary is
> -  reached.  *NumBytes is updated to reflect the actual number of bytes
> -  written. The write opertion does not include erase. This routine will
> -  attempt to write only the specified bytes. If the writes do not stick,
> -  it will return an error.
> -
> -  @param[in]      This      Calling context
> -  @param[in]      Lba       Block in which to begin write
> -  @param[in]      Offset    Offset in the block at which to begin write
> -  @param[in,out]  NumBytes  On input, indicates the requested write size. On
> -                            output, indicates the actual number of bytes written
> -  @param[in]      Buffer    Buffer containing source data for the write.
> -
> -  @retval EFI_SUCCESS           The firmware volume was written successfully
> -  @retval EFI_BAD_BUFFER_SIZE   Write attempted across a LBA boundary. On
> output,
> -                                NumBytes contains the total number of bytes
> -                                actually written
> -  @retval EFI_ACCESS_DENIED     The firmware volume is in the WriteDisabled
> state
> -  @retval EFI_DEVICE_ERROR      The block device is not functioning correctly
> and
> -                                could not be written
> -  @retval EFI_INVALID_PARAMETER NumBytes or Buffer are NULL
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolWrite (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
> -  IN EFI_LBA                                    Lba,
> -  IN UINTN                                      Offset,
> -  IN OUT UINTN                                  *NumBytes,
> -  IN UINT8                                      *Buffer
> -  )
> -{
> -  EFI_FVB_INSTANCE        *FvbInstance;
> -
> -  FvbInstance = FVB_INSTANCE_FROM_THIS (This);
> -
> -  DEBUG((DEBUG_INFO,
> -    "FvbProtocolWrite: Lba: 0x%lx Offset: 0x%x NumBytes: 0x%x, Buffer:
> 0x%x\n",
> -    Lba,
> -    Offset,
> -    *NumBytes,
> -    Buffer)
> -    );
> -
> -  return FvbWriteBlock (FvbInstance, Lba, Offset, NumBytes, Buffer);
> -}
> -
> -/**
> -  Reads data beginning at Lba:Offset from FV. The Read terminates either
> -  when *NumBytes of data have been read, or when a block boundary is
> -  reached.  *NumBytes is updated to reflect the actual number of bytes
> -  written. The write opertion does not include erase. This routine will
> -  attempt to write only the specified bytes. If the writes do not stick,
> -  it will return an error.
> -
> -  @param[in]      This      Calling context
> -  @param[in]      Lba       Block in which to begin write
> -  @param[in]      Offset    Offset in the block at which to begin write
> -  @param[in,out]  NumBytes  On input, indicates the requested write size. On
> -                            output, indicates the actual number of bytes written
> -  @param[in]      Buffer    Buffer containing source data for the write.
> -
> -  @retval EFI_SUCCESS           The firmware volume was read successfully and
> -                                contents are in Buffer
> -  @retval EFI_BAD_BUFFER_SIZE   Read attempted across a LBA boundary. On
> output,
> -                                NumBytes contains the total number of bytes returned
> -                                in Buffer
> -  @retval EFI_ACCESS_DENIED     The firmware volume is in the ReadDisabled
> state
> -  @retval EFI_DEVICE_ERROR      The block device is not functioning correctly
> and
> -                                could not be read
> -  @retval EFI_INVALID_PARAMETER NumBytes or Buffer are NULL
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolRead (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
> -  IN EFI_LBA                                    Lba,
> -  IN UINTN                                      Offset,
> -  IN OUT UINTN                                  *NumBytes,
> -  OUT UINT8                                     *Buffer
> -  )
> -{
> -  EFI_FVB_INSTANCE     *FvbInstance;
> -  EFI_STATUS           Status;
> -
> -  FvbInstance = FVB_INSTANCE_FROM_THIS (This);
> -  Status = FvbReadBlock (FvbInstance, Lba, Offset, NumBytes, Buffer);
> -  DEBUG((DEBUG_INFO,
> -    "FvbProtocolRead: Lba: 0x%lx Offset: 0x%x NumBytes: 0x%x, Buffer: 0x%x\n",
> -    Lba,
> -    Offset,
> -    *NumBytes,
> -    Buffer)
> -    );
> -
> -  return Status;
> -}
> diff --git
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c
> deleted file mode 100644
> index 016f19587c91..000000000000
> --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.c
> +++ /dev/null
> @@ -1,271 +0,0 @@
> -/** @file
> -  MM driver source for several Serial Flash devices
> -  which are compliant with the Intel(R) Serial Flash Interface Compatibility
> Specification.
> -
> -  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> -  Copyright (c) Microsoft Corporation.<BR>
> -  SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -**/
> -
> -#include "SpiFvbServiceCommon.h"
> -#include <Library/MmServicesTableLib.h>
> -#include <Library/UefiDriverEntryPoint.h>
> -#include <Protocol/SmmFirmwareVolumeBlock.h>
> -
> -/**
> -  The function installs EFI_FIRMWARE_VOLUME_BLOCK protocol
> -  for each FV in the system.
> -
> -  @param[in]  FvbInstance   The pointer to a FW volume instance structure,
> -                            which contains the information about one FV.
> -
> -  @retval     VOID
> -
> -**/
> -VOID
> -InstallFvbProtocol (
> -  IN  EFI_FVB_INSTANCE               *FvbInstance
> -  )
> -{
> -  EFI_FIRMWARE_VOLUME_HEADER            *FvHeader;
> -  EFI_STATUS                            Status;
> -  EFI_HANDLE                            FvbHandle;
> -
> -  ASSERT (FvbInstance != NULL);
> -  if (FvbInstance == NULL) {
> -    return;
> -  }
> -
> -  CopyMem (&FvbInstance->FvbProtocol, &mFvbProtocolTemplate, sizeof
> (EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL));
> -
> -  FvHeader = &FvbInstance->FvHeader;
> -  if (FvHeader == NULL) {
> -    return;
> -  }
> -
> -  //
> -  // Set up the devicepath
> -  //
> -  DEBUG ((DEBUG_INFO, "FwBlockService.c: Setting up DevicePath for
> 0x%lx:\n", FvbInstance->FvBase));
> -  if (FvHeader->ExtHeaderOffset == 0) {
> -    //
> -    // FV does not contains extension header, then produce
> MEMMAP_DEVICE_PATH
> -    //
> -    FvbInstance->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)
> AllocateRuntimeCopyPool (sizeof (FV_MEMMAP_DEVICE_PATH),
> &mFvMemmapDevicePathTemplate);
> -    if (FvbInstance->DevicePath == NULL) {
> -      DEBUG ((DEBUG_INFO, "SpiFvbServiceSmm.c: Memory allocation for
> MEMMAP_DEVICE_PATH failed\n"));
> -      return;
> -    }
> -    ((FV_MEMMAP_DEVICE_PATH *) FvbInstance->DevicePath)-
> >MemMapDevPath.StartingAddress = FvbInstance->FvBase;
> -    ((FV_MEMMAP_DEVICE_PATH *) FvbInstance->DevicePath)-
> >MemMapDevPath.EndingAddress   = FvbInstance->FvBase + FvHeader-
> >FvLength - 1;
> -  } else {
> -    FvbInstance->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)
> AllocateRuntimeCopyPool (sizeof (FV_PIWG_DEVICE_PATH),
> &mFvPIWGDevicePathTemplate);
> -    if (FvbInstance->DevicePath == NULL) {
> -      DEBUG ((DEBUG_INFO, "SpiFvbServiceSmm.c: Memory allocation for
> FV_PIWG_DEVICE_PATH failed\n"));
> -      return;
> -    }
> -    CopyGuid (
> -      &((FV_PIWG_DEVICE_PATH *)FvbInstance->DevicePath)-
> >FvDevPath.FvName,
> -      (GUID *)(UINTN)(FvbInstance->FvBase + FvHeader->ExtHeaderOffset)
> -      );
> -  }
> -
> -  //
> -  // LocateDevicePath fails so install a new interface and device path
> -  //
> -  FvbHandle = NULL;
> -
> -  Status = gMmst->MmInstallProtocolInterface (
> -                    &FvbHandle,
> -                    &gEfiSmmFirmwareVolumeBlockProtocolGuid,
> -                    EFI_NATIVE_INTERFACE,
> -                    &(FvbInstance->FvbProtocol)
> -                    );
> -  ASSERT_EFI_ERROR (Status);
> -
> -  Status = gMmst->MmInstallProtocolInterface (
> -                    &FvbHandle,
> -                    &gEfiDevicePathProtocolGuid,
> -                    EFI_NATIVE_INTERFACE,
> -                    &(FvbInstance->DevicePath)
> -                    );
> -  ASSERT_EFI_ERROR (Status);
> -}
> -
> -/**
> -  The function does the necessary initialization work for
> -  Firmware Volume Block Driver.
> -
> -**/
> -VOID
> -FvbInitialize (
> -  VOID
> -  )
> -{
> -  EFI_FVB_INSTANCE                      *FvbInstance;
> -  EFI_FIRMWARE_VOLUME_HEADER            *FvHeader;
> -  EFI_FV_BLOCK_MAP_ENTRY                *PtrBlockMapEntry;
> -  EFI_PHYSICAL_ADDRESS                  BaseAddress;
> -  EFI_STATUS                            Status;
> -  UINTN                                 BufferSize;
> -  UINTN                                 Idx;
> -  UINT32                                MaxLbaSize;
> -  UINT32                                BytesWritten;
> -  UINTN                                 BytesErased;
> -
> -  mPlatformFvBaseAddress[0].FvBase =
> PcdGet32(PcdFlashNvStorageVariableBase);
> -  mPlatformFvBaseAddress[0].FvSize =
> PcdGet32(PcdFlashNvStorageVariableSize);
> -  mPlatformFvBaseAddress[1].FvBase = PcdGet32(PcdFlashFvMicrocodeBase);
> -  mPlatformFvBaseAddress[1].FvSize = PcdGet32(PcdFlashFvMicrocodeSize);
> -  mPlatformDefaultBaseAddress[0].FvBase =
> PcdGet32(PcdFlashNvStorageVariableBase);
> -  mPlatformDefaultBaseAddress[0].FvSize =
> PcdGet32(PcdFlashNvStorageVariableSize);
> -  mPlatformDefaultBaseAddress[1].FvBase =
> PcdGet32(PcdFlashFvMicrocodeBase);
> -  mPlatformDefaultBaseAddress[1].FvSize =
> PcdGet32(PcdFlashFvMicrocodeSize);
> -
> -  //
> -  // We will only continue with FVB installation if the
> -  // SPI is the active BIOS state
> -  //
> -  {
> -    //
> -    // Make sure all FVB are valid and/or fix if possible
> -    //
> -    for (Idx = 0;; Idx++) {
> -      if (mPlatformFvBaseAddress[Idx].FvSize == 0 &&
> mPlatformFvBaseAddress[Idx].FvBase == 0) {
> -        break;
> -      }
> -
> -      BaseAddress = mPlatformFvBaseAddress[Idx].FvBase;
> -      FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress;
> -
> -      if (!IsFvHeaderValid (BaseAddress, FvHeader)) {
> -        BytesWritten = 0;
> -        BytesErased = 0;
> -        DEBUG ((DEBUG_ERROR, "ERROR - The FV in 0x%x is invalid!\n",
> FvHeader));
> -        Status = GetFvbInfo (BaseAddress, &FvHeader);
> -        if (EFI_ERROR (Status)) {
> -          DEBUG ((DEBUG_WARN, "ERROR - Can't recovery FV header at 0x%x.
> GetFvbInfo Status %r\n", BaseAddress, Status));
> -          continue;
> -        }
> -        DEBUG ((DEBUG_INFO, "Rewriting FV header at 0x%X with static data\n",
> BaseAddress));
> -        //
> -        // Spi erase
> -        //
> -        BytesErased = (UINTN) FvHeader->BlockMap->Length;
> -        Status = SpiFlashBlockErase( (UINTN) BaseAddress, &BytesErased);
> -        if (EFI_ERROR (Status)) {
> -          DEBUG ((DEBUG_WARN, "ERROR - SpiFlashBlockErase Error  %r\n",
> Status));
> -          continue;
> -        }
> -        if (BytesErased != FvHeader->BlockMap->Length) {
> -          DEBUG ((DEBUG_WARN, "ERROR - BytesErased != FvHeader->BlockMap-
> >Length\n"));
> -          DEBUG ((DEBUG_INFO, " BytesErased = 0x%X\n Length = 0x%X\n",
> BytesErased, FvHeader->BlockMap->Length));
> -          continue;
> -        }
> -        BytesWritten = FvHeader->HeaderLength;
> -        Status = SpiFlashWrite ((UINTN)BaseAddress, &BytesWritten,
> (UINT8*)FvHeader);
> -        if (EFI_ERROR (Status)) {
> -          DEBUG ((DEBUG_WARN, "ERROR - SpiFlashWrite Error  %r\n", Status));
> -          continue;
> -        }
> -        if (BytesWritten != FvHeader->HeaderLength) {
> -          DEBUG ((DEBUG_WARN, "ERROR - BytesWritten != HeaderLength\n"));
> -          DEBUG ((DEBUG_INFO, " BytesWritten = 0x%X\n HeaderLength = 0x%X\n",
> BytesWritten, FvHeader->HeaderLength));
> -          continue;
> -        }
> -        Status = SpiFlashLock ();
> -        if (EFI_ERROR (Status)) {
> -          DEBUG ((DEBUG_WARN, "ERROR - SpiFlashLock Error  %r\n", Status));
> -          continue;
> -        }
> -        DEBUG ((DEBUG_INFO, "FV Header @ 0x%X restored with static data\n",
> BaseAddress));
> -        //
> -        // Clear cache for this range.
> -        //
> -        WriteBackInvalidateDataCacheRange ( (VOID *) (UINTN) BaseAddress,
> FvHeader->BlockMap->Length);
> -      }
> -    }
> -
> -    //
> -    // Calculate the total size for all firmware volume block instances
> -    //
> -    BufferSize = 0;
> -    for (Idx = 0; ; Idx++) {
> -      if (mPlatformFvBaseAddress[Idx].FvSize == 0 &&
> mPlatformFvBaseAddress[Idx].FvBase == 0) {
> -        break;
> -      }
> -      BaseAddress = mPlatformFvBaseAddress[Idx].FvBase;
> -      FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress;
> -
> -      if (!IsFvHeaderValid (BaseAddress, FvHeader)) {
> -        DEBUG ((DEBUG_WARN, "ERROR - The FV in 0x%x is invalid!\n", FvHeader));
> -        continue;
> -      }
> -
> -      BufferSize += (FvHeader->HeaderLength +
> -                    sizeof (EFI_FVB_INSTANCE) -
> -                    sizeof (EFI_FIRMWARE_VOLUME_HEADER)
> -                    );
> -    }
> -
> -    mFvbModuleGlobal.FvbInstance =  (EFI_FVB_INSTANCE *)
> AllocateRuntimeZeroPool (BufferSize);
> -    if (mFvbModuleGlobal.FvbInstance == NULL) {
> -      ASSERT (FALSE);
> -      return;
> -    }
> -
> -    MaxLbaSize      = 0;
> -    FvbInstance     = mFvbModuleGlobal.FvbInstance;
> -    mFvbModuleGlobal.NumFv   = 0;
> -
> -    for (Idx = 0; ; Idx++) {
> -      if (mPlatformFvBaseAddress[Idx].FvSize == 0 &&
> mPlatformFvBaseAddress[Idx].FvBase == 0) {
> -        break;
> -      }
> -      BaseAddress = mPlatformFvBaseAddress[Idx].FvBase;
> -      FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress;
> -
> -      if (!IsFvHeaderValid (BaseAddress, FvHeader)) {
> -        DEBUG ((DEBUG_WARN, "ERROR - The FV in 0x%x is invalid!\n", FvHeader));
> -        continue;
> -      }
> -
> -      FvbInstance->Signature = FVB_INSTANCE_SIGNATURE;
> -      CopyMem (&(FvbInstance->FvHeader), FvHeader, FvHeader->HeaderLength);
> -
> -      FvHeader = &(FvbInstance->FvHeader);
> -      FvbInstance->FvBase = (UINTN)BaseAddress;
> -
> -      //
> -      // Process the block map for each FV
> -      //
> -      FvbInstance->NumOfBlocks   = 0;
> -      for (PtrBlockMapEntry = FvHeader->BlockMap;
> -           PtrBlockMapEntry->NumBlocks != 0;
> -           PtrBlockMapEntry++) {
> -        //
> -        // Get the maximum size of a block.
> -        //
> -        if (MaxLbaSize < PtrBlockMapEntry->Length) {
> -          MaxLbaSize  = PtrBlockMapEntry->Length;
> -        }
> -        FvbInstance->NumOfBlocks += PtrBlockMapEntry->NumBlocks;
> -      }
> -
> -      //
> -      // Add a FVB Protocol Instance
> -      //
> -      InstallFvbProtocol (FvbInstance);
> -      mFvbModuleGlobal.NumFv++;
> -
> -      //
> -      // Move on to the next FvbInstance
> -      //
> -      FvbInstance = (EFI_FVB_INSTANCE *) ((UINTN)((UINT8 *)FvbInstance) +
> -                                            FvHeader->HeaderLength +
> -                                            (sizeof (EFI_FVB_INSTANCE) - sizeof
> (EFI_FIRMWARE_VOLUME_HEADER)));
> -
> -    }
> -  }
> -}
> diff --git
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone
> Mm.c
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone
> Mm.c
> deleted file mode 100644
> index 252c818d6551..000000000000
> ---
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone
> Mm.c
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/** @file
> -  MM driver source for several Serial Flash devices
> -  which are compliant with the Intel(R) Serial Flash Interface Compatibility
> Specification.
> -
> -  Copyright (c) Microsoft Corporation.<BR>
> -  SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -**/
> -
> -#include "SpiFvbServiceCommon.h"
> -#include "SpiFvbServiceMm.h"
> -
> -/**
> -  The driver Standalone MM entry point.
> -
> -  @param[in] ImageHandle          Image handle of this driver.
> -  @param[in] MmSystemTable        A pointer to the MM system table.
> -
> -  @retval EFI_SUCCESS             This function always returns EFI_SUCCESS.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -SpiFvbStandaloneMmInitialize (
> -  IN EFI_HANDLE            ImageHandle,
> -  IN EFI_MM_SYSTEM_TABLE   *MmSystemTable
> -  )
> -{
> -  FvbInitialize ();
> -
> -  return EFI_SUCCESS;
> -}
> diff --git
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditional
> Mm.c
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditional
> Mm.c
> deleted file mode 100644
> index 1c2dac70e3c6..000000000000
> ---
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceTraditional
> Mm.c
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/** @file
> -  MM driver source for several Serial Flash devices
> -  which are compliant with the Intel(R) Serial Flash Interface Compatibility
> Specification.
> -
> -  Copyright (c) Microsoft Corporation.<BR>
> -  SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -**/
> -
> -#include "SpiFvbServiceCommon.h"
> -#include "SpiFvbServiceMm.h"
> -
> -/**
> -  The driver Traditional MM entry point.
> -
> -  @param[in] ImageHandle          Image handle of this driver.
> -  @param[in] SystemTable          A pointer to the EFI system table.
> -
> -  @retval EFI_SUCCESS             This function always returns EFI_SUCCESS.
> -
> -**/
> -EFI_STATUS
> -EFIAPI
> -SpiFvbTraditionalMmInitialize (
> -  IN EFI_HANDLE            ImageHandle,
> -  IN EFI_SYSTEM_TABLE      *SystemTable
> -  )
> -{
> -  FvbInitialize ();
> -
> -  return EFI_SUCCESS;
> -}
> diff --git
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h
> deleted file mode 100644
> index e9d69e985814..000000000000
> ---
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceCommon.h
> +++ /dev/null
> @@ -1,158 +0,0 @@
> -/** @file
> -  Common source definitions used in serial flash drivers
> -
> -Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
> -SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -**/
> -
> -#ifndef _SPI_FVB_SERVICE_COMMON_H
> -#define _SPI_FVB_SERVICE_COMMON_H
> -
> -#include <Guid/EventGroup.h>
> -#include <Guid/FirmwareFileSystem2.h>
> -#include <Guid/SystemNvDataGuid.h>
> -#include <Protocol/DevicePath.h>
> -#include <Protocol/FirmwareVolumeBlock.h>
> -
> -#include <Library/BaseLib.h>
> -#include <Library/DebugLib.h>
> -#include <Library/BaseMemoryLib.h>
> -#include <Library/IoLib.h>
> -#include <Library/CacheMaintenanceLib.h>
> -#include <Library/MemoryAllocationLib.h>
> -#include <Library/PcdLib.h>
> -#include <Library/DevicePathLib.h>
> -#include <Library/HobLib.h>
> -
> -#include <Library/SpiFlashCommonLib.h>
> -
> -//
> -// Define two helper macro to extract the Capability field or Status field in FVB
> -// bit fields
> -//
> -#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \
> -                              EFI_FVB2_READ_ENABLED_CAP | \
> -                              EFI_FVB2_WRITE_DISABLED_CAP | \
> -                              EFI_FVB2_WRITE_ENABLED_CAP | \
> -                              EFI_FVB2_LOCK_CAP \
> -                              )
> -
> -#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS |
> EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS)
> -
> -#define FVB_INSTANCE_SIGNATURE       SIGNATURE_32('F','V','B','I')
> -
> -typedef struct {
> -  UINT32                                Signature;
> -  UINTN                                 FvBase;
> -  UINTN                                 NumOfBlocks;
> -  EFI_DEVICE_PATH_PROTOCOL              *DevicePath;
> -  EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    FvbProtocol;
> -  EFI_FIRMWARE_VOLUME_HEADER            FvHeader;
> -} EFI_FVB_INSTANCE;
> -
> -typedef struct {
> -  EFI_FVB_INSTANCE            *FvbInstance;
> -  UINT32                      NumFv;
> -} FVB_GLOBAL;
> -
> -//
> -// Fvb Protocol instance data
> -//
> -#define FVB_INSTANCE_FROM_THIS(a) CR(a, EFI_FVB_INSTANCE, FvbProtocol,
> FVB_INSTANCE_SIGNATURE)
> -
> -typedef struct {
> -  MEDIA_FW_VOL_DEVICE_PATH  FvDevPath;
> -  EFI_DEVICE_PATH_PROTOCOL  EndDevPath;
> -} FV_PIWG_DEVICE_PATH;
> -
> -typedef struct {
> -  MEMMAP_DEVICE_PATH          MemMapDevPath;
> -  EFI_DEVICE_PATH_PROTOCOL    EndDevPath;
> -} FV_MEMMAP_DEVICE_PATH;
> -
> -typedef struct {
> -  UINT32              FvBase;
> -  UINT32              FvSize;
> -} FV_INFO;
> -
> -//
> -// Protocol APIs
> -//
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolGetAttributes (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
> -  OUT EFI_FVB_ATTRIBUTES_2                      *Attributes
> -  );
> -
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolSetAttributes (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
> -  IN OUT EFI_FVB_ATTRIBUTES_2                   *Attributes
> -  );
> -
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolGetPhysicalAddress (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,
> -       OUT EFI_PHYSICAL_ADDRESS                *Address
> -  );
> -
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolGetBlockSize (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL  *This,
> -  IN  EFI_LBA                                  Lba,
> -  OUT UINTN                                    *BlockSize,
> -  OUT UINTN                                    *NumOfBlocks
> -  );
> -
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolRead (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
> -  IN EFI_LBA                                    Lba,
> -  IN UINTN                                      Offset,
> -  IN OUT UINTN                                  *NumBytes,
> -  OUT UINT8                                     *Buffer
> -  );
> -
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolWrite (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL   *This,
> -  IN EFI_LBA                                    Lba,
> -  IN UINTN                                      Offset,
> -  IN OUT UINTN                                  *NumBytes,
> -  IN UINT8                                      *Buffer
> -  );
> -
> -EFI_STATUS
> -EFIAPI
> -FvbProtocolEraseBlocks (
> -  IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL    *This,
> -  ...
> -  );
> -
> -BOOLEAN
> -IsFvHeaderValid (
> -  IN       EFI_PHYSICAL_ADDRESS          FvBase,
> -  IN CONST EFI_FIRMWARE_VOLUME_HEADER    *FwVolHeader
> -  );
> -
> -EFI_STATUS
> -GetFvbInfo (
> -  IN  EFI_PHYSICAL_ADDRESS         FvBaseAddress,
> -  OUT EFI_FIRMWARE_VOLUME_HEADER   **FvbInfo
> -  );
> -
> -extern FVB_GLOBAL                         mFvbModuleGlobal;
> -extern FV_MEMMAP_DEVICE_PATH              mFvMemmapDevicePathTemplate;
> -extern FV_PIWG_DEVICE_PATH                mFvPIWGDevicePathTemplate;
> -extern EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL mFvbProtocolTemplate;
> -extern FV_INFO                            mPlatformFvBaseAddress[];
> -extern FV_INFO                            mPlatformDefaultBaseAddress[];
> -
> -#endif
> diff --git
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h
> deleted file mode 100644
> index 36af1130c8ee..000000000000
> --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceMm.h
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -/** @file
> -  Definitions common to MM implementation in this driver.
> -
> -  Copyright (c) Microsoft Corporation.<BR>
> -  SPDX-License-Identifier: BSD-2-Clause-Patent
> -
> -**/
> -
> -#ifndef _SPI_FVB_SERVICE_MM_H_
> -#define _SPI_FVB_SERVICE_MM_H_
> -
> -/**
> -  The function does the necessary initialization work for
> -  Firmware Volume Block Driver.
> -
> -**/
> -VOID
> -FvbInitialize (
> -  VOID
> -  );
> -
> -#endif
> diff --git
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf
> deleted file mode 100644
> index 10e51e11756f..000000000000
> --- a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf
> +++ /dev/null
> @@ -1,68 +0,0 @@
> -### @file
> -# Component description file for the Serial Flash device Runtime driver.
> -#
> -# Copyright (c) 2017-2019, Intel Corporation. All rights reserved.<BR>
> -# Copyright (c) Microsoft Corporation.<BR>
> -#
> -# SPDX-License-Identifier: BSD-2-Clause-Patent
> -#
> -###
> -
> -[Defines]
> -  INF_VERSION                    = 0x00010017
> -  BASE_NAME                      = SpiFvbServiceSmm
> -  FILE_GUID                      = 68A10D85-6858-4402-B070-028B3EA21747
> -  VERSION_STRING                 = 1.0
> -  MODULE_TYPE                    = DXE_SMM_DRIVER
> -  PI_SPECIFICATION_VERSION       = 1.10
> -  ENTRY_POINT                    = SpiFvbTraditionalMmInitialize
> -
> -#
> -# The following information is for reference only and not required by the build
> tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64
> -#
> -
> -[LibraryClasses]
> -  PcdLib
> -  MemoryAllocationLib
> -  CacheMaintenanceLib
> -  BaseMemoryLib
> -  DebugLib
> -  BaseLib
> -  UefiBootServicesTableLib
> -  UefiDriverEntryPoint
> -  SpiFlashCommonLib
> -  MmServicesTableLib
> -
> -[Packages]
> -  MdePkg/MdePkg.dec
> -  MdeModulePkg/MdeModulePkg.dec
> -  MinPlatformPkg/MinPlatformPkg.dec
> -
> -[Pcd]
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase   ##
> CONSUMES
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize   ##
> CONSUMES
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ##
> CONSUMES
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize   ##
> CONSUMES
> -  gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase          ##
> CONSUMES
> -  gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize          ##
> CONSUMES
> -
> -[Sources]
> -  FvbInfo.c
> -  SpiFvbServiceCommon.h
> -  SpiFvbServiceCommon.c
> -  SpiFvbServiceMm.h
> -  SpiFvbServiceMm.c
> -  SpiFvbServiceTraditionalMm.c
> -
> -[Protocols]
> -  gEfiDevicePathProtocolGuid                    ## PRODUCES
> -  gEfiSmmFirmwareVolumeBlockProtocolGuid        ## PRODUCES
> -
> -[Guids]
> -  gEfiFirmwareFileSystem2Guid                   ## CONSUMES
> -  gEfiSystemNvDataFvGuid                        ## CONSUMES
> -
> -[Depex]
> -  TRUE
> diff --git
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone
> Mm.inf
> b/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone
> Mm.inf
> deleted file mode 100644
> index 9f08d3673f41..000000000000
> ---
> a/Platform/Intel/MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandalone
> Mm.inf
> +++ /dev/null
> @@ -1,67 +0,0 @@
> -### @file
> -# Component description file for the Serial Flash device Standalone MM driver.
> -#
> -# Copyright (c) 2017-2019, Intel Corporation. All rights reserved.<BR>
> -# Copyright (c) Microsoft Corporation.<BR>
> -#
> -# SPDX-License-Identifier: BSD-2-Clause-Patent
> -#
> -###
> -
> -[Defines]
> -  INF_VERSION                    = 0x0001001B
> -  BASE_NAME                      = SpiFvbServiceStandaloneMm
> -  FILE_GUID                      = E6313655-8BD0-4EAB-B319-AD5E212CE6AB
> -  VERSION_STRING                 = 1.0
> -  MODULE_TYPE                    = MM_STANDALONE
> -  PI_SPECIFICATION_VERSION       = 0x00010032
> -  ENTRY_POINT                    = SpiFvbStandaloneMmInitialize
> -
> -#
> -# The following information is for reference only and not required by the build
> tools.
> -#
> -# VALID_ARCHITECTURES = IA32 X64
> -#
> -
> -[LibraryClasses]
> -  BaseLib
> -  BaseMemoryLib
> -  CacheMaintenanceLib
> -  DebugLib
> -  MemoryAllocationLib
> -  PcdLib
> -  MmServicesTableLib
> -  SpiFlashCommonLib
> -  StandaloneMmDriverEntryPoint
> -
> -[Packages]
> -  MdePkg/MdePkg.dec
> -  MdeModulePkg/MdeModulePkg.dec
> -  MinPlatformPkg/MinPlatformPkg.dec
> -
> -[Pcd]
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase   ##
> CONSUMES
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize   ##
> CONSUMES
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize ##
> CONSUMES
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize   ##
> CONSUMES
> -  gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeBase          ##
> CONSUMES
> -  gMinPlatformPkgTokenSpaceGuid.PcdFlashFvMicrocodeSize          ##
> CONSUMES
> -
> -[Sources]
> -  FvbInfo.c
> -  SpiFvbServiceCommon.h
> -  SpiFvbServiceCommon.c
> -  SpiFvbServiceMm.h
> -  SpiFvbServiceMm.c
> -  SpiFvbServiceStandaloneMm.c
> -
> -[Protocols]
> -  gEfiDevicePathProtocolGuid                    ## PRODUCES
> -  gEfiSmmFirmwareVolumeBlockProtocolGuid        ## PRODUCES
> -
> -[Guids]
> -  gEfiFirmwareFileSystem2Guid                   ## CONSUMES
> -  gEfiSystemNvDataFvGuid                        ## CONSUMES
> -
> -[Depex]
> -  TRUE
> diff --git a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc
> b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc
> index 35cbd40abb05..15867eee4e61 100644
> --- a/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc
> +++ b/Platform/Intel/MinPlatformPkg/MinPlatformPkg.dsc
> @@ -159,8 +159,6 @@ [Components]
> 
> 
> MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootM
> anagerLib.inf
> 
> -  MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceSmm.inf
> -  MinPlatformPkg/Flash/SpiFvbService/SpiFvbServiceStandaloneMm.inf
> 
> MinPlatformPkg/Flash/Library/SpiFlashCommonLibNull/SpiFlashCommonLibNull.
> inf
> 
>    MinPlatformPkg/FspWrapper/SaveMemoryConfig/SaveMemoryConfig.inf
> --
> 2.28.0.windows.1
> 
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#77122): https://edk2.groups.io/g/devel/message/77122
> Mute This Topic: https://groups.io/mt/83794812/1777047
> Group Owner: devel+owner at edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub [chasel.chiu at intel.com]
> -=-=-=-=-=-=
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#77156): https://edk2.groups.io/g/devel/message/77156
Mute This Topic: https://groups.io/mt/83794812/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list