ArmPkg/ArmMmuLib: take the CPU supported maximum PA space into account

In preparation of dropping PcdPrePiCpuMemorySize entirely, base the
maximum size of the identity map on the capabilities of the CPU.
Since that may exceed what is architecturally permitted when using
4 KB pages, take MAX_ADDRESS into account as well.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
Ard Biesheuvel 2018-11-23 13:14:28 +01:00
parent 2f9b248af8
commit e36b243c71
3 changed files with 9 additions and 8 deletions

View File

@ -604,8 +604,15 @@ ArmConfigureMmu (
return EFI_INVALID_PARAMETER;
}
// Cover the entire GCD memory space
MaxAddress = (1UL << PcdGet8 (PcdPrePiCpuMemorySize)) - 1;
//
// Limit the virtual address space to what we can actually use: UEFI
// mandates a 1:1 mapping, so no point in making the virtual address
// space larger than the physical address space. We also have to take
// into account the architectural limitations that result from UEFI's
// use of 4 KB pages.
//
MaxAddress = MIN (LShiftU64 (1ULL, ArmGetPhysicalAddressBits ()) - 1,
MAX_ADDRESS);
// Lookup the Table Level to get the information
LookupAddresstoRootTable (MaxAddress, &T0SZ, &RootTableEntryCount);

View File

@ -40,8 +40,5 @@
CacheMaintenanceLib
MemoryAllocationLib
[Pcd.AARCH64]
gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize
[Pcd.ARM]
gArmTokenSpaceGuid.PcdNormalMemoryNonshareableOverride

View File

@ -35,6 +35,3 @@
ArmLib
CacheMaintenanceLib
MemoryAllocationLib
[Pcd.AARCH64]
gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize