On Mon, Nov 18, 2019 at 05:34:25PM +0000, Pete Batard wrote: > Hi Leif, > > On 2019.11.18 17:20, Leif Lindholm wrote: > > On Thu, Nov 14, 2019 at 04:07:37PM +0000, Pete Batard wrote: > > > This patch improves memory initialization for the Raspberry Pi Platform > > > by: > > > > > > Using VideoCore mailbox data to reserve only the regions that are actually > > > mapped. Especially, besides the base RAM size, which was already set using > > > VideoCore data, we can set the GPU/VideoCore base address as well as the > > > extended RAM, which is the memory beyond 1 GB that is available on models > > > such as the Raspberry Pi 4 (for the 2GB or 4GB versions). > > > > > > Introducing a new PcdExtendedMemoryBase PCD for the base address of the > > > extended memory region, which currently cannot be retrieved from VideoCore > > > (MBOX_GET_ARM_MEMSIZE still only returns a single region on Bcm2711). > > > > > > Introducing a new RpiPlatformGetVirtualMemoryInfo() companion call to > > > ArmPlatformGetVirtualMemoryMap() that allows us greatly simplify the > > > registration of each segment in MemoryPeim() as well as making it easier > > > to maintain for future models. > > > > > > We also fix SoC register space that should have been marked as reserved > > > but wasn't until now and remove the unreferenced mSystemMemoryEnd extern > > > in MemoryInitPeiLib.c. > > > > Minor style comments and one copyright question below. > > > > > Signed-off-by: Pete Batard <p...@akeo.ie> > > > --- > > > Platform/RaspberryPi/Include/Library/RPiMem.h | > > > 26 +++ > > > Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.c | > > > 94 ++++---- > > > Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf | > > > 1 + > > > Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf | > > > 3 + > > > Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c | > > > 242 +++++++++++--------- > > > Platform/RaspberryPi/RaspberryPi.dec | > > > 1 + > > > 6 files changed, 210 insertions(+), 157 deletions(-) > > > > > > diff --git a/Platform/RaspberryPi/Include/Library/RPiMem.h > > > b/Platform/RaspberryPi/Include/Library/RPiMem.h > > > new file mode 100644 > > > index 000000000000..0bfc697ed094 > > > --- /dev/null > > > +++ b/Platform/RaspberryPi/Include/Library/RPiMem.h > > > @@ -0,0 +1,26 @@ > > > +/** @file > > > + * > > > + * Copyright (c) 2019, Pete Batard <p...@akeo.ie> > > > + * > > > + * SPDX-License-Identifier: BSD-2-Clause-Patent > > > + * > > > + **/ > > > + > > > +#ifndef __RPI_MEM_H__ > > > +#define __RPI_MEM_H__ > > > > As mentioned for earlier patch, please drop leading __. > > Will do. I assume this applies to trailing __ as well.
Thanks! Amusingly not. There are some toolchains that complain about leading __, but none I am aware of that complain about trailing ones. I think they may even be mandated by the coding style :) / Leif > > > > + > > > +#define RPI_MEM_BASIC_REGION 0 > > > +#define RPI_MEM_RUNTIME_REGION 1 > > > +#define RPI_MEM_RESERVED_REGION 2 > > > + > > > +typedef struct { > > > + CONST CHAR16* Name; > > > + UINTN Type; > > > +} RPI_MEMORY_REGION_INFO; > > > + > > > +VOID > > > +RpiPlatformGetVirtualMemoryInfo ( > > > + IN RPI_MEMORY_REGION_INFO** MemoryInfo > > > + ); > > > + > > > +#endif /* __RPI_MEM_H__ */ > > > diff --git > > > a/Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.c > > > b/Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.c > > > index 60cf397f8baa..3a0f7e19e993 100644 > > > --- a/Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.c > > > +++ b/Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.c > > > @@ -15,8 +15,7 @@ > > > #include <Library/HobLib.h> > > > #include <Library/MemoryAllocationLib.h> > > > #include <Library/PcdLib.h> > > > - > > > -extern UINT64 mSystemMemoryEnd; > > > +#include <Library/RPiMem.h> > > > VOID > > > BuildMemoryTypeInformationHob ( > > > @@ -39,23 +38,32 @@ InitMmu ( > > > } > > > } > > > +STATIC > > > +VOID > > > +AddBasicMemoryRegion ( > > > + IN ARM_MEMORY_REGION_DESCRIPTOR *Desc > > > +) > > > +{ > > > + BuildResourceDescriptorHob ( > > > + EFI_RESOURCE_SYSTEM_MEMORY, > > > + EFI_RESOURCE_ATTRIBUTE_PRESENT | > > > + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | > > > + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | > > > + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | > > > + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | > > > + EFI_RESOURCE_ATTRIBUTE_TESTED, > > > + Desc->PhysicalBase, > > > + Desc->Length > > > + ); > > > +} > > > + > > > STATIC > > > VOID > > > AddRuntimeServicesRegion ( > > > IN ARM_MEMORY_REGION_DESCRIPTOR *Desc > > > ) > > > { > > > - BuildResourceDescriptorHob ( > > > - EFI_RESOURCE_SYSTEM_MEMORY, > > > - EFI_RESOURCE_ATTRIBUTE_PRESENT | > > > - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_TESTED, > > > - Desc->PhysicalBase, > > > - Desc->Length > > > - ); > > > + AddBasicMemoryRegion (Desc); > > > BuildMemoryAllocationHob ( > > > Desc->PhysicalBase, > > > @@ -70,17 +78,7 @@ AddReservedMemoryRegion ( > > > IN ARM_MEMORY_REGION_DESCRIPTOR *Desc > > > ) > > > { > > > - BuildResourceDescriptorHob ( > > > - EFI_RESOURCE_SYSTEM_MEMORY, > > > - EFI_RESOURCE_ATTRIBUTE_PRESENT | > > > - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_TESTED, > > > - Desc->PhysicalBase, > > > - Desc->Length > > > - ); > > > + AddBasicMemoryRegion (Desc); > > > BuildMemoryAllocationHob ( > > > Desc->PhysicalBase, > > > @@ -89,6 +87,12 @@ AddReservedMemoryRegion ( > > > ); > > > } > > > +void (*AddRegion[]) (IN ARM_MEMORY_REGION_DESCRIPTOR *Desc) = { > > > + AddBasicMemoryRegion, > > > + AddRuntimeServicesRegion, > > > + AddReservedMemoryRegion, > > > + }; > > > + > > > /*++ > > > Routine Description: > > > @@ -113,36 +117,28 @@ MemoryPeim ( > > > ) > > > { > > > ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable; > > > + RPI_MEMORY_REGION_INFO *MemoryInfo; > > > + UINTN Index; > > > // Get Virtual Memory Map from the Platform Library > > > ArmPlatformGetVirtualMemoryMap (&MemoryTable); > > > - // Ensure PcdSystemMemorySize has been set > > > - ASSERT (PcdGet64 (PcdSystemMemorySize) != 0); > > > + // Get additional info not provided by MemoryTable > > > + RpiPlatformGetVirtualMemoryInfo (&MemoryInfo); > > > - // FD without variable store > > > - AddReservedMemoryRegion (&MemoryTable[0]); > > > - > > > - // Variable store. > > > - AddRuntimeServicesRegion (&MemoryTable[1]); > > > - > > > - // Trusted Firmware region > > > - AddReservedMemoryRegion (&MemoryTable[2]); > > > - > > > - // Usable memory. > > > - BuildResourceDescriptorHob ( > > > - EFI_RESOURCE_SYSTEM_MEMORY, > > > - EFI_RESOURCE_ATTRIBUTE_PRESENT | > > > - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | > > > - EFI_RESOURCE_ATTRIBUTE_TESTED, > > > - MemoryTable[3].PhysicalBase, > > > - MemoryTable[3].Length > > > - ); > > > - > > > - AddReservedMemoryRegion (&MemoryTable[4]); > > > + // Register each memory region > > > + for (Index = 0; MemoryTable[Index].Length != 0; Index++) { > > > + ASSERT (MemoryInfo[Index].Type < ARRAY_SIZE (AddRegion)); > > > + DEBUG ((DEBUG_INFO, "%s:\n" > > > + "\tPhysicalBase: 0x%lX\n" > > > + "\tVirtualBase: 0x%lX\n" > > > + "\tLength: 0x%lX\n", > > > + MemoryInfo[Index].Name, > > > + MemoryTable[Index].PhysicalBase, > > > + MemoryTable[Index].VirtualBase, > > > + MemoryTable[Index].Length)); > > > + AddRegion[MemoryInfo[Index].Type] (&MemoryTable[Index]); > > > + } > > > // Build Memory Allocation Hob > > > InitMmu (MemoryTable); > > > diff --git > > > a/Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > > > b/Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > > > index 0084c010936d..d39210c7a4f1 100644 > > > --- a/Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > > > +++ b/Platform/RaspberryPi/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > > > @@ -24,6 +24,7 @@ [Packages] > > > EmbeddedPkg/EmbeddedPkg.dec > > > ArmPkg/ArmPkg.dec > > > ArmPlatformPkg/ArmPlatformPkg.dec > > > + Platform/RaspberryPi/RaspberryPi.dec > > > [LibraryClasses] > > > DebugLib > > > diff --git a/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf > > > b/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf > > > index 85462febdd8d..c0e2a75451c3 100644 > > > --- a/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf > > > +++ b/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf > > > @@ -22,6 +22,7 @@ [Packages] > > > EmbeddedPkg/EmbeddedPkg.dec > > > ArmPkg/ArmPkg.dec > > > ArmPlatformPkg/ArmPlatformPkg.dec > > > + Silicon/Broadcom/Bcm27xx/Bcm27xx.dec > > > Silicon/Broadcom/Bcm283x/Bcm283x.dec > > > Platform/RaspberryPi/RaspberryPi.dec > > > @@ -50,10 +51,12 @@ [FixedPcd] > > > gEmbeddedTokenSpaceGuid.PcdDmaDeviceOffset > > > gArmTokenSpaceGuid.PcdSystemMemoryBase > > > gArmTokenSpaceGuid.PcdSystemMemorySize > > > + gRaspberryPiTokenSpaceGuid.PcdExtendedMemoryBase > > > gRaspberryPiTokenSpaceGuid.PcdNvStorageEventLogSize > > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize > > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize > > > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize > > > + gBcm27xxTokenSpaceGuid.PcdBcm27xxRegistersAddress > > > gBcm283xTokenSpaceGuid.PcdBcm283xRegistersAddress > > > [Ppis] > > > diff --git a/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c > > > b/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c > > > index 2bfd3f020a6e..1a6a13b9591b 100644 > > > --- a/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c > > > +++ b/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c > > > @@ -1,7 +1,9 @@ > > > /** @file > > > * > > > + * Copyright (c) 2019, Pete Batard <p...@akeo.ie> > > > * Copyright (c) 2017-2018, Andrey Warkentin > > > <andrey.warken...@gmail.com> > > > * Copyright (c) 2014, Linaro Limited. All rights reserved. > > > + * Copyright (c) 2013-2018, ARM Limited. All rights reserved. > > > > This confuses me slightly - is it an indication that some code has > > been copied from a file including this copyright? > > It is. I copy/pasted some code from ArmJunoMem.c that had this copyright, > which I then proceeded to modify. Hence the reason why you find the > copyright notice. Sure, that's fine. Could you add a line about that in commit message though? (Literally just "incorporates some code from ArmJunoMem.c" would suffice.) > > > > > * > > > * SPDX-License-Identifier: BSD-2-Clause-Patent > > > * > > > @@ -9,8 +11,11 @@ > > > #include <Library/ArmPlatformLib.h> > > > #include <Library/DebugLib.h> > > > -#include <IndustryStandard/Bcm2836.h> > > > #include <Library/PcdLib.h> > > > +#include <Library/RPiMem.h> > > > +#include <Library/MemoryAllocationLib.h> > > > > Could you move MemoryAllocationLib.h above PcdLib.h? > > Will do. > > I will also take into account comments for the other patches wrt to > alphabetical order for the PCDs as well as the additional comment for x1 in > the assembly before submitting a v2. Thanks! / LEif > Regards, > > /Pete > > > > > / > > Leif > > > > > +#include <IndustryStandard/Bcm2711.h> > > > +#include <IndustryStandard/Bcm2836.h> > > > UINT64 mSystemMemoryBase; > > > extern UINT64 mSystemMemoryEnd; > > > @@ -18,6 +23,13 @@ UINT64 mVideoCoreBase; > > > UINT64 mVideoCoreSize; > > > UINT32 mBoardRevision; > > > + > > > +// The total number of descriptors, including the final "end-of-table" > > > descriptor. > > > +#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 10 > > > + > > > +STATIC BOOLEAN VirtualMemoryInfoInitialized = FALSE; > > > +STATIC RPI_MEMORY_REGION_INFO > > > VirtualMemoryInfo[MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS]; > > > + > > > #define VariablesSize (FixedPcdGet32(PcdFlashNvStorageVariableSize) + > > > \ > > > FixedPcdGet32(PcdFlashNvStorageFtwWorkingSize) + > > > \ > > > FixedPcdGet32(PcdFlashNvStorageFtwSpareSize) + \ > > > @@ -29,49 +41,6 @@ UINT32 mBoardRevision; > > > #define ATFBase (FixedPcdGet64(PcdFdBaseAddress) + > > > FixedPcdGet32(PcdFdSize)) > > > -STATIC ARM_MEMORY_REGION_DESCRIPTOR RaspberryPiMemoryRegionDescriptor[] > > > = { > > > - { > > > - /* Firmware Volume. */ > > > - FixedPcdGet64 (PcdFdBaseAddress), FixedPcdGet64 (PcdFdBaseAddress), > > > - FixedPcdGet32 (PcdFdSize) - VariablesSize, > > > - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK > > > - }, > > > - { > > > - /* Variables Volume. */ > > > - VariablesBase, VariablesBase, > > > - VariablesSize, > > > - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK > > > - }, > > > - { > > > - /* ATF reserved RAM. */ > > > - ATFBase, ATFBase, > > > - FixedPcdGet64 (PcdSystemMemoryBase) - ATFBase, > > > - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK > > > - }, > > > - { > > > - /* System RAM. */ > > > - FixedPcdGet64 (PcdSystemMemoryBase), FixedPcdGet64 > > > (PcdSystemMemoryBase), > > > - 0, > > > - ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK > > > - }, > > > - { > > > - /* Reserved GPU RAM. */ > > > - 0, > > > - 0, > > > - 0, > > > - ARM_MEMORY_REGION_ATTRIBUTE_DEVICE > > > - }, > > > - { > > > - /* SOC registers. */ > > > - BCM2836_SOC_REGISTERS, > > > - BCM2836_SOC_REGISTERS, > > > - BCM2836_SOC_REGISTER_LENGTH, > > > - ARM_MEMORY_REGION_ATTRIBUTE_DEVICE > > > - }, > > > - { > > > - } > > > -}; > > > - > > > /** > > > Return the Virtual Memory Map of your platform > > > @@ -89,6 +58,11 @@ ArmPlatformGetVirtualMemoryMap ( > > > IN ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap > > > ) > > > { > > > + UINTN Index = 0; > > > + UINTN GpuIndex; > > > + INT64 ExtendedMemorySize; > > > + ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable; > > > + > > > // Early output of the info we got from VideoCore can prove valuable. > > > DEBUG ((DEBUG_INFO, "Board Rev: 0x%lX\n", mBoardRevision)); > > > DEBUG ((DEBUG_INFO, "Base RAM : 0x%ll08X (Size 0x%ll08X)\n", > > > mSystemMemoryBase, mSystemMemoryEnd + 1)); > > > @@ -97,68 +71,120 @@ ArmPlatformGetVirtualMemoryMap ( > > > ASSERT (mSystemMemoryBase == 0); > > > ASSERT (VirtualMemoryMap != NULL); > > > - RaspberryPiMemoryRegionDescriptor[3].Length = mSystemMemoryEnd + 1 - > > > - FixedPcdGet64 (PcdSystemMemoryBase); > > > - > > > - RaspberryPiMemoryRegionDescriptor[4].PhysicalBase = > > > - RaspberryPiMemoryRegionDescriptor[3].PhysicalBase + > > > - RaspberryPiMemoryRegionDescriptor[3].Length; > > > - > > > - RaspberryPiMemoryRegionDescriptor[4].VirtualBase = > > > - RaspberryPiMemoryRegionDescriptor[4].PhysicalBase; > > > - > > > - RaspberryPiMemoryRegionDescriptor[4].Length = > > > - RaspberryPiMemoryRegionDescriptor[5].PhysicalBase - > > > - RaspberryPiMemoryRegionDescriptor[4].PhysicalBase; > > > - > > > - DEBUG ((DEBUG_INFO, "FD:\n" > > > - "\tPhysicalBase: 0x%lX\n" > > > - "\tVirtualBase: 0x%lX\n" > > > - "\tLength: 0x%lX\n", > > > - RaspberryPiMemoryRegionDescriptor[0].PhysicalBase, > > > - RaspberryPiMemoryRegionDescriptor[0].VirtualBase, > > > - RaspberryPiMemoryRegionDescriptor[0].Length + > > > - RaspberryPiMemoryRegionDescriptor[1].Length)); > > > - > > > - DEBUG ((DEBUG_INFO, "Variables (part of FD):\n" > > > - "\tPhysicalBase: 0x%lX\n" > > > - "\tVirtualBase: 0x%lX\n" > > > - "\tLength: 0x%lX\n", > > > - RaspberryPiMemoryRegionDescriptor[1].PhysicalBase, > > > - RaspberryPiMemoryRegionDescriptor[1].VirtualBase, > > > - RaspberryPiMemoryRegionDescriptor[1].Length)); > > > - > > > - DEBUG ((DEBUG_INFO, "ATF RAM:\n" > > > - "\tPhysicalBase: 0x%lX\n" > > > - "\tVirtualBase: 0x%lX\n" > > > - "\tLength: 0x%lX\n", > > > - RaspberryPiMemoryRegionDescriptor[2].PhysicalBase, > > > - RaspberryPiMemoryRegionDescriptor[2].VirtualBase, > > > - RaspberryPiMemoryRegionDescriptor[2].Length)); > > > - > > > - DEBUG ((DEBUG_INFO, "System RAM:\n" > > > - "\tPhysicalBase: 0x%lX\n" > > > - "\tVirtualBase: 0x%lX\n" > > > - "\tLength: 0x%lX\n", > > > - RaspberryPiMemoryRegionDescriptor[3].PhysicalBase, > > > - RaspberryPiMemoryRegionDescriptor[3].VirtualBase, > > > - RaspberryPiMemoryRegionDescriptor[3].Length)); > > > - > > > - DEBUG ((DEBUG_INFO, "GPU Reserved:\n" > > > - "\tPhysicalBase: 0x%lX\n" > > > - "\tVirtualBase: 0x%lX\n" > > > - "\tLength: 0x%lX\n", > > > - RaspberryPiMemoryRegionDescriptor[4].PhysicalBase, > > > - RaspberryPiMemoryRegionDescriptor[4].VirtualBase, > > > - RaspberryPiMemoryRegionDescriptor[4].Length)); > > > - > > > - DEBUG ((DEBUG_INFO, "SoC reserved:\n" > > > - "\tPhysicalBase: 0x%lX\n" > > > - "\tVirtualBase: 0x%lX\n" > > > - "\tLength: 0x%lX\n", > > > - RaspberryPiMemoryRegionDescriptor[5].PhysicalBase, > > > - RaspberryPiMemoryRegionDescriptor[5].VirtualBase, > > > - RaspberryPiMemoryRegionDescriptor[5].Length)); > > > - > > > - *VirtualMemoryMap = RaspberryPiMemoryRegionDescriptor; > > > + VirtualMemoryTable = (ARM_MEMORY_REGION_DESCRIPTOR*)AllocatePages > > > + (EFI_SIZE_TO_PAGES (sizeof > > > (ARM_MEMORY_REGION_DESCRIPTOR) * > > > + MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS)); > > > + if (VirtualMemoryTable == NULL) { > > > + return; > > > + } > > > + > > > + > > > + // Firmware Volume > > > + VirtualMemoryTable[Index].PhysicalBase = FixedPcdGet64 > > > (PcdFdBaseAddress); > > > + VirtualMemoryTable[Index].VirtualBase = > > > VirtualMemoryTable[Index].PhysicalBase; > > > + VirtualMemoryTable[Index].Length = FixedPcdGet32 (PcdFdSize) > > > - VariablesSize; > > > + VirtualMemoryTable[Index].Attributes = > > > ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK; > > > + VirtualMemoryInfo[Index].Type = RPI_MEM_RESERVED_REGION; > > > + VirtualMemoryInfo[Index++].Name = L"FD"; > > > + > > > + // Variable Volume > > > + VirtualMemoryTable[Index].PhysicalBase = VariablesBase; > > > + VirtualMemoryTable[Index].VirtualBase = > > > VirtualMemoryTable[Index].PhysicalBase; > > > + VirtualMemoryTable[Index].Length = VariablesSize; > > > + VirtualMemoryTable[Index].Attributes = > > > ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK; > > > + VirtualMemoryInfo[Index].Type = RPI_MEM_RUNTIME_REGION; > > > + VirtualMemoryInfo[Index++].Name = L"FD Variables"; > > > + > > > + // TF-A reserved RAM > > > + VirtualMemoryTable[Index].PhysicalBase = ATFBase; > > > + VirtualMemoryTable[Index].VirtualBase = > > > VirtualMemoryTable[Index].PhysicalBase; > > > + VirtualMemoryTable[Index].Length = FixedPcdGet64 > > > (PcdSystemMemoryBase) - ATFBase; > > > + VirtualMemoryTable[Index].Attributes = > > > ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK; > > > + VirtualMemoryInfo[Index].Type = RPI_MEM_RESERVED_REGION; > > > + VirtualMemoryInfo[Index++].Name = L"TF-A RAM"; > > > + > > > + // Base System RAM > > > + VirtualMemoryTable[Index].PhysicalBase = FixedPcdGet64 > > > (PcdSystemMemoryBase); > > > + VirtualMemoryTable[Index].VirtualBase = > > > VirtualMemoryTable[Index].PhysicalBase; > > > + VirtualMemoryTable[Index].Length = mSystemMemoryEnd + 1 - > > > FixedPcdGet64 (PcdSystemMemoryBase); > > > + VirtualMemoryTable[Index].Attributes = > > > ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK; > > > + VirtualMemoryInfo[Index].Type = RPI_MEM_BASIC_REGION; > > > + VirtualMemoryInfo[Index++].Name = L"Base System RAM"; > > > + > > > + // GPU Reserved > > > + GpuIndex = Index; > > > + VirtualMemoryTable[Index].PhysicalBase = mVideoCoreBase; > > > + VirtualMemoryTable[Index].VirtualBase = > > > VirtualMemoryTable[Index].PhysicalBase; > > > + VirtualMemoryTable[Index].Length = mVideoCoreSize; > > > + VirtualMemoryTable[Index].Attributes = > > > ARM_MEMORY_REGION_ATTRIBUTE_DEVICE; > > > + VirtualMemoryInfo[Index].Type = RPI_MEM_RESERVED_REGION; > > > + VirtualMemoryInfo[Index++].Name = L"GPU Reserved"; > > > + > > > + // Compute the amount of extended RAM available on this platform > > > + ExtendedMemorySize = SIZE_256MB; > > > + ExtendedMemorySize <<= (mBoardRevision >> 20) & 0x07; > > > + ExtendedMemorySize -= SIZE_1GB; > > > + if (ExtendedMemorySize > 0) { > > > + VirtualMemoryTable[Index].PhysicalBase = FixedPcdGet64 > > > (PcdExtendedMemoryBase); > > > + VirtualMemoryTable[Index].VirtualBase = > > > VirtualMemoryTable[Index].PhysicalBase; > > > + VirtualMemoryTable[Index].Length = ExtendedMemorySize; > > > + VirtualMemoryTable[Index].Attributes = > > > ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK; > > > + VirtualMemoryInfo[Index].Type = RPI_MEM_BASIC_REGION; > > > + VirtualMemoryInfo[Index++].Name = L"Extended System RAM"; > > > + } > > > + > > > + // Extended SoC registers (PCIe, genet, ...) > > > + if (BCM2711_SOC_REGISTERS > 0) { > > > + VirtualMemoryTable[Index].PhysicalBase = BCM2711_SOC_REGISTERS; > > > + VirtualMemoryTable[Index].VirtualBase = > > > VirtualMemoryTable[Index].PhysicalBase; > > > + VirtualMemoryTable[Index].Length = > > > BCM2711_SOC_REGISTER_LENGTH; > > > + VirtualMemoryTable[Index].Attributes = > > > ARM_MEMORY_REGION_ATTRIBUTE_DEVICE; > > > + VirtualMemoryInfo[Index].Type = RPI_MEM_RESERVED_REGION; > > > + VirtualMemoryInfo[Index++].Name = L"SoC Reserved (27xx)"; > > > + } > > > + > > > + // Base SoC registers > > > + VirtualMemoryTable[Index].PhysicalBase = BCM2836_SOC_REGISTERS; > > > + // On the Pi 3 the SoC registers may overlap VideoCore => fix this > > > + if (VirtualMemoryTable[GpuIndex].PhysicalBase + > > > VirtualMemoryTable[GpuIndex].Length > > > > VirtualMemoryTable[Index].PhysicalBase) { > > > + VirtualMemoryTable[GpuIndex].Length = > > > VirtualMemoryTable[Index].PhysicalBase - > > > VirtualMemoryTable[GpuIndex].PhysicalBase; > > > + } > > > + VirtualMemoryTable[Index].VirtualBase = > > > VirtualMemoryTable[Index].PhysicalBase; > > > + VirtualMemoryTable[Index].Length = > > > BCM2836_SOC_REGISTER_LENGTH; > > > + VirtualMemoryTable[Index].Attributes = > > > ARM_MEMORY_REGION_ATTRIBUTE_DEVICE; > > > + VirtualMemoryInfo[Index].Type = RPI_MEM_RESERVED_REGION; > > > + VirtualMemoryInfo[Index++].Name = L"SoC Reserved (283x)"; > > > + > > > + // End of Table > > > + VirtualMemoryTable[Index].PhysicalBase = 0; > > > + VirtualMemoryTable[Index].VirtualBase = 0; > > > + VirtualMemoryTable[Index].Length = 0; > > > + VirtualMemoryTable[Index++].Attributes = > > > (ARM_MEMORY_REGION_ATTRIBUTES)0; > > > + > > > + ASSERT(Index <= MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS); > > > + > > > + *VirtualMemoryMap = VirtualMemoryTable; > > > + VirtualMemoryInfoInitialized = TRUE; > > > +} > > > + > > > +/** > > > + Return additional memory info not populated by the above call. > > > + > > > + This call should follow the one to ArmPlatformGetVirtualMemoryMap (). > > > + > > > +**/ > > > +VOID > > > +RpiPlatformGetVirtualMemoryInfo ( > > > + IN RPI_MEMORY_REGION_INFO** MemoryInfo > > > + ) > > > +{ > > > + ASSERT (VirtualMemoryInfo != NULL); > > > + > > > + if (!VirtualMemoryInfoInitialized) { > > > + DEBUG ((DEBUG_ERROR, > > > + "ArmPlatformGetVirtualMemoryMap must be called before > > > RpiPlatformGetVirtualMemoryInfo.\n")); > > > + return; > > > + } > > > + > > > + *MemoryInfo = VirtualMemoryInfo; > > > } > > > diff --git a/Platform/RaspberryPi/RaspberryPi.dec > > > b/Platform/RaspberryPi/RaspberryPi.dec > > > index 3e9171eccb13..c7e17350544a 100644 > > > --- a/Platform/RaspberryPi/RaspberryPi.dec > > > +++ b/Platform/RaspberryPi/RaspberryPi.dec > > > @@ -42,6 +42,7 @@ [PcdsFixedAtBuild.common] > > > > > > gRaspberryPiTokenSpaceGuid.PcdNvStorageVariableBase|0x0|UINT32|0x00000005 > > > > > > gRaspberryPiTokenSpaceGuid.PcdNvStorageFtwSpareBase|0x0|UINT32|0x00000006 > > > > > > gRaspberryPiTokenSpaceGuid.PcdNvStorageFtwWorkingBase|0x0|UINT32|0x00000007 > > > + gRaspberryPiTokenSpaceGuid.PcdExtendedMemoryBase|0x0|UINT32|0x00000008 > > > [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx] > > > gRaspberryPiTokenSpaceGuid.PcdCpuClock|0|UINT32|0x0000000d > > > -- > > > 2.21.0.windows.1 > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#50844): https://edk2.groups.io/g/devel/message/50844 Mute This Topic: https://groups.io/mt/57792636/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-