The ID mapping routines on virtual platforms simply map the entire hardware supported physical address space as device memory, and then punch some holes for regions that need to be mapped cacheable. On virtual platforms hosted on CPUs that support a large physical address range, this may result in a lot of overhead, i.e., 4 KB of page tables for each 512 GB of address space, which quickly adds up (i.e., 2 MB for the architectural maximum of 48 bits). Since there may be a platform specific limit to the size of the (I)PA space that is not reflected by CPU id registers, restrict the range of the ID mapping to gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize bits. This makes sense by itself, since we cannot manipulate mappings above that limit anwyay (because they are not covered by GCD), and it allows the PCD be set to a lower value by platforms whose (I)PA space is smaller than the hardware supported maximum. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Wei Huang <wei@redhat.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18929 6f19259b-4bc3-4df7-8a09-765794883524
65 lines
1.8 KiB
INI
65 lines
1.8 KiB
INI
#/* @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.
|
|
#
|
|
#*/
|
|
|
|
[Defines]
|
|
INF_VERSION = 0x00010005
|
|
BASE_NAME = ArmVirtPlatformLib
|
|
FILE_GUID = 00214cc1-06d1-45fe-9700-dca5726ad7bf
|
|
MODULE_TYPE = BASE
|
|
VERSION_STRING = 1.0
|
|
LIBRARY_CLASS = ArmPlatformLib|SEC PEIM
|
|
|
|
[Packages]
|
|
MdePkg/MdePkg.dec
|
|
MdeModulePkg/MdeModulePkg.dec
|
|
EmbeddedPkg/EmbeddedPkg.dec
|
|
ArmPkg/ArmPkg.dec
|
|
ArmPlatformPkg/ArmPlatformPkg.dec
|
|
ArmVirtPkg/ArmVirtPkg.dec
|
|
|
|
[LibraryClasses]
|
|
IoLib
|
|
MemoryAllocationLib
|
|
ArmLib
|
|
PrintLib
|
|
FdtLib
|
|
|
|
[Sources.common]
|
|
Virt.c
|
|
VirtMem.c
|
|
|
|
[Sources.AARCH64]
|
|
AARCH64/VirtHelper.S
|
|
|
|
[Sources.ARM]
|
|
ARM/VirtHelper.S | GCC
|
|
ARM/VirtHelper.asm | RVCT
|
|
|
|
[FeaturePcd]
|
|
gEmbeddedTokenSpaceGuid.PcdCacheEnable
|
|
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec
|
|
|
|
[Pcd]
|
|
gArmTokenSpaceGuid.PcdSystemMemorySize
|
|
|
|
[FixedPcd]
|
|
gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress
|
|
gArmPlatformTokenSpaceGuid.PcdCoreCount
|
|
gArmTokenSpaceGuid.PcdSystemMemoryBase
|
|
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask
|
|
gArmTokenSpaceGuid.PcdArmPrimaryCore
|
|
gArmTokenSpaceGuid.PcdFdBaseAddress
|
|
gArmTokenSpaceGuid.PcdFdSize
|
|
gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize
|