@@ -112,12 +112,6 @@
gArmTokenSpaceGuid.PcdHypFvBaseAddress|0|UINT32|0x0000003C
gArmTokenSpaceGuid.PcdHypFvSize|0|UINT32|0x0000003D
- # System Memory (DRAM): These PCDs define the region of in-built system memory
- # Some platforms can get DRAM extensions, these additional regions will be declared
- # to UEFI by ArmPlatformLib
- gArmTokenSpaceGuid.PcdSystemMemoryBase|0|UINT64|0x00000029
- gArmTokenSpaceGuid.PcdSystemMemorySize|0|UINT64|0x0000002A
-
# Use ClusterId + CoreId to identify the PrimaryCore
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask|0xF03|UINT32|0x00000031
# The Primary Core is ClusterId[0] & CoreId[0]
@@ -139,6 +133,12 @@
[PcdsFixedAtBuild.common,PcdsDynamic.common]
+ # System Memory (DRAM): These PCDs define the region of in-built system memory
+ # Some platforms can get DRAM extensions, these additional regions will be declared
+ # to UEFI by ArmPlatformLib
+ gArmTokenSpaceGuid.PcdSystemMemoryBase|0|UINT64|0x00000029
+ gArmTokenSpaceGuid.PcdSystemMemorySize|0|UINT64|0x0000002A
+
#
# ARM Architectural Timer
#
@@ -77,10 +77,11 @@
[FeaturePcd]
gArmTokenSpaceGuid.PcdArmPsciSupport
-[FixedPcd]
+[Pcd]
gArmTokenSpaceGuid.PcdSystemMemoryBase
gArmTokenSpaceGuid.PcdSystemMemorySize
+[FixedPcd]
gArmTokenSpaceGuid.PcdArmMachineType
gArmTokenSpaceGuid.PcdArmLinuxFdtMaxOffset
gArmTokenSpaceGuid.PcdArmLinuxFdtAlignment
@@ -37,9 +37,10 @@
gArmTokenSpaceGuid.PcdFdBaseAddress
gArmTokenSpaceGuid.PcdFdSize
- gArmTokenSpaceGuid.PcdSystemMemoryBase
- gArmTokenSpaceGuid.PcdSystemMemorySize
-
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize
gArmPlatformTokenSpaceGuid.PcdPeiGlobalVariableSize
+[Pcd]
+ gArmTokenSpaceGuid.PcdSystemMemoryBase
+ gArmTokenSpaceGuid.PcdSystemMemorySize
+
@@ -48,8 +48,6 @@
gArmTokenSpaceGuid.PcdFdBaseAddress
gArmTokenSpaceGuid.PcdFdSize
- gArmTokenSpaceGuid.PcdSystemMemoryBase
- gArmTokenSpaceGuid.PcdSystemMemorySize
gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory
@@ -61,6 +59,10 @@
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData
+
+[Pcd]
+ gArmTokenSpaceGuid.PcdSystemMemoryBase
+ gArmTokenSpaceGuid.PcdSystemMemorySize
[depex]
TRUE
@@ -103,14 +103,6 @@ InitializeMemory (
DEBUG ((EFI_D_ERROR, "Memory Init PEIM Loaded\n"));
- // Ensure PcdSystemMemorySize has been set
- ASSERT (FixedPcdGet64 (PcdSystemMemorySize) != 0);
-
- SystemMemoryBase = (UINTN)FixedPcdGet64 (PcdSystemMemoryBase);
- SystemMemoryTop = SystemMemoryBase + (UINTN)FixedPcdGet64 (PcdSystemMemorySize);
- FdBase = (UINTN)PcdGet32 (PcdFdBaseAddress);
- FdTop = FdBase + (UINTN)PcdGet32 (PcdFdSize);
-
//
// Initialize the System Memory (DRAM)
//
@@ -119,6 +111,14 @@ InitializeMemory (
ArmPlatformInitializeSystemMemory ();
}
+ // Ensure PcdSystemMemorySize has been set
+ ASSERT (PcdGet64 (PcdSystemMemorySize) != 0);
+
+ SystemMemoryBase = (UINTN)PcdGet64 (PcdSystemMemoryBase);
+ SystemMemoryTop = SystemMemoryBase + (UINTN)PcdGet64 (PcdSystemMemorySize);
+ FdBase = (UINTN)PcdGet32 (PcdFdBaseAddress);
+ FdTop = FdBase + (UINTN)PcdGet32 (PcdFdSize);
+
//
// Declare the UEFI memory to PEI
//
@@ -55,8 +55,6 @@
gArmTokenSpaceGuid.PcdFdBaseAddress
gArmTokenSpaceGuid.PcdFdSize
- gArmTokenSpaceGuid.PcdSystemMemoryBase
- gArmTokenSpaceGuid.PcdSystemMemorySize
gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory
@@ -68,6 +66,10 @@
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData
+
+[Pcd]
+ gArmTokenSpaceGuid.PcdSystemMemoryBase
+ gArmTokenSpaceGuid.PcdSystemMemorySize
[Depex]
TRUE
@@ -88,8 +88,6 @@
gArmPlatformTokenSpaceGuid.PcdPeiGlobalVariableSize
- gArmTokenSpaceGuid.PcdSystemMemoryBase
- gArmTokenSpaceGuid.PcdSystemMemorySize
gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
gArmPlatformTokenSpaceGuid.PcdCoreCount
@@ -106,3 +104,7 @@
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode
gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData
+
+[Pcd]
+ gArmTokenSpaceGuid.PcdSystemMemoryBase
+ gArmTokenSpaceGuid.PcdSystemMemorySize
This changes the definition and a bunch of references to gArmTokenSpaceGuid.PcdSystemMemoryBase and gArmTokenSpaceGuid.PcdSystemMemorySize so they can be declared as dynamic PCDs by the platform. Also, move the non-SEC call to ArmPlatformInitializeSystemMemory() earlier, so a platform has a chance to set these PCDs before they are first referenced. The purpose is allowing dynamically instantiated virtual machines to declare the system memory by passing a device tree. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- ArmPkg/ArmPkg.dec | 12 ++++++------ ArmPkg/Library/BdsLib/BdsLib.inf | 3 ++- .../PrePi/PrePiArmPlatformGlobalVariableLib.inf | 7 ++++--- ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf | 6 ++++-- ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.c | 16 ++++++++-------- ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf | 6 ++++-- ArmPlatformPkg/PrePi/PeiUniCore.inf | 6 ++++-- 7 files changed, 32 insertions(+), 24 deletions(-)