ACPI Tables
-----------
The expectations of individual ACPI tables are discussed in the list that
follows.

If a section number is used, it refers to a section number in the ACPI
specification where the object is defined.  If "Signature Reserved" is used,
the table signature (the first four bytes of the table) is the only portion
of the table recognized by the specification, and the actual table is defined
outside of the UEFI Forum (see Section 5.2.6 of the specification).

For ACPI on arm64, tables also fall into the following categories:

       -- Required: DSDT, FADT, GTDT, MADT, MCFG, RSDP, SPCR, XSDT

       -- Recommended: BERT, EINJ, ERST, HEST, PCCT, SSDT

       -- Optional: BGRT, CPEP, CSRT, DBG2, DRTM, ECDT, FACS, FPDT, IORT,
          MCHI, MPST, MSCT, NFIT, PMTT, RASF, SBST, SLIT, SPMI, SRAT, STAO,
	  TCPA, TPM2, UEFI, XENV

       -- Not supported: BOOT, DBGP, DMAR, ETDT, HPET, IBFT, IVRS, LPIT,
          MSDM, OEMx, PSDT, RSDT, SLIC, WAET, WDAT, WDRT, WPBT

Table  Usage for ARMv8 Linux
-----  ----------------------------------------------------------------
BERT   Section 18.3 (signature == "BERT")
       == Boot Error Record Table ==
       Must be supplied if RAS support is provided by the platform.  It
       is recommended this table be supplied.

BOOT   Signature Reserved (signature == "BOOT")
       == simple BOOT flag table ==
       Microsoft only table, will not be supported.

BGRT   Section 5.2.22 (signature == "BGRT")
       == Boot Graphics Resource Table ==
       Optional, not currently supported, with no real use-case for an
       ARM server.

CPEP   Section 5.2.18 (signature == "CPEP")
       == Corrected Platform Error Polling table ==
       Optional, not currently supported, and not recommended until such
       time as ARM-compatible hardware is available, and the specification
       suitably modified.

CSRT   Signature Reserved (signature == "CSRT")
       == Core System Resources Table ==
       Optional, not currently supported.

DBG2   Signature Reserved (signature == "DBG2")
       == DeBuG port table 2 ==
       License has changed and should be usable.  Optional if used instead
       of earlycon=<device> on the command line.

DBGP   Signature Reserved (signature == "DBGP")
       == DeBuG Port table ==
       Microsoft only table, will not be supported.

DSDT   Section 5.2.11.1 (signature == "DSDT")
       == Differentiated System Description Table ==
       A DSDT is required; see also SSDT.

       ACPI tables contain only one DSDT but can contain one or more SSDTs,
       which are optional.  Each SSDT can only add to the ACPI namespace,
       but cannot modify or replace anything in the DSDT.

DMAR   Signature Reserved (signature == "DMAR")
       == DMA Remapping table ==
       x86 only table, will not be supported.

DRTM   Signature Reserved (signature == "DRTM")
       == Dynamic Root of Trust for Measurement table ==
       Optional, not currently supported.

ECDT   Section 5.2.16 (signature == "ECDT")
       == Embedded Controller Description Table ==
       Optional, not currently supported, but could be used on ARM if and
       only if one uses the GPE_BIT field to represent an IRQ number, since
       there are no GPE blocks defined in hardware reduced mode.  This would
       need to be modified in the ACPI specification.

EINJ   Section 18.6 (signature == "EINJ")
       == Error Injection table ==
       This table is very useful for testing platform response to error
       conditions; it allows one to inject an error into the system as
       if it had actually occurred.  However, this table should not be
       shipped with a production system; it should be dynamically loaded
       and executed with the ACPICA tools only during testing.

ERST   Section 18.5 (signature == "ERST")
       == Error Record Serialization Table ==
       On a platform supports RAS, this table must be supplied if it is not
       UEFI-based; if it is UEFI-based, this table may be supplied. When this
       table is not present, UEFI run time service will be utilized to save
       and retrieve hardware error information to and from a persistent store.

