ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED, AddMem,\r
EfiRuntimeServicesData},\r
\r
-#ifdef MEMORY_4G\r
- {0xA0000000, 0xDDFA0000, EFI_RESOURCE_SYSTEM_MEMORY,\r
- SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES,\r
- ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory},\r
-#else\r
-#ifdef MEMORY_8G\r
- {0xA0000000, 0xE0000000, EFI_RESOURCE_SYSTEM_MEMORY,\r
- SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES,\r
- ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory},\r
- {0x180000000, 0xFC8A0000, EFI_RESOURCE_SYSTEM_MEMORY,\r
- SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES,\r
- ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory},\r
-#else\r
-#ifdef MEMORY_10G\r
- {0xA0000000, 0x254AC0000, EFI_RESOURCE_SYSTEM_MEMORY,\r
- SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES,\r
- ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory},\r
-#else\r
- {0xA0000000, 0x15AE00000, EFI_RESOURCE_SYSTEM_MEMORY,\r
- SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES,\r
- ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory},\r
-\r
-#endif\r
-#endif\r
-#endif\r
-\r
/* Other */\r
\r
/* AOP_SS_MSG_RAM */\r
#include <Library/HobLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
+#include <Library/FdtParserLib.h>
// This varies by device
#include <Configuration/DeviceMemoryMap.h>
ARM_MEMORY_REGION_DESCRIPTOR
MemoryDescriptor[MAX_ARM_MEMORY_REGION_DESCRIPTOR_COUNT];
UINTN Index = 0;
+ UINTN Node = 0;
+ UINTN MemoryBase = 0;
+ UINTN MemorySize = 0;
+ UINTN MemoryTotal = 0;
+ fdt *Fdt;
- // Ensure PcdSystemMemorySize has been set
- ASSERT(PcdGet64(PcdSystemMemorySize) != 0);
+ Fdt = GetFdt();
+ ASSERT(Fdt != NULL);
// Run through each memory descriptor
while (MemoryDescriptorEx->Length != 0) {
+ if (MemoryDescriptorEx->MemoryType == EfiConventionalMemory)
+ MemoryTotal += MemoryDescriptorEx->Length;
switch (MemoryDescriptorEx->HobOption) {
case AddMem:
case AddDev:
MemoryDescriptorEx++;
}
+ while (fdt_get_memory(Fdt, (int)Node, (uint64_t*)&MemoryBase, (uint64_t*)&MemorySize)) {
+ MemoryTotal += MemorySize;
+ DEBUG((
+ EFI_D_INFO,
+ "FDT Memory %-2d: 0x%016llx - 0x%016llx (0x%016llx)\n",
+ Node, MemoryBase, (MemoryBase + MemorySize), MemorySize
+ ));
+ ASSERT(Index < MAX_ARM_MEMORY_REGION_DESCRIPTOR_COUNT);
+ MemoryDescriptor[Index].PhysicalBase = MemoryBase;
+ MemoryDescriptor[Index].VirtualBase = MemoryBase;
+ MemoryDescriptor[Index].Length = MemorySize;
+ MemoryDescriptor[Index].Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
+ BuildResourceDescriptorHob(
+ EFI_RESOURCE_SYSTEM_MEMORY,
+ SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES,
+ MemoryBase,
+ MemorySize
+ );
+ BuildMemoryAllocationHob(
+ MemoryBase,
+ MemorySize,
+ EfiConventionalMemory
+ );
+ Index++;
+ Node++;
+ }
+
// Last one (terminator)
ASSERT(Index < MAX_ARM_MEMORY_REGION_DESCRIPTOR_COUNT);
MemoryDescriptor[Index].PhysicalBase = 0;
MemoryDescriptor[Index].Length = 0;
MemoryDescriptor[Index].Attributes = 0;
+ DEBUG((EFI_D_INFO, "Memory Total: 0x%016lx (%d GiB)\n", MemoryTotal, MemoryTotal / (1024 * 1024 * 1024)));
+
// Build Memory Allocation Hob
DEBUG((EFI_D_INFO, "Configure MMU In \n"));
InitMmu(MemoryDescriptor);