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