ETDT   Signature Reserved (signature == "ETDT")
       == Event Timer Description Table ==
       Obsolete table, will not be supported.

FACS   Section 5.2.10 (signature == "FACS")
       == Firmware ACPI Control Structure ==
       It is unlikely that this table will be terribly useful.  If it is
       provided, the Global Lock will NOT be used since it is not part of
       the hardware reduced profile, and only 64-bit address fields will
       be considered valid.

FADT   Section 5.2.9 (signature == "FACP")
       == Fixed ACPI Description Table ==
       Required for arm64.

       The HW_REDUCED_ACPI flag must be set.  All of the fields that are
       to be ignored when HW_REDUCED_ACPI is set are expected to be set to
       zero.

       If an FACS table is provided, the X_FIRMWARE_CTRL field is to be
       used, not FIRMWARE_CTRL.

       If PSCI is used (as is recommended), make sure that ARM_BOOT_ARCH is
       filled in properly -- that the PSCI_COMPLIANT flag is set and that
       PSCI_USE_HVC is set or unset as needed (see table 5-37).

       For the DSDT that is also required, the X_DSDT field is to be used,
       not the DSDT field.

FPDT   Section 5.2.23 (signature == "FPDT")
       == Firmware Performance Data Table ==
       Optional, not currently supported.

GTDT   Section 5.2.24 (signature == "GTDT")
       == Generic Timer Description Table ==
       Required for arm64.

HEST   Section 18.3.2 (signature == "HEST")
       == Hardware Error Source Table ==
       ARM-specific error sources have been defined; please use those or the
       PCI types such as type 6 (AER Root Port), 7 (AER Endpoint), or 8 (AER
       Bridge), or use type 9 (Generic Hardware Error Source).  Firmware first
       error handling is possible if and only if Trusted Firmware is being
       used on arm64.

       Must be supplied if RAS support is provided by the platform.  It
       is recommended this table be supplied.

HPET   Signature Reserved (signature == "HPET")
       == High Precision Event timer Table ==
       x86 only table, will not be supported.

IBFT   Signature Reserved (signature == "IBFT")
       == iSCSI Boot Firmware Table ==
       Microsoft defined table, support TBD.

IORT   Signature Reserved (signature == "IORT")
       == Input Output Remapping Table ==
       arm64 only table, required in order to describe IO topology, SMMUs,
       and GIC ITSs, and how those various components are connected together,
       such as identifying which components are behind which SMMUs/ITSs.
       This table will only be required on certain SBSA platforms (e.g.,
       when using GICv3-ITS and an SMMU); on SBSA Level 0 platforms, it 
       remains optional.

IVRS   Signature Reserved (signature == "IVRS")
       == I/O Virtualization Reporting Structure ==
       x86_64 (AMD) only table, will not be supported.

LPIT   Signature Reserved (signature == "LPIT")
       == Low Power Idle Table ==
       x86 only table as of ACPI 5.1; starting with ACPI 6.0, processor
       descriptions and power states on ARM platforms should use the DSDT
       and define processor container devices (_HID ACPI0010, Section 8.4,
       and more specifically 8.4.3 and and 8.4.4).

MADT   Section 5.2.12 (signature == "APIC")
       == Multiple APIC Description Table ==
       Required for arm64.  Only the GIC interrupt controller structures
       should be used (types 0xA - 0xF).

MCFG   Signature Reserved (signature == "MCFG")
       == Memory-mapped ConFiGuration space ==
       If the platform supports PCI/PCIe, an MCFG table is required.

MCHI   Signature Reserved (signature == "MCHI")
       == Management Controller Host Interface table ==
       Optional, not currently supported.

MPST   Section 5.2.21 (signature == "MPST")
       == Memory Power State Table ==
       Optional, not currently supported.

MSCT   Section 5.2.19 (signature == "MSCT")
       == Maximum System Characteristic Table ==
       Optional, not currently supported.

MSDM   Signature Reserved (signature == "MSDM")
       == Microsoft Data Management table ==
       Microsoft only table, will not be supported.

