Please disregard, I will follow up with a proper series

On 9 September 2016 at 09:07, Ard Biesheuvel <[email protected]> wrote:
> As reported by Eugene, the practice of sizing the address space in the
> virtual memory system based on the maximum address in the table passed
> to ArmConfigureMmu() is problematic, since it fails to take into account
> the fact that the GCD memory space may be extended at a later time, both
> for memory and for MMIO. So instead, choose the VA size identical to the
> GCD memory map size, which is based on PcdPrePiCpuMemorySize on ARM
> systems.
>
> Reported-by: Eugene Cohen <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <[email protected]>
> ---
>  ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c | 14 ++------------
>  ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf       |  4 ++++
>  ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf        |  4 ++++
>  3 files changed, 10 insertions(+), 12 deletions(-)
>
> diff --git a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c 
> b/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c
> index 6e05e6085011..b5900a761f80 100644
> --- a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c
> +++ b/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c
> @@ -582,9 +582,7 @@ ArmConfigureMmu (
>    VOID*                         TranslationTable;
>    UINTN                         TranslationTablePageCount;
>    UINT32                        TranslationTableAttribute;
> -  ARM_MEMORY_REGION_DESCRIPTOR *MemoryTableEntry;
>    UINT64                        MaxAddress;
> -  UINT64                        TopAddress;
>    UINTN                         T0SZ;
>    UINTN                         RootTableEntryCount;
>    UINT64                        TCR;
> @@ -595,16 +593,8 @@ ArmConfigureMmu (
>      return RETURN_INVALID_PARAMETER;
>    }
>
> -  // Identify the highest address of the memory table
> -  MaxAddress = MemoryTable->PhysicalBase + MemoryTable->Length - 1;
> -  MemoryTableEntry = MemoryTable;
> -  while (MemoryTableEntry->Length != 0) {
> -    TopAddress = MemoryTableEntry->PhysicalBase + MemoryTableEntry->Length - 
> 1;
> -    if (TopAddress > MaxAddress) {
> -      MaxAddress = TopAddress;
> -    }
> -    MemoryTableEntry++;
> -  }
> +  // Cover the entire GCD memory space
> +  MaxAddress = (1UL << PcdGet8 (PcdPrePiCpuMemorySize)) - 1;
>
>    // Lookup the Table Level to get the information
>    LookupAddresstoRootTable (MaxAddress, &T0SZ, &RootTableEntryCount);
> diff --git a/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf 
> b/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
> index 1533c2944e8e..b9f264de8d26 100644
> --- a/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
> +++ b/ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
> @@ -32,6 +32,7 @@ [Sources.ARM]
>
>  [Packages]
>    ArmPkg/ArmPkg.dec
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdePkg/MdePkg.dec
>
>  [LibraryClasses]
> @@ -39,5 +40,8 @@ [LibraryClasses]
>    CacheMaintenanceLib
>    MemoryAllocationLib
>
> +[Pcd.AARCH64]
> +  gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize
> +
>  [Pcd.ARM]
>    gArmTokenSpaceGuid.PcdNormalMemoryNonshareableOverride
> diff --git a/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf 
> b/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf
> index 14ebf8de673d..ecf13f790734 100644
> --- a/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf
> +++ b/ArmPkg/Library/ArmMmuLib/ArmMmuPeiLib.inf
> @@ -28,9 +28,13 @@ [Sources.AARCH64]
>
>  [Packages]
>    ArmPkg/ArmPkg.dec
> +  EmbeddedPkg/EmbeddedPkg.dec
>    MdePkg/MdePkg.dec
>
>  [LibraryClasses]
>    ArmLib
>    CacheMaintenanceLib
>    MemoryAllocationLib
> +
> +[Pcd.AARCH64]
> +  gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize
> --
> 2.7.4
>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to