ACPI on Linux Arm64

This page is to capture the status of ACPI support for Linux Arm64 and identify any generic or platform-specific missing parts in the kernel for ACPI.

Linux Arm64 had support for ACPI for quite some time now and off-the-shelf operating systems can be booted with ACPI support on platforms with SystemReady ES/SR compliance.

  • Basic ACPI support for ARM64 was merged in v4.1

  • The ARMv8 kernel implements the reduced hardware model of ACPI version 5.1 or later.

ACPI Tables Status

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

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

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

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

ACPI Processor Control

  • CPPC (8.4.5) be used as the primary model for processor performance control on arm64. C-states and P-states are not available yet.

  • PSCI is used to control CPU power states

Missing ACPI Devices for Linux Arm64

Following ACPI devices are not yet implemented as either not interesting for Arm64 servers or due to lack of platforms supporting the features. Some of the devices are available on x64 word.

  • 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 ==== =========================== ==== ==========

Reference: Documentation/arm64/acpi_object_usage.rst

ACPI Specification status

  • ACPI v5.1 was the first release enabling ARM systems

  • ACPI v6.0 added GICv3, SMMU, etc.

References