]> xenbits.xensource.com Git - people/aperard/ovmf.git/commitdiff
OvmfPkg/VirtNorFlashDxe: drop block I/O protocol implementation
authorArd Biesheuvel <ardb@kernel.org>
Mon, 24 Oct 2022 15:12:08 +0000 (17:12 +0200)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Thu, 27 Oct 2022 16:52:01 +0000 (16:52 +0000)
We never boot from NOR flash, and generally rely on the firmware volume
PI protocols to expose the contents. So drop the block I/O protocol
implementation from VirtNorFlashDxe.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
OvmfPkg/VirtNorFlashDxe/VirtNorFlash.c
OvmfPkg/VirtNorFlashDxe/VirtNorFlash.h
OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.c
OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.inf
OvmfPkg/VirtNorFlashDxe/VirtNorFlashFvb.c

index 1094d48f7de4c9aabc06160e14a91a9fb31f49c0..f41d9d372f49414e5f6d6b7238cc1ad7bc3071e3 100644 (file)
@@ -366,10 +366,6 @@ NorFlashWriteBlocks (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if (Instance->Media.ReadOnly == TRUE) {\r
-    return EFI_WRITE_PROTECTED;\r
-  }\r
-\r
   // We must have some bytes to read\r
   DEBUG ((DEBUG_BLKIO, "NorFlashWriteBlocks: BufferSizeInBytes=0x%x\n", BufferSizeInBytes));\r
   if (BufferSizeInBytes == 0) {\r
@@ -377,22 +373,22 @@ NorFlashWriteBlocks (
   }\r
 \r
   // The size of the buffer must be a multiple of the block size\r
-  DEBUG ((DEBUG_BLKIO, "NorFlashWriteBlocks: BlockSize in bytes =0x%x\n", Instance->Media.BlockSize));\r
-  if ((BufferSizeInBytes % Instance->Media.BlockSize) != 0) {\r
+  DEBUG ((DEBUG_BLKIO, "NorFlashWriteBlocks: BlockSize in bytes =0x%x\n", Instance->BlockSize));\r
+  if ((BufferSizeInBytes % Instance->BlockSize) != 0) {\r
     return EFI_BAD_BUFFER_SIZE;\r
   }\r
 \r
   // All blocks must be within the device\r
-  NumBlocks = ((UINT32)BufferSizeInBytes) / Instance->Media.BlockSize;\r
+  NumBlocks = ((UINT32)BufferSizeInBytes) / Instance->BlockSize;\r
 \r
-  DEBUG ((DEBUG_BLKIO, "NorFlashWriteBlocks: NumBlocks=%d, LastBlock=%ld, Lba=%ld.\n", NumBlocks, Instance->Media.LastBlock, Lba));\r
+  DEBUG ((DEBUG_BLKIO, "NorFlashWriteBlocks: NumBlocks=%d, LastBlock=%ld, Lba=%ld.\n", NumBlocks, Instance->LastBlock, Lba));\r
 \r
-  if ((Lba + NumBlocks) > (Instance->Media.LastBlock + 1)) {\r
+  if ((Lba + NumBlocks) > (Instance->LastBlock + 1)) {\r
     DEBUG ((DEBUG_ERROR, "NorFlashWriteBlocks: ERROR - Write will exceed last block.\n"));\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  BlockSizeInWords = Instance->Media.BlockSize / 4;\r
+  BlockSizeInWords = Instance->BlockSize / 4;\r
 \r
   // Because the target *Buffer is a pointer to VOID, we must put all the data into a pointer\r
   // to a proper data type, so use *ReadBuffer\r
@@ -489,8 +485,8 @@ NorFlashReadBlocks (
     DEBUG_BLKIO,\r
     "NorFlashReadBlocks: BufferSize=0x%xB BlockSize=0x%xB LastBlock=%ld, Lba=%ld.\n",\r
     BufferSizeInBytes,\r
-    Instance->Media.BlockSize,\r
-    Instance->Media.LastBlock,\r
+    Instance->BlockSize,\r
+    Instance->LastBlock,\r
     Lba\r
     ));\r
 \r
@@ -505,14 +501,14 @@ NorFlashReadBlocks (
   }\r
 \r
   // The size of the buffer must be a multiple of the block size\r
-  if ((BufferSizeInBytes % Instance->Media.BlockSize) != 0) {\r
+  if ((BufferSizeInBytes % Instance->BlockSize) != 0) {\r
     return EFI_BAD_BUFFER_SIZE;\r
   }\r
 \r
   // All blocks must be within the device\r
-  NumBlocks = ((UINT32)BufferSizeInBytes) / Instance->Media.BlockSize;\r
+  NumBlocks = ((UINT32)BufferSizeInBytes) / Instance->BlockSize;\r
 \r
-  if ((Lba + NumBlocks) > (Instance->Media.LastBlock + 1)) {\r
+  if ((Lba + NumBlocks) > (Instance->LastBlock + 1)) {\r
     DEBUG ((DEBUG_ERROR, "NorFlashReadBlocks: ERROR - Read will exceed last block\n"));\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -521,7 +517,7 @@ NorFlashReadBlocks (
   StartAddress = GET_NOR_BLOCK_ADDRESS (\r
                    Instance->RegionBaseAddress,\r
                    Lba,\r
-                   Instance->Media.BlockSize\r
+                   Instance->BlockSize\r
                    );\r
 \r
   // Put the device into Read Array mode\r
@@ -554,7 +550,7 @@ NorFlashRead (
     return EFI_SUCCESS;\r
   }\r
 \r
-  if (((Lba * Instance->Media.BlockSize) + Offset + BufferSizeInBytes) > Instance->Size) {\r
+  if (((Lba * Instance->BlockSize) + Offset + BufferSizeInBytes) > Instance->Size) {\r
     DEBUG ((DEBUG_ERROR, "NorFlashRead: ERROR - Read will exceed device size.\n"));\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -563,7 +559,7 @@ NorFlashRead (
   StartAddress = GET_NOR_BLOCK_ADDRESS (\r
                    Instance->RegionBaseAddress,\r
                    Lba,\r
-                   Instance->Media.BlockSize\r
+                   Instance->BlockSize\r
                    );\r
 \r
   // Put the device into Read Array mode\r
@@ -577,7 +573,7 @@ NorFlashRead (
 \r
 /*\r
   Write a full or portion of a block. It must not span block boundaries; that is,\r
-  Offset + *NumBytes <= Instance->Media.BlockSize.\r
+  Offset + *NumBytes <= Instance->BlockSize.\r
 */\r
 EFI_STATUS\r
 NorFlashWriteSingleBlock (\r
@@ -605,15 +601,8 @@ NorFlashWriteSingleBlock (
 \r
   DEBUG ((DEBUG_BLKIO, "NorFlashWriteSingleBlock(Parameters: Lba=%ld, Offset=0x%x, *NumBytes=0x%x, Buffer @ 0x%08x)\n", Lba, Offset, *NumBytes, Buffer));\r
 \r
-  // Detect WriteDisabled state\r
-  if (Instance->Media.ReadOnly == TRUE) {\r
-    DEBUG ((DEBUG_ERROR, "NorFlashWriteSingleBlock: ERROR - Can not write: Device is in WriteDisabled state.\n"));\r
-    // It is in WriteDisabled state, return an error right away\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
-\r
   // Cache the block size to avoid de-referencing pointers all the time\r
-  BlockSize = Instance->Media.BlockSize;\r
+  BlockSize = Instance->BlockSize;\r
 \r
   // The write must not span block boundaries.\r
   // We need to check each variable individually because adding two large values together overflows.\r
@@ -819,12 +808,6 @@ NorFlashVirtualNotifyEvent (
     EfiConvertPointer (0x0, (VOID **)&mNorFlashInstances[Index]->DeviceBaseAddress);\r
     EfiConvertPointer (0x0, (VOID **)&mNorFlashInstances[Index]->RegionBaseAddress);\r
 \r
-    // Convert BlockIo protocol\r
-    EfiConvertPointer (0x0, (VOID **)&mNorFlashInstances[Index]->BlockIoProtocol.FlushBlocks);\r
-    EfiConvertPointer (0x0, (VOID **)&mNorFlashInstances[Index]->BlockIoProtocol.ReadBlocks);\r
-    EfiConvertPointer (0x0, (VOID **)&mNorFlashInstances[Index]->BlockIoProtocol.Reset);\r
-    EfiConvertPointer (0x0, (VOID **)&mNorFlashInstances[Index]->BlockIoProtocol.WriteBlocks);\r
-\r
     // Convert Fvb\r
     EfiConvertPointer (0x0, (VOID **)&mNorFlashInstances[Index]->FvbProtocol.EraseBlocks);\r
     EfiConvertPointer (0x0, (VOID **)&mNorFlashInstances[Index]->FvbProtocol.GetAttributes);\r
index 7733ee02ee283ca2f6e3ada16579fd94bbd43214..b7f5d208b2368e9149f7529228ac412f452431b2 100644 (file)
@@ -14,7 +14,6 @@
 \r
 #include <Guid/EventGroup.h>\r
 \r
-#include <Protocol/BlockIo.h>\r
 #include <Protocol/FirmwareVolumeBlock.h>\r
 \r
 #include <Library/DebugLib.h>\r
 #define P30_CMD_READ_CONFIGURATION_REGISTER        0x0003\r
 \r
 #define NOR_FLASH_SIGNATURE  SIGNATURE_32('n', 'o', 'r', '0')\r
-#define INSTANCE_FROM_FVB_THIS(a)     CR(a, NOR_FLASH_INSTANCE, FvbProtocol, NOR_FLASH_SIGNATURE)\r
-#define INSTANCE_FROM_BLKIO_THIS(a)   CR(a, NOR_FLASH_INSTANCE, BlockIoProtocol, NOR_FLASH_SIGNATURE)\r
+#define INSTANCE_FROM_FVB_THIS(a)  CR(a, NOR_FLASH_INSTANCE, FvbProtocol, NOR_FLASH_SIGNATURE)\r
 \r
 typedef struct _NOR_FLASH_INSTANCE NOR_FLASH_INSTANCE;\r
 \r
@@ -129,9 +127,8 @@ struct _NOR_FLASH_INSTANCE {
   UINTN                                  RegionBaseAddress;\r
   UINTN                                  Size;\r
   EFI_LBA                                StartLba;\r
-\r
-  EFI_BLOCK_IO_PROTOCOL                  BlockIoProtocol;\r
-  EFI_BLOCK_IO_MEDIA                     Media;\r
+  EFI_LBA                                LastBlock;\r
+  UINT32                                 BlockSize;\r
 \r
   EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL    FvbProtocol;\r
   VOID                                   *ShadowBuffer;\r
@@ -155,51 +152,6 @@ NorFlashWriteBuffer (
   IN UINT32              *Buffer\r
   );\r
 \r
-//\r
-// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.Reset\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-NorFlashBlockIoReset (\r
-  IN EFI_BLOCK_IO_PROTOCOL  *This,\r
-  IN BOOLEAN                ExtendedVerification\r
-  );\r
-\r
-//\r
-// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.ReadBlocks\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-NorFlashBlockIoReadBlocks (\r
-  IN  EFI_BLOCK_IO_PROTOCOL  *This,\r
-  IN  UINT32                 MediaId,\r
-  IN  EFI_LBA                Lba,\r
-  IN  UINTN                  BufferSizeInBytes,\r
-  OUT VOID                   *Buffer\r
-  );\r
-\r
-//\r
-// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.WriteBlocks\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-NorFlashBlockIoWriteBlocks (\r
-  IN  EFI_BLOCK_IO_PROTOCOL  *This,\r
-  IN  UINT32                 MediaId,\r
-  IN  EFI_LBA                Lba,\r
-  IN  UINTN                  BufferSizeInBytes,\r
-  IN  VOID                   *Buffer\r
-  );\r
-\r
-//\r
-// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.FlushBlocks\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-NorFlashBlockIoFlushBlocks (\r
-  IN EFI_BLOCK_IO_PROTOCOL  *This\r
-  );\r
-\r
 //\r
 // NorFlashFvbDxe.c\r
 //\r
index 4875b057d5e2e507e541de9c3e5fd89e38b516ae..2ceda226359ca36e10887640ea8f789ae3a4ec71 100644 (file)
@@ -34,29 +34,8 @@ NOR_FLASH_INSTANCE  mNorFlashInstanceTemplate = {
   0, // RegionBaseAddress ... NEED TO BE FILLED\r
   0, // Size ... NEED TO BE FILLED\r
   0, // StartLba\r
-\r
-  {\r
-    EFI_BLOCK_IO_PROTOCOL_REVISION2, // Revision\r
-    NULL,                            // Media ... NEED TO BE FILLED\r
-    NorFlashBlockIoReset,            // Reset;\r
-    NorFlashBlockIoReadBlocks,       // ReadBlocks\r
-    NorFlashBlockIoWriteBlocks,      // WriteBlocks\r
-    NorFlashBlockIoFlushBlocks       // FlushBlocks\r
-  }, // BlockIoProtocol\r
-\r
-  {\r
-    0,     // MediaId ... NEED TO BE FILLED\r
-    FALSE, // RemovableMedia\r
-    TRUE,  // MediaPresent\r
-    FALSE, // LogicalPartition\r
-    FALSE, // ReadOnly\r
-    FALSE, // WriteCaching;\r
-    0,     // BlockSize ... NEED TO BE FILLED\r
-    4,     //  IoAlign\r
-    0,     // LastBlock ... NEED TO BE FILLED\r
-    0,     // LowestAlignedLba\r
-    1,     // LogicalBlocksPerPhysicalBlock\r
-  }, // Media;\r
+  0, // LastBlock\r
+  0, // BlockSize\r
 \r
   {\r
     FvbGetAttributes,      // GetAttributes\r
@@ -115,11 +94,8 @@ NorFlashCreateInstance (
   Instance->DeviceBaseAddress = NorFlashDeviceBase;\r
   Instance->RegionBaseAddress = NorFlashRegionBase;\r
   Instance->Size              = NorFlashSize;\r
-\r
-  Instance->BlockIoProtocol.Media = &Instance->Media;\r
-  Instance->Media.MediaId         = Index;\r
-  Instance->Media.BlockSize       = BlockSize;\r
-  Instance->Media.LastBlock       = (NorFlashSize / BlockSize)-1;\r
+  Instance->BlockSize         = BlockSize;\r
+  Instance->LastBlock         = (NorFlashSize / BlockSize) - 1;\r
 \r
   CopyGuid (&Instance->DevicePath.Vendor.Guid, &gEfiCallerIdGuid);\r
   Instance->DevicePath.Index = (UINT8)Index;\r
@@ -136,8 +112,6 @@ NorFlashCreateInstance (
                     &Instance->Handle,\r
                     &gEfiDevicePathProtocolGuid,\r
                     &Instance->DevicePath,\r
-                    &gEfiBlockIoProtocolGuid,\r
-                    &Instance->BlockIoProtocol,\r
                     &gEfiFirmwareVolumeBlockProtocolGuid,\r
                     &Instance->FvbProtocol,\r
                     NULL\r
@@ -151,8 +125,6 @@ NorFlashCreateInstance (
                     &Instance->Handle,\r
                     &gEfiDevicePathProtocolGuid,\r
                     &Instance->DevicePath,\r
-                    &gEfiBlockIoProtocolGuid,\r
-                    &Instance->BlockIoProtocol,\r
                     NULL\r
                     );\r
     if (EFI_ERROR (Status)) {\r
@@ -434,7 +406,7 @@ NorFlashFvbInitialize (
                                 PcdGet64 (PcdFlashNvStorageVariableBase64) : PcdGet32 (PcdFlashNvStorageVariableBase);\r
 \r
   // Set the index of the first LBA for the FVB\r
-  Instance->StartLba = (mFlashNvStorageVariableBase - Instance->RegionBaseAddress) / Instance->Media.BlockSize;\r
+  Instance->StartLba = (mFlashNvStorageVariableBase - Instance->RegionBaseAddress) / Instance->BlockSize;\r
 \r
   BootMode = GetBootModeHob ();\r
   if (BootMode == BOOT_WITH_DEFAULT_SETTINGS) {\r
@@ -455,7 +427,7 @@ NorFlashFvbInitialize (
       ));\r
 \r
     // Erase all the NorFlash that is reserved for variable storage\r
-    FvbNumLba = (PcdGet32 (PcdFlashNvStorageVariableSize) + PcdGet32 (PcdFlashNvStorageFtwWorkingSize) + PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / Instance->Media.BlockSize;\r
+    FvbNumLba = (PcdGet32 (PcdFlashNvStorageVariableSize) + PcdGet32 (PcdFlashNvStorageFtwWorkingSize) + PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / Instance->BlockSize;\r
 \r
     Status = FvbEraseBlocks (&Instance->FvbProtocol, (EFI_LBA)0, FvbNumLba, EFI_LBA_LIST_TERMINATOR);\r
     if (EFI_ERROR (Status)) {\r
index 53e9d582048804578429ac4975775371b39b5818..2a3d4a218e61312f2724d2544aa356cf4f44d422 100644 (file)
@@ -19,7 +19,6 @@
 [Sources.common]\r
   VirtNorFlash.c\r
   VirtNorFlash.h\r
-  VirtNorFlashBlockIoDxe.c\r
   VirtNorFlashDxe.c\r
   VirtNorFlashFvb.c\r
 \r
index c824e0a0fbad35ff098869f1b7db62d15b4a0b7d..cc5eefaaf352b0d1e458e3ab339a76a2b213c3f3 100644 (file)
@@ -89,7 +89,7 @@ InitializeFvAndVariableStoreHeaders (
   }\r
 \r
   // Check if the size of the area is at least one block size\r
-  if ((NvStorageVariableSize <= 0) || (NvStorageVariableSize / Instance->Media.BlockSize <= 0)) {\r
+  if ((NvStorageVariableSize <= 0) || (NvStorageVariableSize / Instance->BlockSize <= 0)) {\r
     DEBUG ((\r
       DEBUG_ERROR,\r
       "%a: NvStorageVariableSize is 0x%x, should be atleast one block size\n",\r
@@ -99,7 +99,7 @@ InitializeFvAndVariableStoreHeaders (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if ((NvStorageFtwWorkingSize <= 0) || (NvStorageFtwWorkingSize / Instance->Media.BlockSize <= 0)) {\r
+  if ((NvStorageFtwWorkingSize <= 0) || (NvStorageFtwWorkingSize / Instance->BlockSize <= 0)) {\r
     DEBUG ((\r
       DEBUG_ERROR,\r
       "%a: NvStorageFtwWorkingSize is 0x%x, should be atleast one block size\n",\r
@@ -109,7 +109,7 @@ InitializeFvAndVariableStoreHeaders (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if ((NvStorageFtwSpareSize <= 0) || (NvStorageFtwSpareSize / Instance->Media.BlockSize <= 0)) {\r
+  if ((NvStorageFtwSpareSize <= 0) || (NvStorageFtwSpareSize / Instance->BlockSize <= 0)) {\r
     DEBUG ((\r
       DEBUG_ERROR,\r
       "%a: NvStorageFtwSpareSize is 0x%x, should be atleast one block size\n",\r
@@ -120,9 +120,9 @@ InitializeFvAndVariableStoreHeaders (
   }\r
 \r
   // Ensure the Variable area Base Addresses are aligned on a block size boundaries\r
-  if ((NvStorageVariableBase % Instance->Media.BlockSize != 0) ||\r
-      (NvStorageFtwWorkingBase % Instance->Media.BlockSize != 0) ||\r
-      (NvStorageFtwSpareBase % Instance->Media.BlockSize != 0))\r
+  if ((NvStorageVariableBase % Instance->BlockSize != 0) ||\r
+      (NvStorageFtwWorkingBase % Instance->BlockSize != 0) ||\r
+      (NvStorageFtwSpareBase % Instance->BlockSize != 0))\r
   {\r
     DEBUG ((DEBUG_ERROR, "%a: NvStorage Base addresses must be aligned to block size boundaries", __FUNCTION__));\r
     return EFI_INVALID_PARAMETER;\r
@@ -149,8 +149,8 @@ InitializeFvAndVariableStoreHeaders (
                                                             );\r
   FirmwareVolumeHeader->HeaderLength          = sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY);\r
   FirmwareVolumeHeader->Revision              = EFI_FVH_REVISION;\r
-  FirmwareVolumeHeader->BlockMap[0].NumBlocks = Instance->Media.LastBlock + 1;\r
-  FirmwareVolumeHeader->BlockMap[0].Length    = Instance->Media.BlockSize;\r
+  FirmwareVolumeHeader->BlockMap[0].NumBlocks = Instance->LastBlock + 1;\r
+  FirmwareVolumeHeader->BlockMap[0].Length    = Instance->BlockSize;\r
   FirmwareVolumeHeader->BlockMap[1].NumBlocks = 0;\r
   FirmwareVolumeHeader->BlockMap[1].Length    = 0;\r
   FirmwareVolumeHeader->Checksum              = CalculateCheckSum16 ((UINT16 *)FirmwareVolumeHeader, FirmwareVolumeHeader->HeaderLength);\r
@@ -284,9 +284,6 @@ FvbGetAttributes (
   )\r
 {\r
   EFI_FVB_ATTRIBUTES_2  FlashFvbAttributes;\r
-  NOR_FLASH_INSTANCE    *Instance;\r
-\r
-  Instance = INSTANCE_FROM_FVB_THIS (This);\r
 \r
   FlashFvbAttributes = (EFI_FVB_ATTRIBUTES_2)(\r
 \r
@@ -294,17 +291,12 @@ FvbGetAttributes (
                                               EFI_FVB2_READ_STATUS      | // Reads are currently enabled\r
                                               EFI_FVB2_STICKY_WRITE     | // A block erase is required to flip bits into EFI_FVB2_ERASE_POLARITY\r
                                               EFI_FVB2_MEMORY_MAPPED    | // It is memory mapped\r
-                                              EFI_FVB2_ERASE_POLARITY     // After erasure all bits take this value (i.e. '1')\r
+                                              EFI_FVB2_ERASE_POLARITY   | // After erasure all bits take this value (i.e. '1')\r
+                                              EFI_FVB2_WRITE_STATUS     | // Writes are currently enabled\r
+                                              EFI_FVB2_WRITE_ENABLED_CAP  // Writes may be enabled\r
 \r
                                               );\r
 \r
-  // Check if it is write protected\r
-  if (Instance->Media.ReadOnly != TRUE) {\r
-    FlashFvbAttributes = FlashFvbAttributes         |\r
-                         EFI_FVB2_WRITE_STATUS      | // Writes are currently enabled\r
-                         EFI_FVB2_WRITE_ENABLED_CAP;  // Writes may be enabled\r
-  }\r
-\r
   *Attributes = FlashFvbAttributes;\r
 \r
   DEBUG ((DEBUG_BLKIO, "FvbGetAttributes(0x%X)\n", *Attributes));\r
@@ -418,15 +410,15 @@ FvbGetBlockSize (
 \r
   Instance = INSTANCE_FROM_FVB_THIS (This);\r
 \r
-  DEBUG ((DEBUG_BLKIO, "FvbGetBlockSize(Lba=%ld, BlockSize=0x%x, LastBlock=%ld)\n", Lba, Instance->Media.BlockSize, Instance->Media.LastBlock));\r
+  DEBUG ((DEBUG_BLKIO, "FvbGetBlockSize(Lba=%ld, BlockSize=0x%x, LastBlock=%ld)\n", Lba, Instance->BlockSize, Instance->LastBlock));\r
 \r
-  if (Lba > Instance->Media.LastBlock) {\r
-    DEBUG ((DEBUG_ERROR, "FvbGetBlockSize: ERROR - Parameter LBA %ld is beyond the last Lba (%ld).\n", Lba, Instance->Media.LastBlock));\r
+  if (Lba > Instance->LastBlock) {\r
+    DEBUG ((DEBUG_ERROR, "FvbGetBlockSize: ERROR - Parameter LBA %ld is beyond the last Lba (%ld).\n", Lba, Instance->LastBlock));\r
     Status = EFI_INVALID_PARAMETER;\r
   } else {\r
     // This is easy because in this platform each NorFlash device has equal sized blocks.\r
-    *BlockSize      = (UINTN)Instance->Media.BlockSize;\r
-    *NumberOfBlocks = (UINTN)(Instance->Media.LastBlock - Lba + 1);\r
+    *BlockSize      = (UINTN)Instance->BlockSize;\r
+    *NumberOfBlocks = (UINTN)(Instance->LastBlock - Lba + 1);\r
 \r
     DEBUG ((DEBUG_BLKIO, "FvbGetBlockSize: *BlockSize=0x%x, *NumberOfBlocks=0x%x.\n", *BlockSize, *NumberOfBlocks));\r
 \r
@@ -498,7 +490,7 @@ FvbRead (
   TempStatus = EFI_SUCCESS;\r
 \r
   // Cache the block size to avoid de-referencing pointers all the time\r
-  BlockSize = Instance->Media.BlockSize;\r
+  BlockSize = Instance->BlockSize;\r
 \r
   DEBUG ((DEBUG_BLKIO, "FvbRead: Check if (Offset=0x%x + NumBytes=0x%x) <= BlockSize=0x%x\n", Offset, *NumBytes, BlockSize));\r
 \r
@@ -669,13 +661,6 @@ FvbEraseBlocks (
 \r
   Status = EFI_SUCCESS;\r
 \r
-  // Detect WriteDisabled state\r
-  if (Instance->Media.ReadOnly == TRUE) {\r
-    // Firmware volume is in WriteDisabled state\r
-    DEBUG ((DEBUG_ERROR, "FvbEraseBlocks: ERROR - Device is in WriteDisabled state.\n"));\r
-    return EFI_ACCESS_DENIED;\r
-  }\r
-\r
   // Before erasing, check the entire list of parameters to ensure all specified blocks are valid\r
 \r
   VA_START (Args, This);\r
@@ -698,9 +683,9 @@ FvbEraseBlocks (
       "FvbEraseBlocks: Check if: ( StartingLba=%ld + NumOfLba=%Lu - 1 ) > LastBlock=%ld.\n",\r
       Instance->StartLba + StartingLba,\r
       (UINT64)NumOfLba,\r
-      Instance->Media.LastBlock\r
+      Instance->LastBlock\r
       ));\r
-    if ((NumOfLba == 0) || ((Instance->StartLba + StartingLba + NumOfLba - 1) > Instance->Media.LastBlock)) {\r
+    if ((NumOfLba == 0) || ((Instance->StartLba + StartingLba + NumOfLba - 1) > Instance->LastBlock)) {\r
       VA_END (Args);\r
       DEBUG ((DEBUG_ERROR, "FvbEraseBlocks: ERROR - Lba range goes past the last Lba.\n"));\r
       Status = EFI_INVALID_PARAMETER;\r
@@ -733,7 +718,7 @@ FvbEraseBlocks (
       BlockAddress = GET_NOR_BLOCK_ADDRESS (\r
                        Instance->RegionBaseAddress,\r
                        Instance->StartLba + StartingLba,\r
-                       Instance->Media.BlockSize\r
+                       Instance->BlockSize\r
                        );\r
 \r
       // Erase it\r