]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg-EmuVariableFvbRuntimeDxe: Support Access To Memory Above 4G
authorlixianglai <lixianglai@loongson.cn>
Thu, 9 Dec 2021 11:28:01 +0000 (19:28 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Sat, 11 Dec 2021 16:13:07 +0000 (16:13 +0000)
In FvbInitialize Function,
PcdFlashNvStorageVariableBase64 PcdFlashNvStorageFtwWorkingBase
PcdFlashNvStorageFtwSpareBase will not exceed 0x100000000,
Due to truncation and variable type limitations.
That leads to the NV variable cannot be saved to the memory above 4G.

Modify as follows:
1.Remove the forced type conversion of UINT32.
2.Use UINT64 type variables.

Signed-off-by: xianglai li <lixianglai@loongson.cn>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
OvmfPkg/AmdSev/AmdSevX64.dsc
OvmfPkg/Bhyve/BhyveX64.dsc
OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.c
OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf
OvmfPkg/Microvm/MicrovmX64.dsc
OvmfPkg/OvmfPkgIa32.dsc
OvmfPkg/OvmfPkgIa32X64.dsc
OvmfPkg/OvmfPkgX64.dsc
OvmfPkg/OvmfXen.dsc

index 7e7139af6918c7bacce01db630f155459c99224a..59bd17f31b2842266844f145a818d4311a5e950e 100644 (file)
   gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0\r
 \r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800\r
index abeff262795f1e9f4f39271da99ddddd51eee2b4..e833fc716b07f3c3c263ce4c03bd9e564af6df68 100644 (file)
   gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0\r
 \r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800\r
index 99558e97eb6756d3cdb78689bf2ee6b3a0b22926..4fc715dc3681a828402f2d7bdc5cd77c6e03a5bb 100644 (file)
@@ -782,16 +782,16 @@ FvbInitialize (
     InitializeFvAndVariableStoreHeaders (Ptr);\r
   }\r
 \r
-  PcdStatus = PcdSet64S (PcdFlashNvStorageVariableBase64, (UINT32)(UINTN)Ptr);\r
+  PcdStatus = PcdSet64S (PcdFlashNvStorageVariableBase64, (UINTN)Ptr);\r
   ASSERT_RETURN_ERROR (PcdStatus);\r
 \r
   //\r
   // Initialize the Fault Tolerant Write data area\r
   //\r
   SubPtr    = (VOID *)((UINT8 *)Ptr + PcdGet32 (PcdFlashNvStorageVariableSize));\r
-  PcdStatus = PcdSet32S (\r
-                PcdFlashNvStorageFtwWorkingBase,\r
-                (UINT32)(UINTN)SubPtr\r
+  PcdStatus = PcdSet64S (\r
+                PcdFlashNvStorageFtwWorkingBase64,\r
+                (UINTN)SubPtr\r
                 );\r
   ASSERT_RETURN_ERROR (PcdStatus);\r
 \r
@@ -800,9 +800,9 @@ FvbInitialize (
   //\r
   SubPtr = (VOID *)((UINT8 *)Ptr +\r
                     EMU_FVB_NUM_SPARE_BLOCKS * EMU_FVB_BLOCK_SIZE);\r
-  PcdStatus = PcdSet32S (\r
-                PcdFlashNvStorageFtwSpareBase,\r
-                (UINT32)(UINTN)SubPtr\r
+  PcdStatus = PcdSet64S (\r
+                PcdFlashNvStorageFtwSpareBase64,\r
+                (UINTN)SubPtr\r
                 );\r
   ASSERT_RETURN_ERROR (PcdStatus);\r
 \r
index 225ea27f5ffd27ddd9b5860e807afe0f82656302..0811545cf7b3476f84669ca5697caa69e76fcb4c 100644 (file)
@@ -59,8 +59,8 @@
 \r
 [Pcd]\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64\r
-  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase\r
-  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved\r
 \r
 [Depex]\r
index 717ad52733b9bf41ad5a9db28aca485366082681..5f4d9226791bcef2fbf24f183da8974b14a4319b 100644 (file)
   gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0\r
 \r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800\r
index 40fc695714b14bbc6845442a0e40f4ed6dd12f19..f8873d5155921d8cbecb67d5f0d1d03cd2cefb90 100644 (file)
 \r
 !if $(SMM_REQUIRE) == FALSE\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
 !endif\r
index fd5153ff486396cf74e89d4e2b16be44ee7b785d..9b72575da1005192e72e7fbb25d5dc324efc1dd9 100644 (file)
 \r
 !if $(SMM_REQUIRE) == FALSE\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
 !endif\r
index ab4b3f66a32c5135bf0054d9d85f8e970dff6f28..190cb7f09974aa5eb15d6a9d9b7d99106e17132a 100644 (file)
 \r
 !if $(SMM_REQUIRE) == FALSE\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
 !endif\r
index b484c0ae72f899eb3e17d900c263a42f14a85dd4..de0d30bfb8078f68d33cf6e36ba358f88442419e 100644 (file)
 [PcdsDynamicDefault]\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800\r