gArmVirtTokenSpaceGuid = { 0x0B6F5CA7, 0x4F53, 0x445A, { 0xB7, 0x6E, 0x2E, 0x36, 0x5B, 0x80, 0x63, 0x66 } }\r
gEarlyPL011BaseAddressGuid = { 0xB199DEA9, 0xFD5C, 0x4A84, { 0x80, 0x82, 0x2F, 0x41, 0x70, 0x78, 0x03, 0x05 } }\r
gEarly16550UartBaseAddressGuid = { 0xea67ca3e, 0x1f54, 0x436b, { 0x97, 0x88, 0xd4, 0xeb, 0x29, 0xc3, 0x42, 0x67 } }\r
+ gArmVirtSystemMemorySizeGuid = { 0x504eccb9, 0x1bf0, 0x4420, { 0x86, 0x5d, 0xdc, 0x66, 0x06, 0xd4, 0x13, 0xbf } }\r
\r
gArmVirtVariableGuid = { 0x50bea1e5, 0xa2c5, 0x46e9, { 0x9b, 0x3a, 0x59, 0x59, 0x65, 0x16, 0xb0, 0x0a } }\r
\r
# Shadowing PEI modules is absolutely pointless when the NOR flash is emulated\r
gEfiMdeModulePkgTokenSpaceGuid.PcdShadowPeimOnBoot|FALSE\r
\r
+ # System Memory Size -- 128 MB initially, actual size will be fetched from DT\r
+ gArmTokenSpaceGuid.PcdSystemMemorySize|0x8000000\r
+\r
[PcdsFixedAtBuild.AARCH64]\r
# Clearing BIT0 in this PCD prevents installing a 32-bit SMBIOS entry point,\r
# if the entry point version is >= 3.0. AARCH64 OSes cannot assume the\r
# enumeration to complete before installing ACPI tables.\r
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|TRUE\r
\r
- # System Memory Size -- 1 MB initially, actual size will be fetched from DT\r
- gArmTokenSpaceGuid.PcdSystemMemorySize|0x00100000\r
-\r
gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum|0x0\r
gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|0x0\r
gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|0x0\r
{\r
EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes;\r
UINT64 SystemMemoryTop;\r
+ UINT64 SystemMemorySize;\r
+ VOID *Hob;\r
\r
// Ensure PcdSystemMemorySize has been set\r
ASSERT (PcdGet64 (PcdSystemMemorySize) != 0);\r
\r
+ SystemMemorySize = PcdGet64 (PcdSystemMemorySize);\r
+\r
+ Hob = GetFirstGuidHob (&gArmVirtSystemMemorySizeGuid);\r
+ if (Hob != NULL) {\r
+ SystemMemorySize = *(UINT64 *)GET_GUID_HOB_DATA (Hob);\r
+ }\r
+\r
//\r
// Now, the permanent memory has been installed, we can call AllocatePages()\r
//\r
EFI_RESOURCE_ATTRIBUTE_TESTED\r
);\r
\r
- SystemMemoryTop = PcdGet64 (PcdSystemMemoryBase) +\r
- PcdGet64 (PcdSystemMemorySize);\r
+ SystemMemoryTop = PcdGet64 (PcdSystemMemoryBase) + SystemMemorySize;\r
\r
if (SystemMemoryTop - 1 > MAX_ALLOC_ADDRESS) {\r
BuildResourceDescriptorHob (\r
EFI_RESOURCE_SYSTEM_MEMORY,\r
ResourceAttributes,\r
PcdGet64 (PcdSystemMemoryBase),\r
- PcdGet64 (PcdSystemMemorySize)\r
+ SystemMemorySize\r
);\r
}\r
\r
CacheMaintenanceLib\r
\r
[Guids]\r
+ gArmVirtSystemMemorySizeGuid\r
gEfiMemoryTypeInformationGuid\r
\r
[FeaturePcd]\r
\r
**/\r
\r
-#include <Base.h>\r
+#include <Uefi.h>\r
+#include <Pi/PiMultiPhase.h>\r
#include <Library/ArmLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/DebugLib.h>\r
+#include <Library/HobLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
\r
// Number of Virtual Memory Map Descriptors\r
#define MACH_VIRT_PERIPH_BASE 0x08000000\r
#define MACH_VIRT_PERIPH_SIZE SIZE_128MB\r
\r
+/**\r
+ Default library constructur that obtains the memory size from a PCD.\r
+\r
+ @return Always returns RETURN_SUCCESS\r
+\r
+**/\r
+RETURN_STATUS\r
+EFIAPI\r
+QemuVirtMemInfoLibConstructor (\r
+ VOID\r
+ )\r
+{\r
+ UINT64 Size;\r
+ VOID *Hob;\r
+\r
+ Size = PcdGet64 (PcdSystemMemorySize);\r
+ Hob = BuildGuidDataHob (&gArmVirtSystemMemorySizeGuid, &Size, sizeof Size);\r
+ ASSERT (Hob != NULL);\r
+\r
+ return RETURN_SUCCESS;\r
+}\r
+\r
/**\r
Return the Virtual Memory Map of your platform\r
\r
)\r
{\r
ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable;\r
+ VOID *MemorySizeHob;\r
\r
ASSERT (VirtualMemoryMap != NULL);\r
\r
+ MemorySizeHob = GetFirstGuidHob (&gArmVirtSystemMemorySizeGuid);\r
+ ASSERT (MemorySizeHob != NULL);\r
+ if (MemorySizeHob == NULL) {\r
+ return;\r
+ }\r
+\r
VirtualMemoryTable = AllocatePool (\r
sizeof (ARM_MEMORY_REGION_DESCRIPTOR) *\r
MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS\r
// System DRAM\r
VirtualMemoryTable[0].PhysicalBase = PcdGet64 (PcdSystemMemoryBase);\r
VirtualMemoryTable[0].VirtualBase = VirtualMemoryTable[0].PhysicalBase;\r
- VirtualMemoryTable[0].Length = PcdGet64 (PcdSystemMemorySize);\r
+ VirtualMemoryTable[0].Length = *(UINT64 *)GET_GUID_HOB_DATA (MemorySizeHob);\r
VirtualMemoryTable[0].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;\r
\r
DEBUG ((\r
MODULE_TYPE = BASE\r
VERSION_STRING = 1.0\r
LIBRARY_CLASS = ArmVirtMemInfoLib\r
+ CONSTRUCTOR = QemuVirtMemInfoLibConstructor\r
\r
[Sources]\r
QemuVirtMemInfoLib.c\r
BaseMemoryLib\r
DebugLib\r
MemoryAllocationLib\r
- PcdLib\r
+\r
+[Guids]\r
+ gArmVirtSystemMemorySizeGuid\r
\r
[Pcd]\r
gArmTokenSpaceGuid.PcdFvBaseAddress\r
BaseMemoryLib\r
DebugLib\r
FdtLib\r
- PcdLib\r
MemoryAllocationLib\r
\r
-[Pcd]\r
+[Guids]\r
+ gArmVirtSystemMemorySizeGuid\r
+\r
+[FixedPcd]\r
gArmTokenSpaceGuid.PcdFdBaseAddress\r
gArmTokenSpaceGuid.PcdFvBaseAddress\r
gArmTokenSpaceGuid.PcdSystemMemoryBase\r
gArmTokenSpaceGuid.PcdSystemMemorySize\r
-\r
-[FixedPcd]\r
gArmTokenSpaceGuid.PcdFdSize\r
gArmTokenSpaceGuid.PcdFvSize\r
gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress\r
\r
**/\r
\r
-#include <Base.h>\r
+#include <Uefi.h>\r
+#include <Pi/PiMultiPhase.h>\r
#include <Library/DebugLib.h>\r
-#include <Library/PcdLib.h>\r
+#include <Library/HobLib.h>\r
#include <libfdt.h>\r
\r
RETURN_STATUS\r
VOID\r
)\r
{\r
- VOID *DeviceTreeBase;\r
- INT32 Node, Prev;\r
- UINT64 NewBase, CurBase;\r
- UINT64 NewSize, CurSize;\r
- CONST CHAR8 *Type;\r
- INT32 Len;\r
- CONST UINT64 *RegProp;\r
- RETURN_STATUS PcdStatus;\r
+ VOID *DeviceTreeBase;\r
+ INT32 Node, Prev;\r
+ UINT64 NewBase, CurBase;\r
+ UINT64 NewSize, CurSize;\r
+ CONST CHAR8 *Type;\r
+ INT32 Len;\r
+ CONST UINT64 *RegProp;\r
+ VOID *Hob;\r
\r
NewBase = 0;\r
NewSize = 0;\r
// Make sure the start of DRAM matches our expectation\r
//\r
ASSERT (FixedPcdGet64 (PcdSystemMemoryBase) == NewBase);\r
- PcdStatus = PcdSet64S (PcdSystemMemorySize, NewSize);\r
- ASSERT_RETURN_ERROR (PcdStatus);\r
+\r
+ Hob = BuildGuidDataHob (\r
+ &gArmVirtSystemMemorySizeGuid,\r
+ &NewSize,\r
+ sizeof NewSize\r
+ );\r
+ ASSERT (Hob != NULL);\r
\r
//\r
// We need to make sure that the machine we are running on has at least\r