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
https://events.static.linuxfound.org/sites/events/files/slides/acpi_on_arm64_0.pdf
Documentation/arm64/arm-acpi.txt: Kernel Documentation - ACPI on ARMv8 Servers