2010-01-12 19:53:38 +01:00
|
|
|
#/** @file
|
|
|
|
# ARM processor package.
|
|
|
|
#
|
2010-04-29 14:15:47 +02:00
|
|
|
# Copyright (c) 2009 - 2010, Apple Inc. All rights reserved.<BR>
|
2023-04-25 13:27:16 +02:00
|
|
|
# Copyright (c) 2011 - 2023, ARM Limited. All rights reserved.
|
2021-10-23 09:32:41 +02:00
|
|
|
# Copyright (c) 2021, Ampere Computing LLC. All rights reserved.
|
2010-01-12 19:53:38 +01:00
|
|
|
#
|
2019-04-04 01:03:18 +02:00
|
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
2010-01-12 19:53:38 +01:00
|
|
|
#
|
|
|
|
#**/
|
|
|
|
|
2009-12-06 02:57:05 +01:00
|
|
|
[Defines]
|
|
|
|
DEC_SPECIFICATION = 0x00010005
|
|
|
|
PACKAGE_NAME = ArmPkg
|
|
|
|
PACKAGE_GUID = 5CFBD99E-3C43-4E7F-8054-9CDEAFF7710F
|
|
|
|
PACKAGE_VERSION = 0.1
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# Include Section - list of Include Paths that are provided by this package.
|
|
|
|
# Comments are used for Keywords and Module Types.
|
|
|
|
#
|
|
|
|
# Supported Module Types:
|
|
|
|
# BASE SEC PEI_CORE PEIM DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
[Includes.common]
|
|
|
|
Include # Root include for the package
|
|
|
|
|
|
|
|
[LibraryClasses.common]
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Convert Arm instructions to a human readable format.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
ArmDisassemblerLib|Include/Library/ArmDisassemblerLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides an interface to Arm generic counters.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
ArmGenericTimerCounterLib|Include/Library/ArmGenericTimerCounterLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides an interface to initialize a
|
|
|
|
# Generic Interrupt Controller (GIC).
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
ArmGicArchLib|Include/Library/ArmGicArchLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides a Generic Interrupt Controller (GIC)
|
|
|
|
# configuration interface.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
ArmGicLib|Include/Library/ArmGicLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides a HyperVisor Call (HVC) interface.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
ArmHvcLib|Include/Library/ArmHvcLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides an interface to Arm registers.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
ArmLib|Include/Library/ArmLib.h
|
|
|
|
|
|
|
|
## @libraryclass Provides a Mmu interface.
|
|
|
|
#
|
|
|
|
ArmMmuLib|Include/Library/ArmMmuLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
|
|
|
## @libraryclass Provides a Mailbox Transport Layer (MTL) interface
|
|
|
|
# for the System Control and Management Interface (SCMI).
|
|
|
|
#
|
2021-04-20 15:56:18 +02:00
|
|
|
ArmMtlLib|Include/Library/ArmMtlLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides a System Monitor Call (SMC) interface.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
ArmSmcLib|Include/Library/ArmSmcLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides a SuperVisor Call (SVC) interface.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
ArmSvcLib|Include/Library/ArmSvcLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2022-10-28 17:32:42 +02:00
|
|
|
## @libraryclass Provides a Monitor Call interface that will use the
|
|
|
|
# default conduit (HVC or SMC).
|
|
|
|
#
|
|
|
|
ArmMonitorLib|Include/Library/ArmMonitorLib.h
|
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides a default exception handler.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
DefaultExceptionHandlerLib|Include/Library/DefaultExceptionHandlerLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
|
|
|
## @libraryclass Provides an interface to query miscellaneous OEM
|
|
|
|
# information.
|
|
|
|
#
|
2021-04-20 15:56:18 +02:00
|
|
|
OemMiscLib|Include/Library/OemMiscLib.h
|
2021-04-27 12:13:49 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides an OpTee interface.
|
2021-04-27 12:13:49 +02:00
|
|
|
#
|
2021-04-27 12:17:11 +02:00
|
|
|
OpteeLib|Include/Library/OpteeLib.h
|
|
|
|
|
|
|
|
## @libraryclass Provides a semihosting interface.
|
|
|
|
#
|
|
|
|
SemihostLib|Include/Library/SemihostLib.h
|
2021-04-20 15:56:18 +02:00
|
|
|
|
2021-04-27 12:17:11 +02:00
|
|
|
## @libraryclass Provides an interface for a StandaloneMm Mmu.
|
|
|
|
#
|
|
|
|
StandaloneMmMmuLib|Include/Library/StandaloneMmMmuLib.h
|
2014-03-24 16:24:23 +01:00
|
|
|
|
2009-12-06 02:57:05 +01:00
|
|
|
[Guids.common]
|
|
|
|
gArmTokenSpaceGuid = { 0xBB11ECFE, 0x820F, 0x4968, { 0xBB, 0xA6, 0xF7, 0x6A, 0xFE, 0x30, 0x25, 0x96 } }
|
|
|
|
|
2011-09-23 01:14:01 +02:00
|
|
|
## ARM MPCore table
|
|
|
|
# Include/Guid/ArmMpCoreInfo.h
|
|
|
|
gArmMpCoreInfoGuid = { 0xa4ee0728, 0xe5d7, 0x4ac5, {0xb2, 0x1e, 0x65, 0x8e, 0xd8, 0x57, 0xe8, 0x34} }
|
|
|
|
|
2022-09-24 22:31:44 +02:00
|
|
|
gArmMmuReplaceLiveTranslationEntryFuncGuid = { 0xa8b50ff3, 0x08ec, 0x4dd3, {0xbf, 0x04, 0x28, 0xbf, 0x71, 0x75, 0xc7, 0x4a} }
|
|
|
|
|
2018-01-15 15:53:26 +01:00
|
|
|
[Protocols.common]
|
|
|
|
## Arm System Control and Management Interface(SCMI) Base protocol
|
|
|
|
## ArmPkg/Include/Protocol/ArmScmiBaseProtocol.h
|
|
|
|
gArmScmiBaseProtocolGuid = { 0xd7e5abe9, 0x33ab, 0x418e, { 0x9f, 0x91, 0x72, 0xda, 0xe2, 0xba, 0x8e, 0x2f } }
|
|
|
|
|
|
|
|
## Arm System Control and Management Interface(SCMI) Clock management protocol
|
|
|
|
## ArmPkg/Include/Protocol/ArmScmiClockProtocol.h
|
|
|
|
gArmScmiClockProtocolGuid = { 0x91ce67a8, 0xe0aa, 0x4012, { 0xb9, 0x9f, 0xb6, 0xfc, 0xf3, 0x4, 0x8e, 0xaa } }
|
2018-12-14 00:48:44 +01:00
|
|
|
gArmScmiClock2ProtocolGuid = { 0xb8d8caf2, 0x9e94, 0x462c, { 0xa8, 0x34, 0x6c, 0x99, 0xfc, 0x05, 0xef, 0xcf } }
|
2018-01-15 15:53:26 +01:00
|
|
|
|
|
|
|
## Arm System Control and Management Interface(SCMI) Clock management protocol
|
|
|
|
## ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
|
|
|
|
gArmScmiPerformanceProtocolGuid = { 0x9b8ba84, 0x3dd3, 0x49a6, { 0xa0, 0x5a, 0x31, 0x34, 0xa5, 0xf0, 0x7b, 0xad } }
|
|
|
|
|
2011-09-23 01:14:01 +02:00
|
|
|
[Ppis]
|
|
|
|
## Include/Ppi/ArmMpCoreInfo.h
|
|
|
|
gArmMpCoreInfoPpiGuid = { 0x6847cc74, 0xe9ec, 0x4f8f, {0xa2, 0x9d, 0xab, 0x44, 0xe7, 0x54, 0xa8, 0xfc} }
|
|
|
|
|
2009-12-06 02:57:05 +01:00
|
|
|
[PcdsFeatureFlag.common]
|
|
|
|
gArmTokenSpaceGuid.PcdCpuDxeProduceDebugSupport|FALSE|BOOLEAN|0x00000001
|
|
|
|
|
2011-02-02 23:35:30 +01:00
|
|
|
# On ARM Architecture with the Security Extension, the address for the
|
|
|
|
# Vector Table can be mapped anywhere in the memory map. It means we can
|
|
|
|
# point the Exception Vector Table to its location in CpuDxe.
|
2016-03-24 21:30:06 +01:00
|
|
|
# By default we copy the Vector Table at PcdGet64(PcdCpuVectorBaseAddress)
|
2011-02-02 23:35:30 +01:00
|
|
|
gArmTokenSpaceGuid.PcdRelocateVectorTable|TRUE|BOOLEAN|0x00000022
|
2011-06-03 11:18:00 +02:00
|
|
|
# Set this PCD to TRUE if the Exception Vector is changed to add debugger support before
|
|
|
|
# it has been configured by the CPU DXE
|
|
|
|
gArmTokenSpaceGuid.PcdDebuggerExceptionSupport|FALSE|BOOLEAN|0x00000032
|
2014-03-24 16:24:23 +01:00
|
|
|
|
2015-02-16 11:27:02 +01:00
|
|
|
# Define if the GICv3 controller should use the GICv2 legacy
|
|
|
|
gArmTokenSpaceGuid.PcdArmGicV3WithV2Legacy|FALSE|BOOLEAN|0x00000042
|
|
|
|
|
ArmPkg/CpuDxe: Perform preliminary NX remap of free memory
The DXE core implementation of PcdDxeNxMemoryProtectionPolicy already
contains an assertion that EfiConventionalMemory and EfiBootServicesData
are subjected to the same policy when it comes to the use of NX
permissions. The reason for this is that we may otherwise end up with
unbounded recursion in the page table code, given that allocating a page
table would then involve a permission attribute change, and this could
result in the need for a block entry to be split, which would trigger
the allocation of a page table recursively.
For the same reason, a shortcut exists in ApplyMemoryProtectionPolicy()
where, instead of setting the memory attributes unconditionally, we
compare the NX policies and avoid touching the page tables if they are
the same for the old and the new memory types. Without this shortcut, we
may end up in a situation where, as the CPU arch protocol DXE driver is
ramping up, the same unbounded recursion is triggered, due to the fact
that the NX policy for EfiConventionalMemory has not been applied yet.
To break this cycle, let's remap all EfiConventionalMemory regions
according to the NX policy for EfiBootServicesData before exposing the
CPU arch protocol to the DXE core and other drivers. This ensures that
creating EfiBootServicesData allocations does not result in memory
attribute changes, and therefore no recursion.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
2023-02-08 16:34:33 +01:00
|
|
|
# Whether to remap all unused memory NX before installing the CPU arch
|
|
|
|
# protocol driver. This is needed on platforms that map all DRAM with RWX
|
|
|
|
# attributes initially, and can be disabled otherwise.
|
|
|
|
gArmTokenSpaceGuid.PcdRemapUnusedMemoryNx|TRUE|BOOLEAN|0x00000048
|
|
|
|
|
2015-11-18 16:59:22 +01:00
|
|
|
[PcdsFeatureFlag.ARM]
|
|
|
|
# Whether to map normal memory as non-shareable. FALSE is the safe choice, but
|
|
|
|
# TRUE may be appropriate to fix performance problems if you don't care about
|
|
|
|
# hardware coherency (i.e., no virtualization or cache coherent DMA)
|
|
|
|
gArmTokenSpaceGuid.PcdNormalMemoryNonshareableOverride|FALSE|BOOLEAN|0x00000043
|
|
|
|
|
2021-08-09 17:19:43 +02:00
|
|
|
[PcdsFeatureFlag.AARCH64, PcdsFeatureFlag.ARM]
|
2021-02-19 07:35:57 +01:00
|
|
|
## Used to select method for requesting services from S-EL1.<BR><BR>
|
|
|
|
# TRUE - Selects FF-A calls for communication between S-EL0 and SPMC.<BR>
|
|
|
|
# FALSE - Selects SVC calls for communication between S-EL0 and SPMC.<BR>
|
|
|
|
# @Prompt Enable FF-A support.
|
|
|
|
gArmTokenSpaceGuid.PcdFfaEnable|FALSE|BOOLEAN|0x0000005B
|
|
|
|
|
2009-12-06 02:57:05 +01:00
|
|
|
[PcdsFixedAtBuild.common]
|
2011-09-27 18:29:07 +02:00
|
|
|
gArmTokenSpaceGuid.PcdTrustzoneSupport|FALSE|BOOLEAN|0x00000006
|
|
|
|
|
2011-02-02 23:35:30 +01:00
|
|
|
# This PCD should be a FeaturePcd. But we used this PCD as an '#if' in an ASM file.
|
|
|
|
# Using a FeaturePcd make a '(BOOLEAN) casting for its value which is not understood by the preprocessor.
|
|
|
|
gArmTokenSpaceGuid.PcdVFPEnabled|0|UINT32|0x00000024
|
|
|
|
|
2016-03-24 21:30:06 +01:00
|
|
|
gArmTokenSpaceGuid.PcdCpuVectorBaseAddress|0xffff0000|UINT64|0x00000004
|
2009-12-06 02:57:05 +01:00
|
|
|
gArmTokenSpaceGuid.PcdCpuResetAddress|0x00000000|UINT32|0x00000005
|
2014-03-24 16:24:23 +01:00
|
|
|
|
2011-02-02 23:35:30 +01:00
|
|
|
#
|
2011-03-31 14:11:12 +02:00
|
|
|
# ARM Secure Firmware PCDs
|
2011-02-02 23:35:30 +01:00
|
|
|
#
|
2014-11-11 01:43:03 +01:00
|
|
|
gArmTokenSpaceGuid.PcdSecureFdBaseAddress|0|UINT64|0x00000015
|
2011-02-02 23:35:30 +01:00
|
|
|
gArmTokenSpaceGuid.PcdSecureFdSize|0|UINT32|0x00000016
|
2014-11-11 01:43:03 +01:00
|
|
|
gArmTokenSpaceGuid.PcdSecureFvBaseAddress|0x0|UINT64|0x0000002F
|
2011-06-11 14:06:59 +02:00
|
|
|
gArmTokenSpaceGuid.PcdSecureFvSize|0x0|UINT32|0x00000030
|
2011-02-02 23:35:30 +01:00
|
|
|
|
2012-03-26 12:57:11 +02:00
|
|
|
#
|
|
|
|
# ARM Hypervisor Firmware PCDs
|
2014-03-24 16:24:23 +01:00
|
|
|
#
|
2012-03-26 12:57:11 +02:00
|
|
|
gArmTokenSpaceGuid.PcdHypFdBaseAddress|0|UINT32|0x0000003A
|
|
|
|
gArmTokenSpaceGuid.PcdHypFdSize|0|UINT32|0x0000003B
|
|
|
|
gArmTokenSpaceGuid.PcdHypFvBaseAddress|0|UINT32|0x0000003C
|
|
|
|
gArmTokenSpaceGuid.PcdHypFvSize|0|UINT32|0x0000003D
|
2013-08-06 12:59:19 +02:00
|
|
|
|
2011-09-23 01:01:13 +02:00
|
|
|
# Use ClusterId + CoreId to identify the PrimaryCore
|
|
|
|
gArmTokenSpaceGuid.PcdArmPrimaryCoreMask|0xF03|UINT32|0x00000031
|
2014-03-24 16:24:23 +01:00
|
|
|
# The Primary Core is ClusterId[0] & CoreId[0]
|
2011-09-23 01:01:13 +02:00
|
|
|
gArmTokenSpaceGuid.PcdArmPrimaryCore|0|UINT32|0x00000037
|
|
|
|
|
2021-02-08 01:52:53 +01:00
|
|
|
#
|
|
|
|
# SMBIOS PCDs
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdSystemProductName|L""|VOID*|0x30000053
|
|
|
|
gArmTokenSpaceGuid.PcdSystemVersion|L""|VOID*|0x30000054
|
|
|
|
gArmTokenSpaceGuid.PcdBaseBoardManufacturer|L""|VOID*|0x30000055
|
|
|
|
gArmTokenSpaceGuid.PcdBaseBoardProductName|L""|VOID*|0x30000056
|
|
|
|
gArmTokenSpaceGuid.PcdBaseBoardVersion|L""|VOID*|0x30000057
|
|
|
|
gArmTokenSpaceGuid.PcdProcessorManufacturer|L""|VOID*|0x30000071
|
|
|
|
gArmTokenSpaceGuid.PcdProcessorVersion|L""|VOID*|0x30000072
|
|
|
|
gArmTokenSpaceGuid.PcdProcessorSerialNumber|L""|VOID*|0x30000073
|
|
|
|
gArmTokenSpaceGuid.PcdProcessorAssetTag|L""|VOID*|0x30000074
|
|
|
|
gArmTokenSpaceGuid.PcdProcessorPartNumber|L""|VOID*|0x30000075
|
|
|
|
|
2011-02-02 23:35:30 +01:00
|
|
|
#
|
|
|
|
# ARM L2x0 PCDs
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdL2x0ControllerBase|0|UINT32|0x0000001B
|
2014-03-24 16:24:23 +01:00
|
|
|
|
2015-02-28 21:25:07 +01:00
|
|
|
#
|
|
|
|
# ARM Normal (or Non Secure) Firmware PCDs
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdFdSize|0|UINT32|0x0000002C
|
|
|
|
gArmTokenSpaceGuid.PcdFvSize|0|UINT32|0x0000002E
|
|
|
|
|
2016-11-12 14:02:28 +01:00
|
|
|
#
|
|
|
|
# Value to add to a host address to obtain a device address, using
|
|
|
|
# unsigned 64-bit integer arithmetic on both ARM and AArch64. This
|
|
|
|
# means we can rely on truncation on overflow to specify negative
|
|
|
|
# offsets.
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdArmDmaDeviceOffset|0x0|UINT64|0x0000044
|
|
|
|
|
2023-04-25 13:27:16 +02:00
|
|
|
#
|
|
|
|
# Boot the Uefi Shell instead of UiApp when no valid boot option is found.
|
|
|
|
# This is useful in CI environment so that startup.nsh can be launched.
|
|
|
|
# The default value is FALSE.
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdUefiShellDefaultBootEnable|FALSE|BOOLEAN|0x0000052
|
|
|
|
|
2015-02-28 21:25:07 +01:00
|
|
|
[PcdsFixedAtBuild.common, PcdsPatchableInModule.common]
|
|
|
|
gArmTokenSpaceGuid.PcdFdBaseAddress|0|UINT64|0x0000002B
|
|
|
|
gArmTokenSpaceGuid.PcdFvBaseAddress|0|UINT64|0x0000002D
|
2013-04-14 11:36:41 +02:00
|
|
|
|
|
|
|
[PcdsFixedAtBuild.ARM]
|
2013-08-21 14:05:44 +02:00
|
|
|
#
|
|
|
|
# ARM Security Extension
|
|
|
|
#
|
|
|
|
|
|
|
|
# Secure Configuration Register
|
|
|
|
# - BIT0 : NS - Non Secure bit
|
|
|
|
# - BIT1 : IRQ Handler
|
|
|
|
# - BIT2 : FIQ Handler
|
|
|
|
# - BIT3 : EA - External Abort
|
|
|
|
# - BIT4 : FW - F bit writable
|
|
|
|
# - BIT5 : AW - A bit writable
|
|
|
|
# - BIT6 : nET - Not Early Termination
|
|
|
|
# - BIT7 : SCD - Secure Monitor Call Disable
|
|
|
|
# - BIT8 : HCE - Hyp Call enable
|
|
|
|
# - BIT9 : SIF - Secure Instruction Fetch
|
|
|
|
# 0x31 = NS | EA | FW
|
|
|
|
gArmTokenSpaceGuid.PcdArmScr|0x31|UINT32|0x00000038
|
|
|
|
|
2013-04-14 11:36:41 +02:00
|
|
|
# By default we do not do a transition to non-secure mode
|
|
|
|
gArmTokenSpaceGuid.PcdArmNonSecModeTransition|0x0|UINT32|0x0000003E
|
2013-06-19 20:27:05 +02:00
|
|
|
|
2013-08-06 12:59:19 +02:00
|
|
|
# Non Secure Access Control Register
|
|
|
|
# - BIT15 : NSASEDIS - Disable Non-secure Advanced SIMD functionality
|
|
|
|
# - BIT14 : NSD32DIS - Disable Non-secure use of D16-D31
|
|
|
|
# - BIT11 : cp11 - Non-secure access to coprocessor 11 enable
|
|
|
|
# - BIT10 : cp10 - Non-secure access to coprocessor 10 enable
|
|
|
|
# 0xC00 = cp10 | cp11
|
|
|
|
gArmTokenSpaceGuid.PcdArmNsacr|0xC00|UINT32|0x00000039
|
|
|
|
|
2013-07-18 20:07:46 +02:00
|
|
|
[PcdsFixedAtBuild.AARCH64]
|
2013-08-21 14:05:44 +02:00
|
|
|
#
|
|
|
|
# AArch64 Security Extension
|
|
|
|
#
|
|
|
|
|
|
|
|
# Secure Configuration Register
|
|
|
|
# - BIT0 : NS - Non Secure bit
|
|
|
|
# - BIT1 : IRQ Handler
|
|
|
|
# - BIT2 : FIQ Handler
|
|
|
|
# - BIT3 : EA - External Abort
|
|
|
|
# - BIT4 : FW - F bit writable
|
|
|
|
# - BIT5 : AW - A bit writable
|
|
|
|
# - BIT6 : nET - Not Early Termination
|
|
|
|
# - BIT7 : SCD - Secure Monitor Call Disable
|
|
|
|
# - BIT8 : HCE - Hyp Call enable
|
|
|
|
# - BIT9 : SIF - Secure Instruction Fetch
|
|
|
|
# - BIT10: RW - Register width control for lower exception levels
|
|
|
|
# - BIT11: SIF - Enables Secure EL1 access to EL1 Architectural Timer
|
|
|
|
# - BIT12: TWI - Trap WFI
|
|
|
|
# - BIT13: TWE - Trap WFE
|
|
|
|
# 0x501 = NS | HCE | RW
|
|
|
|
gArmTokenSpaceGuid.PcdArmScr|0x501|UINT32|0x00000038
|
|
|
|
|
2013-07-18 20:07:46 +02:00
|
|
|
# By default we do transition to EL2 non-secure mode with Stack for EL2.
|
|
|
|
# Mode Description Bits
|
2014-03-24 16:24:23 +01:00
|
|
|
# NS EL2 SP2 all interrupts disabled = 0x3c9
|
|
|
|
# NS EL1 SP1 all interrupts disabled = 0x3c5
|
2013-07-18 20:07:46 +02:00
|
|
|
# Other modes include using SP0 or switching to Aarch32, but these are
|
|
|
|
# not currently supported.
|
|
|
|
gArmTokenSpaceGuid.PcdArmNonSecModeTransition|0x3c9|UINT32|0x0000003E
|
2014-09-09 17:59:38 +02:00
|
|
|
|
|
|
|
|
2014-09-09 18:00:47 +02:00
|
|
|
#
|
2015-02-28 21:25:07 +01:00
|
|
|
# These PCDs are also defined as 'PcdsDynamic' or 'PcdsPatchableInModule' to be
|
|
|
|
# redefined when using UEFI in a context of virtual machine.
|
2014-09-09 18:00:47 +02:00
|
|
|
#
|
2015-02-28 21:25:07 +01:00
|
|
|
[PcdsFixedAtBuild.common, PcdsDynamic.common, PcdsPatchableInModule.common]
|
|
|
|
|
2014-09-09 18:11:30 +02:00
|
|
|
# System Memory (DRAM): These PCDs define the region of in-built system memory
|
2017-11-13 15:38:47 +01:00
|
|
|
# Some platforms can get DRAM extensions, these additional regions may be
|
|
|
|
# declared to UEFI using separate resource descriptor HOBs
|
2014-09-09 18:11:30 +02:00
|
|
|
gArmTokenSpaceGuid.PcdSystemMemoryBase|0|UINT64|0x00000029
|
|
|
|
gArmTokenSpaceGuid.PcdSystemMemorySize|0|UINT64|0x0000002A
|
|
|
|
|
2018-11-27 11:43:53 +01:00
|
|
|
gArmTokenSpaceGuid.PcdMmBufferBase|0|UINT64|0x00000045
|
|
|
|
gArmTokenSpaceGuid.PcdMmBufferSize|0|UINT64|0x00000046
|
|
|
|
|
2021-02-08 01:52:53 +01:00
|
|
|
gArmTokenSpaceGuid.PcdSystemBiosRelease|0xFFFF|UINT16|0x30000058
|
|
|
|
gArmTokenSpaceGuid.PcdEmbeddedControllerFirmwareRelease|0xFFFF|UINT16|0x30000059
|
|
|
|
|
2024-05-13 17:48:42 +02:00
|
|
|
## Define the conduit to use for monitor calls.
|
|
|
|
# Default PcdMonitorConduitHvc = FALSE, conduit = SMC
|
|
|
|
# If PcdMonitorConduitHvc = TRUE, conduit = HVC
|
|
|
|
gArmTokenSpaceGuid.PcdMonitorConduitHvc|FALSE|BOOLEAN|0x00000047
|
|
|
|
|
2015-02-28 21:25:07 +01:00
|
|
|
[PcdsFixedAtBuild.common, PcdsDynamic.common]
|
2014-09-09 17:59:38 +02:00
|
|
|
#
|
|
|
|
# ARM Architectural Timer
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz|0|UINT32|0x00000034
|
|
|
|
|
|
|
|
# ARM Architectural Timer Interrupt(GIC PPI) numbers
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum|29|UINT32|0x00000035
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|30|UINT32|0x00000036
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum|26|UINT32|0x00000040
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|27|UINT32|0x00000041
|
2023-09-19 12:50:45 +02:00
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerHypVirtIntrNum|28|UINT32|0x0000004A
|
2014-09-09 18:00:47 +02:00
|
|
|
|
2014-12-12 20:09:24 +01:00
|
|
|
#
|
|
|
|
# ARM Generic Watchdog
|
|
|
|
#
|
|
|
|
|
2017-02-06 20:05:54 +01:00
|
|
|
gArmTokenSpaceGuid.PcdGenericWatchdogControlBase|0x2A440000|UINT64|0x00000007
|
|
|
|
gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase|0x2A450000|UINT64|0x00000008
|
2014-12-12 20:09:24 +01:00
|
|
|
gArmTokenSpaceGuid.PcdGenericWatchdogEl2IntrNum|93|UINT32|0x00000009
|
|
|
|
|
2014-09-09 18:00:47 +02:00
|
|
|
#
|
|
|
|
# ARM Generic Interrupt Controller
|
|
|
|
#
|
2016-09-05 13:38:20 +02:00
|
|
|
gArmTokenSpaceGuid.PcdGicDistributorBase|0|UINT64|0x0000000C
|
2015-02-16 11:21:06 +01:00
|
|
|
# Base address for the GIC Redistributor region that contains the boot CPU
|
2016-09-05 13:38:20 +02:00
|
|
|
gArmTokenSpaceGuid.PcdGicRedistributorsBase|0|UINT64|0x0000000E
|
|
|
|
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0|UINT64|0x0000000D
|
2014-09-09 18:00:47 +02:00
|
|
|
gArmTokenSpaceGuid.PcdGicSgiIntId|0|UINT32|0x00000025
|
2016-04-29 17:32:21 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bases, sizes and translation offsets of IO and MMIO spaces, respectively.
|
|
|
|
# Note that "IO" is just another MMIO range that simulates IO space; there
|
|
|
|
# are no special instructions to access it.
|
|
|
|
#
|
|
|
|
# The base addresses PcdPciIoBase, PcdPciMmio32Base and PcdPciMmio64Base are
|
|
|
|
# specific to their containing address spaces. In order to get the physical
|
|
|
|
# address for the CPU, for a given access, the respective translation value
|
|
|
|
# has to be added.
|
|
|
|
#
|
|
|
|
# The translations always have to be initialized like this, using UINT64:
|
|
|
|
#
|
|
|
|
# UINT64 IoCpuBase; // mapping target in 64-bit cpu-physical space
|
|
|
|
# UINT64 Mmio32CpuBase; // mapping target in 64-bit cpu-physical space
|
|
|
|
# UINT64 Mmio64CpuBase; // mapping target in 64-bit cpu-physical space
|
|
|
|
#
|
2021-10-11 15:26:23 +02:00
|
|
|
# gEfiMdePkgTokenSpaceGuid.PcdPciIoTranslation = IoCpuBase - PcdPciIoBase;
|
2021-10-11 15:36:28 +02:00
|
|
|
# gEfiMdePkgTokenSpaceGuid.PcdPciMmio32Translation = Mmio32CpuBase - (UINT64)PcdPciMmio32Base;
|
|
|
|
# gEfiMdePkgTokenSpaceGuid.PcdPciMmio64Translation = Mmio64CpuBase - PcdPciMmio64Base;
|
2016-04-29 17:32:21 +02:00
|
|
|
#
|
|
|
|
# because (a) the target address space (ie. the cpu-physical space) is
|
|
|
|
# 64-bit, and (b) the translation values are meant as offsets for *modular*
|
|
|
|
# arithmetic.
|
|
|
|
#
|
|
|
|
# Accordingly, the translation itself needs to be implemented as:
|
|
|
|
#
|
|
|
|
# UINT64 UntranslatedIoAddress; // input parameter
|
|
|
|
# UINT32 UntranslatedMmio32Address; // input parameter
|
|
|
|
# UINT64 UntranslatedMmio64Address; // input parameter
|
|
|
|
#
|
|
|
|
# UINT64 TranslatedIoAddress; // output parameter
|
|
|
|
# UINT64 TranslatedMmio32Address; // output parameter
|
|
|
|
# UINT64 TranslatedMmio64Address; // output parameter
|
|
|
|
#
|
|
|
|
# TranslatedIoAddress = UntranslatedIoAddress +
|
2021-10-11 15:26:23 +02:00
|
|
|
# gEfiMdePkgTokenSpaceGuid.PcdPciIoTranslation;
|
2016-04-29 17:32:21 +02:00
|
|
|
# TranslatedMmio32Address = (UINT64)UntranslatedMmio32Address +
|
2021-10-11 15:36:28 +02:00
|
|
|
# gEfiMdePkgTokenSpaceGuid.PcdPciMmio32Translation;
|
2016-04-29 17:32:21 +02:00
|
|
|
# TranslatedMmio64Address = UntranslatedMmio64Address +
|
2021-10-11 15:36:28 +02:00
|
|
|
# gEfiMdePkgTokenSpaceGuid.PcdPciMmio64Translation;
|
2016-04-29 17:32:21 +02:00
|
|
|
#
|
|
|
|
# The modular arithmetic performed in UINT64 ensures that the translation
|
|
|
|
# works correctly regardless of the relation between IoCpuBase and
|
|
|
|
# PcdPciIoBase, Mmio32CpuBase and PcdPciMmio32Base, and Mmio64CpuBase and
|
|
|
|
# PcdPciMmio64Base.
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdPciIoBase|0x0|UINT64|0x00000050
|
|
|
|
gArmTokenSpaceGuid.PcdPciIoSize|0x0|UINT64|0x00000051
|
|
|
|
gArmTokenSpaceGuid.PcdPciMmio32Base|0x0|UINT32|0x00000053
|
|
|
|
gArmTokenSpaceGuid.PcdPciMmio32Size|0x0|UINT32|0x00000054
|
|
|
|
gArmTokenSpaceGuid.PcdPciMmio64Base|0x0|UINT64|0x00000056
|
|
|
|
gArmTokenSpaceGuid.PcdPciMmio64Size|0x0|UINT64|0x00000057
|
|
|
|
|
|
|
|
#
|
|
|
|
# Inclusive range of allowed PCI buses.
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdPciBusMin|0x0|UINT32|0x00000059
|
|
|
|
gArmTokenSpaceGuid.PcdPciBusMax|0x0|UINT32|0x0000005A
|
2021-10-23 09:32:41 +02:00
|
|
|
|
|
|
|
[PcdsDynamicEx]
|
|
|
|
#
|
|
|
|
# This dynamic PCD hold the GUID of a firmware FFS which contains
|
|
|
|
# the LinuxBoot payload.
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdLinuxBootFileGuid|{0x0}|VOID*|0x0000005C
|