From: BigfootACA Date: 星期三, 9 Feb 2022 18:37:04 +0000 (+0800) Subject: (TEST) MemoryInitPeiLib: auto get memory size from fdt X-Git-Tag: v2.0rc1~20 X-Git-Url: https://git.renegade-project.org/?a=commitdiff_plain;h=0055a479a92c0ebd989e906a69e2b073b9635cd8;p=edk2-sdm845.git (TEST) MemoryInitPeiLib: auto get memory size from fdt --- diff --git a/sdm845Pkg/Include/Configuration/DeviceMemoryMap.h b/sdm845Pkg/Include/Configuration/DeviceMemoryMap.h index dfa683a..1614798 100644 --- a/sdm845Pkg/Include/Configuration/DeviceMemoryMap.h +++ b/sdm845Pkg/Include/Configuration/DeviceMemoryMap.h @@ -158,32 +158,6 @@ static ARM_MEMORY_REGION_DESCRIPTOR_EX gDeviceMemoryDescriptorEx[] = { ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED, AddMem, EfiRuntimeServicesData}, -#ifdef MEMORY_4G - {0xA0000000, 0xDDFA0000, EFI_RESOURCE_SYSTEM_MEMORY, - SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory}, -#else -#ifdef MEMORY_8G - {0xA0000000, 0xE0000000, EFI_RESOURCE_SYSTEM_MEMORY, - SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory}, - {0x180000000, 0xFC8A0000, EFI_RESOURCE_SYSTEM_MEMORY, - SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory}, -#else -#ifdef MEMORY_10G - {0xA0000000, 0x254AC0000, EFI_RESOURCE_SYSTEM_MEMORY, - SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory}, -#else - {0xA0000000, 0x15AE00000, EFI_RESOURCE_SYSTEM_MEMORY, - SYSTEM_MEMORY_RESOURCE_ATTR_CAPABILITIES, - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK, AddMem, EfiConventionalMemory}, - -#endif -#endif -#endif - /* Other */ /* AOP_SS_MSG_RAM */ diff --git a/sdm845Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c b/sdm845Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c index 7f3756b..52bd856 100644 --- a/sdm845Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c +++ b/sdm845Pkg/Library/MemoryInitPeiLib/MemoryInitPeiLib.c @@ -21,6 +21,7 @@ #include #include #include +#include // This varies by device #include @@ -84,12 +85,19 @@ MemoryPeim(IN EFI_PHYSICAL_ADDRESS UefiMemoryBase, IN UINT64 UefiMemorySize) 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: @@ -112,6 +120,33 @@ MemoryPeim(IN EFI_PHYSICAL_ADDRESS UefiMemoryBase, IN UINT64 UefiMemorySize) 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; @@ -119,6 +154,8 @@ MemoryPeim(IN EFI_PHYSICAL_ADDRESS UefiMemoryBase, IN UINT64 UefiMemorySize) 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); diff --git a/sdm845Pkg/Library/MemoryInitPeiLib/PeiMemoryAllocationLib.inf b/sdm845Pkg/Library/MemoryInitPeiLib/PeiMemoryAllocationLib.inf index 7faf6c0..550e909 100644 --- a/sdm845Pkg/Library/MemoryInitPeiLib/PeiMemoryAllocationLib.inf +++ b/sdm845Pkg/Library/MemoryInitPeiLib/PeiMemoryAllocationLib.inf @@ -30,10 +30,12 @@ ArmPkg/ArmPkg.dec ArmPlatformPkg/ArmPlatformPkg.dec sdm845Pkg/sdm845Pkg.dec + SimpleInit.dec [LibraryClasses] DebugLib HobLib + SimpleInitLib ArmMmuLib ArmPlatformLib @@ -46,6 +48,7 @@ [FixedPcd] gArmTokenSpaceGuid.PcdSystemMemoryBase gArmTokenSpaceGuid.PcdSystemMemorySize + gsdm845PkgTokenSpaceGuid.DeviceTreeStore [Depex] TRUE