]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFspPkg/Library/BaseFspPlatformLib/FspPlatformMemory.c
BaseTools/BinToPcd: Fix Python 2.7.x compatibility issue
[mirror_edk2.git] / IntelFspPkg / Library / BaseFspPlatformLib / FspPlatformMemory.c
index 241cd284fbf9ff0bed2f15410839e44ee83a5c5d..ed5db933f11f79ab8279aa86d2516d53404ff8a8 100644 (file)
@@ -68,7 +68,7 @@ FspGetSystemMemorySize (
 }\r
 \r
 /**\r
-  Migrate bootloader data before destroying CAR.\r
+  Migrate BootLoader data before destroying CAR.\r
 \r
 **/\r
 VOID\r
@@ -86,14 +86,16 @@ FspMigrateTemporaryMemory (
   FSP_INIT_PARAMS           *FspInitParams;\r
   UINT32                    *NewStackTop;\r
   VOID                      *BootLoaderTempRamHob;\r
-  VOID                      *UpdDataRgnPtr;\r
+  UINT32                    UpdDataRgnPtr;\r
+  UINT32                    MemoryInitUpdPtr;\r
+  UINT32                    SiliconInitUpdPtr;\r
   VOID                      *PlatformDataPtr;\r
   UINT8                      ApiMode;\r
     \r
   ApiMode = GetFspApiCallingMode ();\r
 \r
   //\r
-  // Get the temporary memory range used by the bootloader\r
+  // Get the temporary memory range used by the BootLoader\r
   //\r
   BootLoaderTempRamStart = PcdGet32(PcdTemporaryRamBase);\r
   BootLoaderTempRamSize  = PcdGet32(PcdTemporaryRamSize) - PcdGet32(PcdFspTemporaryRamSize);\r
@@ -105,7 +107,7 @@ FspMigrateTemporaryMemory (
   if (ApiMode == 0) {\r
     BootLoaderTempRamHob = BuildGuidHob (&gFspBootLoaderTemporaryMemoryGuid, BootLoaderTempRamSize);\r
   } else {\r
-    BootLoaderTempRamHob = (VOID *)AllocatePool (BootLoaderTempRamSize);\r
+    BootLoaderTempRamHob = (VOID *)AllocatePages (EFI_SIZE_TO_PAGES (BootLoaderTempRamSize));\r
   }\r
   ASSERT(BootLoaderTempRamHob != NULL);\r
 \r
@@ -150,9 +152,20 @@ FspMigrateTemporaryMemory (
   //\r
   // Update UPD pointer in FSP Global Data\r
   //\r
-  UpdDataRgnPtr = ((FSP_INIT_RT_COMMON_BUFFER *)FspInitParams->RtBufferPtr)->UpdDataRgnPtr;\r
-  if (UpdDataRgnPtr != NULL) {\r
-    SetFspUpdDataPointer (UpdDataRgnPtr);\r
+  if (ApiMode == 0) {\r
+    UpdDataRgnPtr = (UINT32)((UINT32 *)GetFspUpdDataPointer ());\r
+    if (UpdDataRgnPtr >= BootLoaderTempRamStart && UpdDataRgnPtr < BootLoaderTempRamEnd) {\r
+      MemoryInitUpdPtr = (UINT32)((UINT32 *)GetFspMemoryInitUpdDataPointer ());\r
+      SiliconInitUpdPtr = (UINT32)((UINT32 *)GetFspSiliconInitUpdDataPointer ());\r
+      SetFspUpdDataPointer ((VOID *)(UpdDataRgnPtr + OffsetGap));\r
+      SetFspMemoryInitUpdDataPointer ((VOID *)(MemoryInitUpdPtr + OffsetGap));\r
+      SetFspSiliconInitUpdDataPointer ((VOID *)(SiliconInitUpdPtr + OffsetGap));\r
+    }\r
+  } else {\r
+    MemoryInitUpdPtr = (UINT32)((UINT32 *)GetFspMemoryInitUpdDataPointer ());\r
+    if (MemoryInitUpdPtr >= BootLoaderTempRamStart && MemoryInitUpdPtr < BootLoaderTempRamEnd) {\r
+      SetFspMemoryInitUpdDataPointer ((VOID *)(MemoryInitUpdPtr + OffsetGap));\r
+    }\r
   }\r
 \r
   //\r