ArmPlatformPkg/MemoryInitPei: AARCH64 fix memory address calculations
authorGarrett Kirkendall <garrett.kirkendall@amd.com>
Mon, 16 Sep 2013 09:29:52 +0000 (09:29 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 16 Sep 2013 09:29:52 +0000 (09:29 +0000)
At least for AARCH64 currently, SystemMemoryTop and FdTop can overflow
while adding the 32-bit PCDs together.  The resulting value loses the
upper 32-bits.  Cast each of the values to EFI_PHYSICAL_ADDRESS size
before doing the addition to prevent erroneous overflow.  There is currently
no 32-bit platform in EDKII open source that will overflow and this change
would not fix that problem anyway.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Garrett Kirkendall <garrett.kirkendall@amd.com>
Reviewed-by: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14675 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.c

index 192486c..d1bf394 100755 (executable)
@@ -101,8 +101,8 @@ MemoryPeim (
       PcdGet32 (PcdSystemMemorySize)\r
   );\r
 \r
-  SystemMemoryTop = PcdGet32 (PcdSystemMemoryBase) + PcdGet32 (PcdSystemMemorySize);\r
-  FdTop = PcdGet32(PcdFdBaseAddress) + PcdGet32(PcdFdSize);\r
+  SystemMemoryTop = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdSystemMemoryBase) + (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdSystemMemorySize);\r
+  FdTop = (EFI_PHYSICAL_ADDRESS)PcdGet32(PcdFdBaseAddress) + (EFI_PHYSICAL_ADDRESS)PcdGet32(PcdFdSize);\r
 \r
   // EDK2 does not have the concept of boot firmware copied into DRAM. To avoid the DXE\r
   // core to overwrite this area we must mark the region with the attribute non-present\r