On Fri, May 01, 2020 at 11:19:55 +0530, Pankaj Bansal wrote: > From: Pankaj Bansal <pankaj.ban...@nxp.com> > > Add PEI phase to LS1043aRdb. This is needed because we need to have > dynamic PCDs support to be able to reserve memory before reporting > memory to UEFI firmware. > Using PEI phase we are now also dynamically setting the > PcdSystemMemoryBase and PcdSystemMemorySize depending upon the DRAM > regions detected. > This in turn would depend on the DDR DIMMs installed on board. > > Signed-off-by: Pankaj Bansal <pankaj.ban...@nxp.com>
Reviewed-by: Leif Lindholm <l...@nuviainc.com> I think that leaves us with only 12/24 outstanding - could you send out a v5 of just that patch? / Leif > --- > > Notes: > V4: > - Use ArmPkg version of PeiServicesTablePointerLib instead of MdePkg. > This allows us to run PEI phase from memory mapped flash devices > > V3: > - Update commit description > > Silicon/NXP/NxpQoriqLs.dsc.inc | 63 > +++++++++++++----- > Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.dsc | 9 --- > Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.fdf | 18 ++++-- > Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf | 3 +- > Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.c | 67 > +++++++++++--------- > 5 files changed, 99 insertions(+), 61 deletions(-) > > diff --git a/Silicon/NXP/NxpQoriqLs.dsc.inc b/Silicon/NXP/NxpQoriqLs.dsc.inc > index 3c8b11d9e04c..03759c7cee7c 100644 > --- a/Silicon/NXP/NxpQoriqLs.dsc.inc > +++ b/Silicon/NXP/NxpQoriqLs.dsc.inc > @@ -93,46 +93,53 @@ > CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf > > NonDiscoverableDeviceRegistrationLib|MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf > > ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf > + > UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf > > I2cLib|Silicon/NXP/Library/I2cLib/I2cLib.inf > > ResetSystemLib|ArmPkg/Library/ArmSmcPsciResetSystemLib/ArmSmcPsciResetSystemLib.inf > IoAccessLib|Silicon/NXP/Library/IoAccessLib/IoAccessLib.inf > > + PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf > MemoryInitPeiLib|Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > > [LibraryClasses.common.SEC] > PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf > - > UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf > - > ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf > - > LzmaDecompressLib|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf > - PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf > - HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf > - > PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf > - > MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf > + > DebugAgentLib|ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf > + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf > + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf > + > PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf > + > MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf > + > +[LibraryClasses.common.PEI_CORE] > + PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf > + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf > + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf > + > MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf > + PeiCoreEntryPoint|MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf > PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf > - PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf > + > ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf > + > ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf > + > OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf > > - # 1/123 faster than Stm or Vstm version > - BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf > - > - # Uncomment to turn on GDB stub in SEC. > - #DebugAgentLib|EmbeddedPkg/Library/GdbDebugAgent/GdbDebugAgent.inf > + > PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf > > [LibraryClasses.common.PEIM] > PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf > PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf > PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf > - > PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf > + > PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf > HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf > > MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf > + PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf > + > ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf > > ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf > + > OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf > > [LibraryClasses.common.DXE_CORE] > HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf > > MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf > DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf > > ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf > - > UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf > DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > > PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf > > @@ -204,6 +211,9 @@ > gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution|640 > gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480 > > + gArmTokenSpaceGuid.PcdSystemMemoryBase|0 > + gArmTokenSpaceGuid.PcdSystemMemorySize|0 > + > [PcdsDynamicHii.common.DEFAULT] > > gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|10 > > @@ -224,6 +234,12 @@ > gEfiMdePkgTokenSpaceGuid.PcdPostCodePropertyMask|0 > gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|320 > > + ## Base of DRAM > + ## since TFA puts Fd at 0x2000000 offset from DRAM base, we can use this > space > + ## for temporary ram > + gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x80000000 > + gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x02000000 > + > !if $(TARGET) == RELEASE > gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x27 > gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x81000001 > @@ -281,13 +297,26 @@ > > ################################################################################ > [Components.common] > # > - # SEC > + # PEI Phase modules > # > - ArmPlatformPkg/PrePi/PeiUniCore.inf > + ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf > + > + MdeModulePkg/Core/Pei/PeiMain.inf > MdeModulePkg/Universal/PCD/Pei/Pcd.inf { > <LibraryClasses> > PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf > } > + MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > + MdeModulePkg/Universal/Variable/Pei/VariablePei.inf > + > + ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf > + ArmPkg/Drivers/CpuPei/CpuPei.inf > + ArmPlatformPkg/PlatformPei/PlatformPeim.inf > + > + MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf { > + <LibraryClasses> > + > NULL|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf > + } > > # > # DXE > diff --git a/Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.dsc > b/Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.dsc > index d486c9b36fab..d45fd67c03b5 100644 > --- a/Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.dsc > +++ b/Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.dsc > @@ -30,15 +30,6 @@ > RealTimeClockLib|Silicon/Maxim/Library/Ds1307RtcLib/Ds1307RtcLib.inf > > [PcdsFixedAtBuild.common] > - > - # > - # LS1043a board Specific PCDs > - # XX (DRAM - Region 1 2GB) > - # (NOR - IFC Region 1 512MB) > - gArmTokenSpaceGuid.PcdSystemMemoryBase|0x80000000 > - gArmTokenSpaceGuid.PcdSystemMemorySize|0x7BE00000 > - gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x02000000 > - > # > # RTC Pcds > # > diff --git a/Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.fdf > b/Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.fdf > index 99fbc87e1200..931d0bb14f9b 100644 > --- a/Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.fdf > +++ b/Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.fdf > @@ -24,10 +24,10 @@ > > [FD.LS1043ARDB_EFI] > BaseAddress = 0x82000000|gArmTokenSpaceGuid.PcdFdBaseAddress #The base > address of the FLASH Device. > -Size = 0x000ED000|gArmTokenSpaceGuid.PcdFdSize #The size in > bytes of the FLASH Device > +Size = 0x00140000|gArmTokenSpaceGuid.PcdFdSize #The size in > bytes of the FLASH Device > ErasePolarity = 1 > -BlockSize = 0x1 > -NumBlocks = 0xED000 > +BlockSize = 0x40000 > +NumBlocks = 0x5 > > > ################################################################################ > # > @@ -44,7 +44,7 @@ NumBlocks = 0xED000 > # RegionType <FV, DATA, or FILE> > # > > ################################################################################ > -0x00000000|0x000ED000 > +0x00000000|0x00140000 > gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize > FV = FVMAIN_COMPACT > > @@ -159,7 +159,15 @@ READ_STATUS = TRUE > READ_LOCK_CAP = TRUE > READ_LOCK_STATUS = TRUE > > - INF ArmPlatformPkg/PrePi/PeiUniCore.inf > + INF ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf > + INF MdeModulePkg/Core/Pei/PeiMain.inf > + INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf > + INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf > + INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf > + INF ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf > + INF ArmPkg/Drivers/CpuPei/CpuPei.inf > + INF ArmPlatformPkg/PlatformPei/PlatformPeim.inf > + INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf > > FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 { > SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED > = TRUE { > diff --git a/Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > b/Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > index ad2371115b17..a33f8cd3f743 100644 > --- a/Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > +++ b/Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > @@ -13,7 +13,8 @@ > FILE_GUID = 55ddb6e0-70b5-11e0-b33e-0002a5d5c51b > MODULE_TYPE = BASE > VERSION_STRING = 1.0 > - LIBRARY_CLASS = MemoryInitPeiLib|SEC PEIM DXE_DRIVER > + LIBRARY_CLASS = MemoryInitPeiLib|PEIM > + CONSTRUCTOR = MemoryInitPeiLibConstructor > > [Sources] > MemoryInitPeiLib.c > diff --git a/Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.c > b/Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.c > index 905d326893e5..5599239ede4a 100644 > --- a/Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.c > +++ b/Silicon/NXP/Library/MemoryInitPeiLib/MemoryInitPeiLib.c > @@ -120,22 +120,17 @@ GetDramRegionsInfo ( > > /** > Get the installed RAM information. > - Initialize MMU and Memory HOBs (Resource Descriptor HOBs) > + Initialize Memory HOBs (Resource Descriptor HOBs) > + Set the PcdSystemMemoryBase and PcdSystemMemorySize. > > - @param[in] UefiMemoryBase Base address of region used by UEFI in > - permanent memory > - @param[in] UefiMemorySize Size of the region used by UEFI in permanent > memory > - > - @return EFI_SUCCESS Successfuly Initialize MMU and Memory HOBs. > + @return EFI_SUCCESS Successfuly retrieved the system memory information > **/ > EFI_STATUS > EFIAPI > -MemoryPeim ( > - IN EFI_PHYSICAL_ADDRESS UefiMemoryBase, > - IN UINT64 UefiMemorySize > +MemoryInitPeiLibConstructor ( > + VOID > ) > { > - ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable; > INT32 Index; > UINTN BaseAddress; > UINTN Size; > @@ -147,18 +142,6 @@ MemoryPeim ( > BOOLEAN FoundSystemMem; > EFI_STATUS Status; > > - // Get Virtual Memory Map from the Platform Library > - ArmPlatformGetVirtualMemoryMap (&MemoryTable); > - > - // > - // Ensure MemoryTable[0].Length which is size of DRAM has been set > - // by ArmPlatformGetVirtualMemoryMap () > - // > - ASSERT (MemoryTable[0].Length != 0); > - > - // > - // Now, the permanent memory has been installed, we can call > AllocatePages() > - // > ResourceAttributes = ( > EFI_RESOURCE_ATTRIBUTE_PRESENT | > EFI_RESOURCE_ATTRIBUTE_INITIALIZED | > @@ -174,8 +157,8 @@ MemoryPeim ( > Status = GetDramRegionsInfo (DramRegions, ARRAY_SIZE (DramRegions)); > ASSERT_EFI_ERROR (Status); > > - FdBase = (UINTN)FixedPcdGet64 (PcdFdBaseAddress); > - FdTop = FdBase + (UINTN)FixedPcdGet32 (PcdFdSize); > + FdBase = (UINTN)PcdGet64 (PcdFdBaseAddress); > + FdTop = FdBase + (UINTN)PcdGet32 (PcdFdSize); > > // Declare memory regions to system > // The DRAM region info is sorted based on the RAM address is SOC memory > map. > @@ -228,8 +211,8 @@ MemoryPeim ( > ); > }; > // Mark the memory covering the Firmware Device as boot services data > - BuildMemoryAllocationHob (FixedPcdGet64 (PcdFdBaseAddress), > - FixedPcdGet32 (PcdFdSize), > + BuildMemoryAllocationHob (PcdGet64 (PcdFdBaseAddress), > + PcdGet32 (PcdFdSize), > EfiBootServicesData); > } else { > BuildResourceDescriptorHob ( > @@ -247,17 +230,43 @@ MemoryPeim ( > Size = DramRegions[Index].Size; > > if (FdBase >= BaseAddress && FdTop <= Top) { > - Size -= (UINTN)FixedPcdGet32 (PcdFdSize); > + Size -= (UINTN)PcdGet32 (PcdFdSize); > } > > - if ((UefiMemoryBase >= BaseAddress) && (Size >= UefiMemorySize)) { > + if (Size >= FixedPcdGet32 (PcdSystemMemoryUefiRegionSize)) { > FoundSystemMem = TRUE; > + PcdSet64S (PcdSystemMemoryBase, BaseAddress); > + PcdSet64S (PcdSystemMemorySize, Size); > } > } > > ASSERT (FoundSystemMem == TRUE); > > - // Build Memory Allocation Hob > + return EFI_SUCCESS; > +} > + > +/** > + Initialize MMU > + > + @param[in] UefiMemoryBase Base address of region used by UEFI in > + permanent memory > + @param[in] UefiMemorySize Size of the region used by UEFI in permanent > memory > + > + @return EFI_SUCCESS Successfuly Initialize MMU > +**/ > +EFI_STATUS > +EFIAPI > +MemoryPeim ( > + IN EFI_PHYSICAL_ADDRESS UefiMemoryBase, > + IN UINT64 UefiMemorySize > + ) > +{ > + ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable; > + > + // Get Virtual Memory Map from the Platform Library > + ArmPlatformGetVirtualMemoryMap (&MemoryTable); > + > + // Initialize Mmu > InitMmu (MemoryTable); > > if (FeaturePcdGet (PcdPrePiProduceMemoryTypeInformationHob)) { > -- > 2.17.1 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#58703): https://edk2.groups.io/g/devel/message/58703 Mute This Topic: https://groups.io/mt/73370147/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-