]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
MdeModulePkg/Variable: Consume Variable Flash Info
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / VariableSmm.c
index 517cae7b00f8e256adcbc80a5e37e10acab254f7..5253c328dcd9214ddac4b017f318be2c1be6c038 100644 (file)
@@ -1084,6 +1084,8 @@ SmmFtwNotificationEvent (
   EFI_SMM_FAULT_TOLERANT_WRITE_PROTOCOL   *FtwProtocol;\r
   EFI_PHYSICAL_ADDRESS                    NvStorageVariableBase;\r
   UINTN                                   FtwMaxBlockSize;\r
+  UINT32                                  NvStorageVariableSize;\r
+  UINT64                                  NvStorageVariableSize64;\r
 \r
   if (mVariableModuleGlobal->FvbInstance != NULL) {\r
     return EFI_SUCCESS;\r
@@ -1097,14 +1099,21 @@ SmmFtwNotificationEvent (
     return Status;\r
   }\r
 \r
+  Status = GetVariableFlashNvStorageInfo (&NvStorageVariableBase, &NvStorageVariableSize64);\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  Status = SafeUint64ToUint32 (NvStorageVariableSize64, &NvStorageVariableSize);\r
+  // This driver currently assumes the size will be UINT32 so assert the value is safe for now.\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  ASSERT (NvStorageVariableBase != 0);\r
+  VariableStoreBase = NvStorageVariableBase + mNvFvHeaderCache->HeaderLength;\r
+\r
   Status = FtwProtocol->GetMaxBlockSize (FtwProtocol, &FtwMaxBlockSize);\r
   if (!EFI_ERROR (Status)) {\r
-    ASSERT (PcdGet32 (PcdFlashNvStorageVariableSize) <= FtwMaxBlockSize);\r
+    ASSERT (NvStorageVariableSize <= FtwMaxBlockSize);\r
   }\r
 \r
-  NvStorageVariableBase = NV_STORAGE_VARIABLE_BASE;\r
-  VariableStoreBase     = NvStorageVariableBase + mNvFvHeaderCache->HeaderLength;\r
-\r
   //\r
   // Let NonVolatileVariableBase point to flash variable store base directly after FTW ready.\r
   //\r