]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c
ArmVirtPkg/ArmVirtMemoryInitPeiLib: handle memory above 4 GB on 32-bit ARM
[mirror_edk2.git] / 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