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, SSDT

       -- Optional: BGRT, CPEP, CSRT, DRTM, ECDT, FACS, FPDT, MCHI, MPST,
          MSCT, RASF, SBST, SLIT, SPMI, SRAT, TCPA, TPM2, UEFI

       -- Not supported: BOOT, DBG2, DBGP, DMAR, ETDT, HPET, IBFT, IVRS,
          LPIT, MSDM, 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 ==
       Microsoft only table, will not be supported.

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 ==
       Until further error source types are defined, use only types 6 (AER
       Root Port), 7 (AER Endpoint), 8 (AER Bridge), or 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.

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; future versions have been adapted for
       use with ARM and will be recommended in order to support ACPI power
       management.

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 - 0xE).

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.

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

MSCT   Section 5.2.19 (signature == "MSCT")
       == Maximum System Characteristic Table ==
       Optional, not currently 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.

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 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.

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.

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


ACPI Objects
------------
The expectations on individual ACPI objects are discussed in the list that
follows:

Name   Section         Usage for ARMv8 Linux
----   ------------    -------------------------------------------------
_ADR   6.1.1           Use as needed.

_BBN   6.5.5           Use as needed; PCI-specific.

_BDN   6.5.3           Optional; not likely to be used on arm64.

_CCA   6.2.17          This method should be defined for all bus masters
                       on arm64.  While cache coherency is assumed, making
                       it explicit ensures the kernel will set up DMA as
                       it should.

_CDM   6.2.1           Optional, to be used only for processor devices.

_CID   6.1.2           Use as needed.

_CLS   6.1.3           Use as needed.

_CRS   6.2.2           Required on arm64.

_DCK   6.5.2           Optional; not likely to be used on arm64.

_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.

_DEP   6.5.8           Use as needed.

_DIS   6.2.3           Optional, for power management use.

_DLM   5.7.5           Optional.

_DMA   6.2.4           Optional.

_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                   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.

_DSW   7.2.1           Use as needed; power management specific.

_EDL   6.3.1           Optional.

_EJD   6.3.2           Optional.

_EJx   6.3.3           Optional.

_FIX   6.2.7           x86 specific, not used on arm64.

\_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.

_GSB   6.2.7           Optional.

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

_HPP   6.2.8           Optional, PCI specific.

_HPX   6.2.9           Optional, PCI specific.

_HRV   6.1.6           Optional, use as needed to clarify device behavior; in
                       some cases, this may be easier to use than _DSD.

_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.

_IRC   7.2.15          Use as needed; power management specific.

_LCK   6.3.4           Optional.

_MAT   6.2.10          Optional; see also the MADT.

_MLS   6.1.7           Optional, but highly recommended for use in
                       internationalization.

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

_ON    7.1.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.  Any invocation of this method
                       will print a warning on the console and return false.
                       That is, as far as ACPI firmware is concerned, _OSI
                       cannot be used to determine what sort of system is
                       being used or what functionality is provided.  The
                       _OSC method is to be used instead.

_OST   6.3.5           Optional.

_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.

_PLD   6.1.8           Optional.

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

_PRS   6.2.12          Optional.

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

_PRW   7.2.13          Use as needed; power management specific.

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

_PSC   7.2.6           Use as needed; power management specific.

_PSE   7.2.7           Use as needed; power management specific.

_PSW   7.2.14          Use as needed; power management specific.

_PSx   7.2.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.

\_PTS  7.3.1           Use as needed; power management specific.

_PXM   6.2.14          Optional.

_REG   6.5.4           Use as needed.

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

_RMV   6.3.6           Optional.

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

_SEG   6.5.6           Use as needed; PCI-specific.

\_SI   5.3.1,          Optional.
       9.1

_SLI   6.2.15          Optional; recommended when SLIT table is in use.

_STA   6.3.7,          It is recommended to define this method for any device
       7.1.4           that can be turned on or off.

_SRS   6.2.16          Optional; 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          Optional.

\_Sx   7.3.2           Use as needed; power management specific.

_SxD   7.2.16-19       Use as needed; power management specific.

_SxW   7.2.20-24       Use as needed; power management specific.

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

\_TTS  7.3.4           Use as needed; power management specific.

\_TZ   5.3.1           Optional.

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

\_WAK  7.3.5           Use as needed; power management specific.


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, GPIO-signaled interrupts should be used for creating system events.


ACPI Processor Control
----------------------
Section 8 of the ACPI specification is currently undergoing change that
should be completed in the 6.0 version of the specification.  Processor
performance control will be handled differently for arm64 at that point
in time.  Processor aggregator devices (section 8.5) will not be used,
for example, but another similar mechanism instead.

While UEFI constrains what we can say until the release of 6.0, it is
recommended that CPPC (8.4.5) be used as the primary model.  This will
still be useful into the future.  C-states and P-states will still be
provided, but most of the 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 (including secondary CPU booting).

More details will be provided on the release of the ACPI 6.0 specification.


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 normal GPIO-signaled
interrupt; given that these are corrected (or correctable) errors being
reported, this is sufficient.  The NMI is emulated as the highest priority
GPIO-signaled 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.

These 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)


ACPI Objects Not Yet Implemented
--------------------------------
While these objects have x86 equivalents, and they do make some sense in ARM
servers, there is either no hardware available at present, or in some cases
there may not yet be a non-ARM implementation.  Hence, they are currently not
implemented though that may change in the future.

Not yet implemented are:

       -- Section 10: power source and power meter devices

       -- Section 11: thermal management

       -- Section 12: embedded controllers interface

       -- Section 13: SMBus interfaces

       -- Section 17: NUMA support (prototypes have been submitted for
          review)
