]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmVirtPkg/ArmVirtMemoryInitPeiLib: handle memory above 4 GB on 32-bit ARM
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Wed, 9 Sep 2015 14:48:33 +0000 (14:48 +0000)
committerabiesheuvel <abiesheuvel@Edk2>
Wed, 9 Sep 2015 14:48:33 +0000 (14:48 +0000)
On 32-bit ARM, split system memory into a region below (and up to) 4 GB
and a region above 4 GB. This is necessary to get the DXE core to consider
the former as the resource descriptor that describes the primary memory
region that also covers the PHIT region.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18427 6f19259b-4bc3-4df7-8a09-765794883524

ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c

index 8ce63b4596e2c08148116031e48729ebf219fb5e..f6c69152848ed4a74af021520a95d00a598574df 100644 (file)
@@ -56,6 +56,7 @@ MemoryPeim (
   )\r
 {\r
   EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes;\r
+  UINT64                      SystemMemoryTop;\r
 \r
   // Ensure PcdSystemMemorySize has been set\r
   ASSERT (PcdGet64 (PcdSystemMemorySize) != 0);\r
@@ -73,12 +74,30 @@ MemoryPeim (
       EFI_RESOURCE_ATTRIBUTE_TESTED\r
   );\r
 \r
-  BuildResourceDescriptorHob (\r
-      EFI_RESOURCE_SYSTEM_MEMORY,\r
-      ResourceAttributes,\r
-      PcdGet64 (PcdSystemMemoryBase),\r
-      PcdGet64 (PcdSystemMemorySize)\r
-  );\r
+  SystemMemoryTop = PcdGet64 (PcdSystemMemoryBase) +\r
+                    PcdGet64 (PcdSystemMemorySize);\r
+\r
+  if (SystemMemoryTop - 1 > MAX_ADDRESS) {\r
+    BuildResourceDescriptorHob (\r
+        EFI_RESOURCE_SYSTEM_MEMORY,\r
+        ResourceAttributes,\r
+        PcdGet64 (PcdSystemMemoryBase),\r
+        (UINT64)MAX_ADDRESS - PcdGet64 (PcdSystemMemoryBase) + 1\r
+        );\r
+    BuildResourceDescriptorHob (\r
+        EFI_RESOURCE_SYSTEM_MEMORY,\r
+        ResourceAttributes,\r
+        (UINT64)MAX_ADDRESS + 1,\r
+        SystemMemoryTop - MAX_ADDRESS - 1\r
+        );\r
+  } else {\r
+    BuildResourceDescriptorHob (\r
+        EFI_RESOURCE_SYSTEM_MEMORY,\r
+        ResourceAttributes,\r
+        PcdGet64 (PcdSystemMemoryBase),\r
+        PcdGet64 (PcdSystemMemorySize)\r
+        );\r
+  }\r
 \r
   //\r
   // When running under virtualization, the PI/UEFI memory region may be\r