NFIT   Section 5.2.25 (signature == "NFIT")
       == NVDIMM Firmware Interface Table ==
       Optional, not currently supported.

OEMx   Signature of "OEMx" only
       == OEM Specific Tables ==
       All tables starting with a signature of "OEM" are reserved for OEM
       use.  Since these are not meant to be of general use but are limited
       to very specific end users, they are not recommended for use and are
       not supported by the kernel for arm64.

PCCT   Section 14.1 (signature == "PCCT)
       == Platform Communications Channel Table ==
       Recommend for use on arm64; use of PCC is recommended when using CPPC
       to control performance and power for platform processors.

PMTT   Section 5.2.21.12 (signature == "PMTT")
       == Platform Memory Topology Table ==
       Optional, not currently supported.

PSDT   Section 5.2.11.3 (signature == "PSDT")
       == Persistent System Description Table ==
       Obsolete table, will not be supported.

RASF   Section 5.2.20 (signature == "RASF")
       == RAS Feature table ==
       Optional, not currently supported.

RSDP   Section 5.2.5 (signature == "RSD PTR")
       == Root System Description PoinTeR ==
       Required for arm64.

RSDT   Section 5.2.7 (signature == "RSDT")
       == Root System Description Table ==
       Since this table can only provide 32-bit addresses, it is deprecated
       on arm64, and will not be used.  If provided, it will be ignored.

SBST   Section 5.2.14 (signature == "SBST")
       == Smart Battery Subsystem Table ==
       Optional, not currently supported.

SLIC   Signature Reserved (signature == "SLIC")
       == Software LIcensing table ==
       Microsoft only table, will not be supported.

SLIT   Section 5.2.17 (signature == "SLIT")
       == System Locality distance Information Table ==
       Optional in general, but required for NUMA systems.

SPCR   Signature Reserved (signature == "SPCR")
       == Serial Port Console Redirection table ==
       Required for arm64.

SPMI   Signature Reserved (signature == "SPMI")
       == Server Platform Management Interface table ==
       Optional, not currently supported.

SRAT   Section 5.2.16 (signature == "SRAT")
       == System Resource Affinity Table ==
       Optional, but if used, only the GICC Affinity structures are read.
       To support arm64 NUMA, this table is required.

SSDT   Section 5.2.11.2 (signature == "SSDT")
       == Secondary System Description Table ==
       These tables are a continuation of the DSDT; these are recommended
       for use with devices that can be added to a running system, but can
       also serve the purpose of dividing up device descriptions into more
       manageable pieces.

       An SSDT can only ADD to the ACPI namespace.  It cannot modify or
       replace existing device descriptions already in the namespace.

       These tables are optional, however.  ACPI tables should contain only
       one DSDT but can contain many SSDTs.

STAO   Signature Reserved (signature == "STAO")
       == _STA Override table ==
       Optional, but only necessary in virtualized environments in order to
       hide devices from guest OSs.

TCPA   Signature Reserved (signature == "TCPA")
       == Trusted Computing Platform Alliance table ==
       Optional, not currently supported, and may need changes to fully
       interoperate with arm64.

TPM2   Signature Reserved (signature == "TPM2")
       == Trusted Platform Module 2 table ==
       Optional, not currently supported, and may need changes to fully
       interoperate with arm64.

UEFI   Signature Reserved (signature == "UEFI")
       == UEFI ACPI data table ==
       Optional, not currently supported.  No known use case for arm64,
       at present.

WAET   Signature Reserved (signature == "WAET")
       == Windows ACPI Emulated devices Table ==
       Microsoft only table, will not be supported.

WDAT   Signature Reserved (signature == "WDAT")
       == Watch Dog Action Table ==
       Microsoft only table, will not be supported.

WDRT   Signature Reserved (signature == "WDRT")
       == Watch Dog Resource Table ==
       Microsoft only table, will not be supported.

WPBT   Signature Reserved (signature == "WPBT")
       == Windows Platform Binary Table ==
       Microsoft only table, will not be supported.

XENV   Signature Reserved (signature == "XENV")
       == Xen project table ==
       Optional, used only by Xen at present.

XSDT   Section 5.2.8 (signature == "XSDT")
       == eXtended System Description Table ==
       Required for arm64.


ACPI Objects
------------
The expectations on individual ACPI objects that are likely to be used are
shown in the list that follows; any object not explicitly mentioned below
should be used as needed for a particular platform or particular subsystem,
such as power management or PCI.

Name   Section         Usage for ARMv8 Linux
----   ------------    -------------------------------------------------
_CCA   6.2.17          This method must be defined for all bus masters
                       on arm64 -- there are no assumptions made about
                       whether such devices are cache coherent or not.
                       The _CCA value is inherited by all descendants of
                       these devices so it does not need to be repeated.
                       Without _CCA on arm64, the kernel does not know what
                       to do about setting up DMA for the device.

                       NB: this method provides default cache coherency
                       attributes; the presence of an SMMU can be used to
                       modify that, however.  For example, a master could
                       default to non-coherent, but be made coherent with
                       the appropriate SMMU configuration (see Table 17 of
                       the IORT specification, ARM Document DEN 0049B).

_CID   6.1.2           Use as needed, see also _HID.

_CLS   6.1.3           Use as needed, see also _HID.

_CPC   8.4.7.1         Use as needed, power management specific.  CPPC is
                       recommended on arm64.

_CRS   6.2.2           Required on arm64.

_CSD   8.4.2.2         Use as needed, used only in conjunction with _CST.

_CST   8.4.2.1         Low power idle states (8.4.4) are recommended instead
                       of C-states.

_DDN   6.1.4           This field can be used for a device name.  However,
                       it is meant for DOS device names (e.g., COM1), so be
                       careful of its use across OSes.

_DSD   6.2.5           To be used with caution.  If this object is used, try
                       to use it within the constraints already defined by the
                       Device Properties UUID.  Only in rare circumstances
                       should it be necessary to create a new _DSD UUID.

                       In either case, submit the _DSD definition along with
                       any driver patches for discussion, especially when
                       device properties are used.  A driver will not be
                       considered complete without a corresponding _DSD
                       description.  Once approved by kernel maintainers,
                       the UUID or device properties must then be registered
                       with the UEFI Forum; this may cause some iteration as
                       more than one OS will be registering entries.

_DSM   9.1.1           Do not use this method.  It is not standardized, the
                       return values are not well documented, and it is
                       currently a frequent source of error.

\_GL   5.7.1           This object is not to be used in hardware reduced
                       mode, and therefore should not be used on arm64.

_GLK   6.5.7           This object requires a global lock be defined; there
                       is no global lock on arm64 since it runs in hardware
                       reduced mode.  Hence, do not use this object on arm64.

\_GPE  5.3.1           This namespace is for x86 use only.  Do not use it
                       on arm64.

_HID   6.1.5           This is the primary object to use in device probing,
		       though _CID and _CLS may also be used.

_INI   6.5.1           Not required, but can be useful in setting up devices
                       when UEFI leaves them in a state that may not be what
                       the driver expects before it starts probing.

_LPI   8.4.4.3         Recommended for use with processor definitions (_HID
		       ACPI0010) on arm64.  See also _RDI.

_MLS   6.1.7           Highly recommended for use in internationalization.

_OFF   7.2.2           It is recommended to define this method for any device
                       that can be turned on or off.

_ON    7.2.3           It is recommended to define this method for any device
                       that can be turned on or off.

\_OS   5.7.3           This method will return "Linux" by default (this is
                       the value of the macro ACPI_OS_NAME on Linux).  The
                       command line parameter acpi_os=<string> can be used
                       to set it to some other value.

_OSC   6.2.11          This method can be a global method in ACPI (i.e.,
                       \_SB._OSC), or it may be associated with a specific
                       device (e.g., \_SB.DEV0._OSC), or both.  When used
                       as a global method, only capabilities published in
                       the ACPI specification are allowed.  When used as
                       a device-specific method, the process described for
                       using _DSD MUST be used to create an _OSC definition;
                       out-of-process use of _OSC is not allowed.  That is,
                       submit the device-specific _OSC usage description as
                       part of the kernel driver submission, get it approved
                       by the kernel community, then register it with the
                       UEFI Forum.

\_OSI  5.7.2           Deprecated on ARM64.  As far as ACPI firmware is 
		       concerned, _OSI is not to be used to determine what 
		       sort of system is being used or what functionality
		       is provided.  The _OSC method is to be used instead.

_PDC   8.4.1           Deprecated, do not use on arm64.

\_PIC  5.8.1           The method should not be used.  On arm64, the only
                       interrupt model available is GIC.

\_PR   5.3.1           This namespace is for x86 use only on legacy systems.
                       Do not use it on arm64.

_PRT   6.2.13          Required as part of the definition of all PCI root
                       devices.

_PRx   7.3.8-11        Use as needed; power management specific.  If _PR0 is
                       defined, _PR3 must also be defined.

_PSx   7.3.2-5         Use as needed; power management specific.  If _PS0 is
                       defined, _PS3 must also be defined.  If clocks or
                       regulators need adjusting to be consistent with power
                       usage, change them in these methods.

_RDI   8.4.4.4         Recommended for use with processor definitions (_HID
		       ACPI0010) on arm64.  This should only be used in 
		       conjunction with _LPI.

\_REV  5.7.4           Always returns the latest version of ACPI supported.

\_SB   5.3.1           Required on arm64; all devices must be defined in this
                       namespace.

_SLI   6.2.15          Use is recommended when SLIT table is in use.

_STA   6.3.7,          It is recommended to define this method for any device
       7.2.4           that can be turned on or off.  See also the STAO table
                       that provides overrides to hide devices in virtualized
                       environments.

_SRS   6.2.16          Use as needed; see also _PRS.

_STR   6.1.10          Recommended for conveying device names to end users;
                       this is preferred over using _DDN.

_SUB   6.1.9           Use as needed; _HID or _CID are preferred.

_SUN   6.1.11          Use as needed, but recommended.

_SWS   7.4.3           Use as needed; power management specific; this may
                       require specification changes for use on arm64.

_UID   6.1.12          Recommended for distinguishing devices of the same
                       class; define it if at all possible.




ACPI Event Model
----------------
Do not use GPE block devices; these are not supported in the hardware reduced
profile used by arm64.  Since there are no GPE blocks defined for use on ARM
platforms, ACPI events must be signaled differently.

There are two options: GPIO-signaled interrupts (Section 5.6.5), and
interrupt-signaled events (Section 5.6.9).  Interrupt-signaled events are a
new feature in the ACPI 6.1 specification.  Either -- or both -- can be used
on a given platform, and which to use may be dependent of limitations in any
given SoC.  If possible, interrupt-signaled events are recommended.


ACPI Processor Control
----------------------
Section 8 of the ACPI specification changed significantly in version 6.0.
Processors should now be defined as Device objects with _HID ACPI0007; do
not use the deprecated Processor statement in ASL.  All multiprocessor systems
should also define a hierarchy of processors, done with Processor Container
Devices (see Section 8.4.3.1, _HID ACPI0010); do not use processor aggregator
devices (Section 8.5) to describe processor topology.  Section 8.4 of the
specification describes the semantics of these object definitions and how
they interrelate.

Most importantly, the processor hierarchy defined also defines the low power
idle states that are available to the platform, along with the rules for
determining which processors can be turned on or off and the circumstances
that control that.  Without this information, the processors will run in
whatever power state they were left in by UEFI.

Note too, that the processor Device objects defined and the entries in the
MADT for GICs are expected to be in synchronization.  The _UID of the Device
object must correspond to processor IDs used in the MADT.

It is recommended that CPPC (8.4.5) be used as the primary model for processor
performance control on arm64.  C-states and P-states may become available at
some point in the future, but most current design work appears to favor CPPC.

Further, it is essential that the ARMv8 SoC provide a fully functional
implementation of PSCI; this will be the only mechanism supported by ACPI
to control CPU power state.  Booting of secondary CPUs using the ACPI
parking protocol is possible, but discouraged, since only PSCI is supported
for ARM servers.


ACPI System Address Map Interfaces
----------------------------------
In Section 15 of the ACPI specification, several methods are mentioned as
possible mechanisms for conveying memory resource information to the kernel.
For arm64, we will only support UEFI for booting with ACPI, hence the UEFI
GetMemoryMap() boot service is the only mechanism that will be used.


ACPI Platform Error Interfaces (APEI)
-------------------------------------
The APEI tables supported are described above.

APEI requires the equivalent of an SCI and an NMI on ARMv8.  The SCI is used
to notify the OSPM of errors that have occurred but can be corrected and the
system can continue correct operation, even if possibly degraded.  The NMI is
used to indicate fatal errors that cannot be corrected, and require immediate
attention.

Since there is no direct equivalent of the x86 SCI or NMI, arm64 handles
these slightly differently.  The SCI is handled as a high priority interrupt;
given that these are corrected (or correctable) errors being reported, this
is sufficient.  The NMI is emulated as the highest priority interrupt
possible.  This implies some caution must be used since there could be
interrupts at higher privilege levels or even interrupts at the same priority
as the emulated NMI.  In Linux, this should not be the case but one should
be aware it could happen.


ACPI Objects Not Supported on ARM64
-----------------------------------
While this may change in the future, there are several classes of objects
that can be defined, but are not currently of general interest to ARM servers.
Some of these objects have x86 equivalents, and may actually make sense in ARM
servers.  However, there is either no hardware available at present, or there
may not even be a non-ARM implementation yet.  Hence, they are not currently
supported.

The following classes of objects are not supported:

       -- Section 9.2: ambient light sensor devices

       -- Section 9.3: battery devices

       -- Section 9.4: lids (e.g., laptop lids)

       -- Section 9.8.2: IDE controllers

       -- Section 9.9: floppy controllers

       -- Section 9.10: GPE block devices

       -- Section 9.15: PC/AT RTC/CMOS devices

       -- Section 9.16: user presence detection devices

       -- Section 9.17: I/O APIC devices; all GICs must be enumerable via MADT

       -- Section 9.18: time and alarm devices (see 9.15)

       -- Section 10: power source and power meter devices

       -- Section 11: thermal management

       -- Section 12: embedded controllers interface

       -- Section 13: SMBus interfaces


This also means that there is no support for the following objects:

Name   Section                     Name   Section
----   ------------                ----   ------------
_ALC   9.3.4                       _FDM   9.10.3
_ALI   9.3.2                       _FIX   6.2.7
_ALP   9.3.6                       _GAI   10.4.5
_ALR   9.3.5                       _GHL   10.4.7
_ALT   9.3.3                       _GTM   9.9.2.1.1
_BCT   10.2.2.10                   _LID   9.5.1
_BDN   6.5.3                       _PAI   10.4.4
_BIF   10.2.2.1                    _PCL   10.3.2
_BIX   10.2.2.1                    _PIF   10.3.3
_BLT   9.2.3                       _PMC   10.4.1
_BMA   10.2.2.4                    _PMD   10.4.8
_BMC   10.2.2.12                   _PMM   10.4.3
_BMD   10.2.2.11                   _PRL   10.3.4
_BMS   10.2.2.5                    _PSR   10.3.1
_BST   10.2.2.6                    _PTP   10.4.2
_BTH   10.2.2.7                    _SBS   10.1.3
_BTM   10.2.2.9                    _SHL   10.4.6
_BTP   10.2.2.8                    _STM   9.9.2.1.1
_DCK   6.5.2                       _UPD   9.16.1
_EC    12.12                       _UPP   9.16.2
_FDE   9.10.1                      _WPC   10.5.2
_FDI   9.10.2                      _WPP   10.5.3

