From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olivier Martin Subject: Re: [PATCH v3 10/27] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Date: Wed, 11 Feb 2015 06:40:52 +0000 Message-ID: <54DAF974.4010703__9380.2185649567$1423636980$gmane$org@arm.com> References: <1422991212-9257-1-git-send-email-ard.biesheuvel@linaro.org> <1422991212-9257-11-git-send-email-ard.biesheuvel@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1422991212-9257-11-git-send-email-ard.biesheuvel@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ard Biesheuvel , "edk2-devel@lists.sourceforge.net" , "lersek@redhat.com" , "roy.franz@linaro.org" , "leif.lindholm@linaro.org" , "stefano.stabellini@eu.citrix.com" , "Ian.Campbell@citrix.com" , "anthony.perard@citrix.com" , "christoffer.dall@linaro.org" , "xen-devel@lists.xen.org" , "ilias.biris@linaro.org" , "julien.grall@linaro.org" List-Id: xen-devel@lists.xenproject.org I do not know if it is a bug in the original implementation. I think I had to do this hack to prevent some code (DXE core?) to overwrite the FD file at boot time - mainly when the FD file was loaded quite high in the system memory. But I do not see what the DXE phase could need from the original FD file. Generally all the DXE drivers are packaged into a compressed FV file that would be decompressed somewhere in system memory. I could spend some time to investigate to see if the original code is correct or not. But I do not want to delay this patchset. Ideally, I would like to get rid off the PrePi and unify the PEI phase by using the PEI Core even when the UEFI firmware is started from DRAM. Reviewed-By: Olivier Martin On 03/02/15 19:19, Ard Biesheuvel wrote: > This implements a MemoryInitPeiLib instance that differs from the > stock ArmPlatformPkg version only in the fact that it does not remove > the memory used by the flash device (FD). The reason is that, when using > PrePi, the DXE core is started immediately and never returns so there is > no reason to preserve any of the memory that the flash device occupied > originally, and it is preferable to release is so that the OS loader > can reuse it. This is especially important for the relocatable PrePi > configuration, which is aimed at being launched from a boot loader that > itself adheres to the Linux arm64 boot protocol. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Acked-by: Laszlo Ersek > Signed-off-by: Ard Biesheuvel > --- > .../ArmVirtualizationMemoryInitPeiLib.c | 91 ++++++++++++++++++++++ > .../ArmVirtualizationMemoryInitPeiLib.inf | 66 ++++++++++++++++ > 2 files changed, 157 insertions(+) > create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c > create mode 100644 ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf > > diff --git a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c > new file mode 100644 > index 000000000000..5f6cd059c47f > --- /dev/null > +++ b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.c > @@ -0,0 +1,91 @@ > +/** @file > +* > +* Copyright (c) 2011-2014, ARM Limited. All rights reserved. > +* Copyright (c) 2014, Linaro Limited. All rights reserved. > +* > +* This program and the accompanying materials > +* are licensed and made available under the terms and conditions of the BSD License > +* which accompanies this distribution. The full text of the license may be found at > +* http://opensource.org/licenses/bsd-license.php > +* > +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +* > +**/ > + > +#include > + > +#include > +#include > +#include > +#include > +#include > + > +VOID > +BuildMemoryTypeInformationHob ( > + VOID > + ); > + > +VOID > +InitMmu ( > + VOID > + ) > +{ > + ARM_MEMORY_REGION_DESCRIPTOR *MemoryTable; > + VOID *TranslationTableBase; > + UINTN TranslationTableSize; > + RETURN_STATUS Status; > + > + // Get Virtual Memory Map from the Platform Library > + ArmPlatformGetVirtualMemoryMap (&MemoryTable); > + > + //Note: Because we called PeiServicesInstallPeiMemory() before to call InitMmu() the MMU Page Table resides in > + // DRAM (even at the top of DRAM as it is the first permanent memory allocation) > + Status = ArmConfigureMmu (MemoryTable, &TranslationTableBase, &TranslationTableSize); > + if (EFI_ERROR (Status)) { > + DEBUG ((EFI_D_ERROR, "Error: Failed to enable MMU\n")); > + } > +} > + > +EFI_STATUS > +EFIAPI > +MemoryPeim ( > + IN EFI_PHYSICAL_ADDRESS UefiMemoryBase, > + IN UINT64 UefiMemorySize > + ) > +{ > + EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes; > + > + // Ensure PcdSystemMemorySize has been set > + ASSERT (PcdGet64 (PcdSystemMemorySize) != 0); > + > + // > + // Now, the permanent memory has been installed, we can call AllocatePages() > + // > + ResourceAttributes = ( > + EFI_RESOURCE_ATTRIBUTE_PRESENT | > + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | > + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | > + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | > + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | > + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | > + EFI_RESOURCE_ATTRIBUTE_TESTED > + ); > + > + BuildResourceDescriptorHob ( > + EFI_RESOURCE_SYSTEM_MEMORY, > + ResourceAttributes, > + PcdGet64 (PcdSystemMemoryBase), > + PcdGet64 (PcdSystemMemorySize) > + ); > + > + // Build Memory Allocation Hob > + InitMmu (); > + > + if (FeaturePcdGet (PcdPrePiProduceMemoryTypeInformationHob)) { > + // Optional feature that helps prevent EFI memory map fragmentation. > + BuildMemoryTypeInformationHob (); > + } > + > + return EFI_SUCCESS; > +} > diff --git a/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf > new file mode 100644 > index 000000000000..fcdae06de7c2 > --- /dev/null > +++ b/ArmPlatformPkg/ArmVirtualizationPkg/Library/ArmVirtualizationMemoryInitPeiLib/ArmVirtualizationMemoryInitPeiLib.inf > @@ -0,0 +1,66 @@ > +#/** @file > +# > +# Copyright (c) 2011-2014, ARM Ltd. All rights reserved.
> +# Copyright (c) 2014, Linaro Ltd. All rights reserved.
> +# This program and the accompanying materials > +# are licensed and made available under the terms and conditions of the BSD License > +# which accompanies this distribution. The full text of the license may be found at > +# http://opensource.org/licenses/bsd-license.php > +# > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +# > +#**/ > + > +[Defines] > + INF_VERSION = 0x00010005 > + BASE_NAME = ArmVirtMemoryInitPeiLib > + FILE_GUID = 021b6156-3cc8-4e99-85ee-13d8a871edf2 > + MODULE_TYPE = SEC > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = MemoryInitPeiLib > + > +[Sources] > + ArmVirtualizationMemoryInitPeiLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + EmbeddedPkg/EmbeddedPkg.dec > + ArmPkg/ArmPkg.dec > + ArmPlatformPkg/ArmPlatformPkg.dec > + > +[LibraryClasses] > + DebugLib > + HobLib > + ArmLib > + ArmPlatformLib > + > +[Guids] > + gEfiMemoryTypeInformationGuid > + > +[FeaturePcd] > + gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob > + > +[FixedPcd] > + gArmTokenSpaceGuid.PcdFdSize > + > + gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize > + > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData > + > +[Pcd] > + gArmTokenSpaceGuid.PcdSystemMemoryBase > + gArmTokenSpaceGuid.PcdSystemMemorySize > + gArmTokenSpaceGuid.PcdFdBaseAddress > + > +[Depex] > + TRUE -- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you. ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2557590 ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2548782