]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/ArmVExpressLibCTA15-A7: Mapped the extra 1GB of DRAM in the MMU
authorOlivier Martin <olivier.martin@arm.com>
Mon, 1 Jul 2013 14:14:37 +0000 (14:14 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 1 Jul 2013 14:14:37 +0000 (14:14 +0000)
ARM Versatile Express TC2 Core Tile has two profiles: the 1GB DRAM core tile or
the 2GB DRAM core tile profiles.
By default UEFI assumes, it is the 1GB core tile. In case of 2GB DRAM it declares
this additional 1GB resource system memory to UEFI. But the previous code did
not map this memory in the MMU Page Table.
So, the memory was allocatable by UEFI modules, but was not accessible by the CPU
(because not mapped).

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Reviewed-by: Leif Lindholm <Leif.Lindholm@linaro.org>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14449 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Mem.c

index d71e58ae892a110e30628bde6b6b9b962b303184..473b3f323ef4472ae005a855dbead17cd8f4e4eb 100644 (file)
@@ -59,20 +59,6 @@ ArmPlatformGetVirtualMemoryMap (
     CacheAttributes = DDR_ATTRIBUTES_UNCACHED;\r
   }\r
 \r
-  // Detect if it is a 1GB or 2GB Test Chip\r
-  //   [16:19]: 0=1GB TC2, 1=2GB TC2\r
-  if (MmioRead32(ARM_VE_SYS_PROCID0_REG) & (0xF << 16)) {\r
-    DEBUG((EFI_D_ERROR,"Info: 2GB Test Chip 2 detected.\n"));\r
-    BuildResourceDescriptorHob (\r
-        EFI_RESOURCE_SYSTEM_MEMORY,\r
-        EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
-          EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |\r
-          EFI_RESOURCE_ATTRIBUTE_TESTED,\r
-        PcdGet32 (PcdSystemMemoryBase) + PcdGet32 (PcdSystemMemorySize),\r
-        0x40000000\r
-    );\r
-  }\r
-\r
 #ifdef ARM_BIGLITTLE_TC2\r
   // Secure NOR0 Flash\r
   VirtualMemoryTable[Index].PhysicalBase    = ARM_VE_SEC_NOR0_BASE;\r
@@ -164,6 +150,26 @@ ArmPlatformGetVirtualMemoryMap (
   VirtualMemoryTable[Index].Length          = PcdGet32 (PcdSystemMemorySize);\r
   VirtualMemoryTable[Index].Attributes      = CacheAttributes;\r
 \r
+  // Detect if it is a 1GB or 2GB Test Chip\r
+  //   [16:19]: 0=1GB TC2, 1=2GB TC2\r
+  if (MmioRead32(ARM_VE_SYS_PROCID0_REG) & (0xF << 16)) {\r
+    DEBUG((EFI_D_ERROR,"Info: 2GB Test Chip 2 detected.\n"));\r
+    BuildResourceDescriptorHob (\r
+        EFI_RESOURCE_SYSTEM_MEMORY,\r
+        EFI_RESOURCE_ATTRIBUTE_PRESENT | EFI_RESOURCE_ATTRIBUTE_INITIALIZED | EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |\r
+          EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |\r
+          EFI_RESOURCE_ATTRIBUTE_TESTED,\r
+        PcdGet32 (PcdSystemMemoryBase) + PcdGet32 (PcdSystemMemorySize),\r
+        SIZE_1GB\r
+    );\r
+\r
+    // Map the additional 1GB into the MMU\r
+    VirtualMemoryTable[++Index].PhysicalBase  = PcdGet32 (PcdSystemMemoryBase) + PcdGet32 (PcdSystemMemorySize);\r
+    VirtualMemoryTable[Index].VirtualBase     = PcdGet32 (PcdSystemMemoryBase) + PcdGet32 (PcdSystemMemorySize);\r
+    VirtualMemoryTable[Index].Length          = SIZE_1GB;\r
+    VirtualMemoryTable[Index].Attributes      = CacheAttributes;\r
+  }\r
+\r
   // End of Table\r
   VirtualMemoryTable[++Index].PhysicalBase  = 0;\r
   VirtualMemoryTable[Index].VirtualBase     = 0;\r