Glossary
========

This glossary provides definitions for terms and abbreviations used in the TF-A
documentation.

You can find additional definitions in the `Arm Glossary`_.

.. glossary::
   :sorted:

   AArch32
      32-bit execution state of the ARMv8 ISA

   AArch64
      64-bit execution state of the ARMv8 ISA

   AMU
      Activity Monitor Unit, a hardware monitoring unit introduced by FEAT_AMUv1
      that exposes CPU core runtime metrics as a set of counter registers.

   API
      Application Programming Interface

   AT
      Address Translation

   BTI
      Branch Target Identification. An Armv8.5 extension providing additional
      control flow integrity around indirect branches and their targets.

   CoT
   COT
      Chain of Trust

   CSS
      Compute Sub-System

   CVE
      Common Vulnerabilities and Exposures. A CVE document is commonly used to
      describe a publicly-known security vulnerability.

   DICE
      Device Identifier Composition Engine

   DCE
      DRTM Configuration Environment

   D-CRTM
      Dynamic Code Root of Trust for Measurement

   DLME
      Dynamically Launched Measured Environment

   DRTM
      Dynamic Root of Trust for Measurement

   DPE
      DICE Protection Environment

   DS-5
      Arm Development Studio 5

   DSU
      DynamIQ Shared Unit

   DT
      Device Tree

   DTB
      Device Tree Blob

   EL
      Exception Level

   EHF
      Exception Handling Framework

   ERRATA_ABI
      Errata management firmware interface

   FCONF
      Firmware Configuration Framework

   FDT
      Flattened Device Tree

   FF-A
      Firmware Framework for Arm A-profile

   FIP
      Firmware Image Package

   FVP
      Fixed Virtual Platform

   FWU
      FirmWare Update

   GIC
      Generic Interrupt Controller

   ISA
      Instruction Set Architecture

   Linaro
      A collaborative engineering organization consolidating
      and optimizing open source software and tools for the Arm architecture.

   LSP
      A logical secure partition managed by SPM

   MMU
      Memory Management Unit

   MPAM
      Memory Partitioning And Monitoring. An optional Armv8.4 extension.

   MPMM
     Maximum Power Mitigation Mechanism, an optional power management mechanism
     supported by some Arm Armv9-A cores.

   MPIDR
      Multiprocessor Affinity Register

   MTE
      Memory Tagging Extension. An optional Armv8.5 extension that enables
      hardware-assisted memory tagging.

   OEN
      Owning Entity Number

   OP-TEE
      Open Portable Trusted Execution Environment. An example of a :term:`TEE`

   OTE
      Open-source Trusted Execution Environment

   PCR
      Platform Configuration Register

   PDD
      Platform Design Document

   PAUTH
      Pointer Authentication. An optional extension introduced in Armv8.3.

   PMF
      Performance Measurement Framework

   PSA
      Platform Security Architecture

   PSR
     Platform Security Requirements

   PSCI
      Power State Coordination Interface

   RAS
      Reliability, Availability, and Serviceability extensions. A mandatory
      extension for the Armv8.2 architecture and later. An optional extension to
      the base Armv8 architecture.

   ROT
      Root of Trust

   SCMI
      System Control and Management Interface

   SCP
      System Control Processor

   SDEI
      Software Delegated Exception Interface

   SDS
      Shared Data Storage

   SEA
      Synchronous External Abort

   SiP
   SIP
      Silicon Provider

   SMC
      Secure Monitor Call

   SMCCC
      :term:`SMC` Calling Convention

   SoC
      System on Chip

   SP
      Secure Partition

   SPD
      Secure Payload Dispatcher

   SPM
      Secure Partition Manager

   SRTM
      Static Root of Trust for Measurement

   SSBS
      Speculative Store Bypass Safe. Introduced in Armv8.5, this configuration
      bit can be set by software to allow or prevent the hardware from
      performing speculative operations.

   SVE
      Scalable Vector Extension

   TBB
      Trusted Board Boot

   TBBR
      Trusted Board Boot Requirements

   TCB
      Trusted Compute Base

   TCG
      Trusted Computing Group

   TEE
      Trusted Execution Environment

   TF-A
      Trusted Firmware-A

   TF-M
      Trusted Firmware-M

   TLB
      Translation Lookaside Buffer

   TLK
      Trusted Little Kernel. A Trusted OS from NVIDIA.

   TPM
      Trusted Platform Module

   TRNG
      True Random Number Generator (hardware based)

   TSP
      Test Secure Payload

   TZC
      TrustZone Controller

   UBSAN
      Undefined Behavior Sanitizer

   UEFI
      Unified Extensible Firmware Interface

   WDOG
      Watchdog

   XLAT
      Translation (abbr.). For example, "XLAT table".

.. _`Arm Glossary`: https://developer.arm.com/support/arm-glossary
