acpitables

Firmware Test Suite - acpitables test

This test sanity checks various fields in common ACPI tables against the ACPI specification and will report any anomalies. These test can be very pedantic and possibly flag errors that are worked around in the Linux kernel.

Typical output from this test is as follows:

ACPI table settings sanity checks.
--------------------------------------------------------------------------------
Test 1 of 1: Check ACPI tables.
PASSED: Test 1, Table APIC passed.
PASSED: Test 1, Table ECDT passed.
FAILED [MEDIUM] FADT32And64BothDefined: Test 1, FADT 32 bit FIRMWARE_CONTROL is
non-zero, and X_FIRMWARE_CONTROL is also non-zero. Section 5.2.9 of the ACPI
specification states that if the FIRMWARE_CONTROL is non-zero then
X_FIRMWARE_CONTROL must be set to zero.

ADVICE: The FADT FIRMWARE_CTRL is a 32 bit pointer that points to the physical
memory address of the Firmware ACPI Control Structure (FACS). There is also an
extended 64 bit version of this, the X_FIRMWARE_CTRL pointer that also can point
to the FACS. Section 5.2.9 of the ACPI specification states that if the
X_FIRMWARE_CTRL field contains a non zero value then the FIRMWARE_CTRL field
*must* be zero. This error is also detected by the Linux kernel. If
FIRMWARE_CTRL and X_FIRMWARE_CTRL are defined, then the kernel just uses the 64
bit version of the pointer.

PASSED: Test 1, Table HPET passed.
PASSED: Test 1, Table MCFG passed.
PASSED: Test 1, Table RSDT passed.
PASSED: Test 1, Table RSDP passed.
Table SBST not present to check.
PASSED: Test 1, Table XSDT passed.

The following ACPI tables are examined by this test:

APIC

Multiple APIC Description Table

ECDT

Embedded Controller Boot Resources Table

FACP

Fixed ACPI Description Table (FADT)

FACS

Firmware ACPI Control Structure

HPET

IA-PC High Precision Event Timer Table

MCFG

PCI Express memory mapped configuration space base address Description Table

RSDT

Root System Description Table

RSDP

Root System Description Pointer

SBST

Smart Battery Specification Table

XSDT

Extended System Description Table

See section 5.2 of the ACPI specification for more details.

Examples:

sudo fwts acpitables - 

..runs the acpitables test on your machine and dumps the output to stdout.

fwts acpitables --dumpfile=apcidump.dat -

..runs the test using ACPI tables in the dump file acpidump.dat as the input and dumps the test results to stdout.

sudo acpidump > acpidump.dat
fwts acpitables --dumpfile=acpidump.dat

..dumps the tables using acpidump and loads them in and runs the test with results appended to results.log

sudo fwts --dump
fwts acpitables --dumpfile=acpidump.log -

..dumps the tables using fwts and loads them in and runs the test with results going to stdout.

Explanation of test results

Certain test results may require a little more explanation. This section will try and give some context to specific test failures.

Error ID

Explanation

FADT32And64BothDefined

The FADT FIRMWARE_CTRL is a 32 bit pointer that points to the physical memory address of the Firmware ACPI Control Structure (FACS). There is also an extended 64 bit version of this, the X_FIRMWARE_CTRL pointer that also can point to the FACS. Section 5.2.9 of the ACPI specification states that if the X_FIRMWARE_CTRL field contains a non zero value then the FIRMWARE_CTRL field *must* be zero. This error is also detected by the Linux kernel. If FIRMWARE_CTRL and X_FIRMWARE_CTRL are defined, then the kernel uses the 64 bit version of the pointer.

FADTBadPMTMRLEN

FADT field PM_TMR_LEN defines the number of bytes decoded by PM_TMR_BLK. This fields value must be 4. If it is not the correct size then the kernel will not request a region for the pm timer block.

FADTBadRESETREG

The FADT RESET_REG address space ID must be either System I/O space, System Memory space or PCI configuration spaces. If it is not set correctly then ACPI writes to this register *may* nor work correctly, meaning a reboot via this mechanism may not work.

FwCtrl32and64Differ

One would expect the 32 bit FIRMWARE_CTRL and 64 bit X_FIRMWARE_CTRL pointers to point to the same FACS, however they don't which is clearly ambiguous and wrong. The kernel works around this by using the 64 bit X_FIRMWARE_CTRL pointer to the FACS.

HPETVendorIdZero

The HPET specification describes the HPET table in section 3.2.4 'The ACPI 2.0 HPET Description Table (HPET)'. The top 16 bits of the Event Timer Block ID specify the Vendor ID and this should not be zero. This won't affect the kernel behaviour, but should be fixed as it is an undefined ID value.

HPETBaseZero

The HPET specification describes the HPET table in section 3.2.4 'The ACPI 2.0 HPET Description Table (HPET)'. A zero (NULL) base address for a HPET will possibly lead to a misconfigured HPET if the kernel derives its HPET configuration from this table at a later date.

Kernel/Reference/fwts/acpitables (last edited 2013-11-19 09:03:25 by alexhung)