Skip to content

Latest commit

 

History

History
89 lines (78 loc) · 5.58 KB

acpi.adoc

File metadata and controls

89 lines (78 loc) · 5.58 KB

BRS-I ACPI Requirements

The Advanced Configuration and Power Interface Specification provides the OS-centric view of system configuration, various hardware resources, events and power management.

This section defines the BRS-I mandatory and optional ACPI requirements on top of existing cite:[ACPI] and cite:[UEFI] specification requirements. Additional non-normative guidance may be found in the firmware implementation guidance section.

Important
All content in this section is optional and recommended for BRS-B.
ID# Requirement

ACPI_010

Be 64-bits clean.

  • RSDT MUST NOT be implemented, with RsdtAddress in RSDP set to 0.

  • 32-bit address fields MUST be 0.

See additional guidance.

ACPI_020

Implement the hardware-reduced ACPI mode (no FACS table).

See additional guidance.

ACPI_030

The Processor Properties Table (PPTT) MUST be implemented, even on systems with a simple hart topology.

ACPI_040

The PCI Memory-mapped Configuration Space (MCFG) table MUST NOT be present if it violates cite:[PCIFW].

Only compatible PCIe segments, exposed via ECAM (Enhanced Configuration Access Mechanism), may be described in the MCFG. The MCFG MUST NOT require vendor-specific OS support. See PCI Services (cite:[ACPI], Section 4) for more ACPI requirements relating to PCIe support. See additional guidance.

ACPI_050

A Serial Port Console Redirection Table cite:[SPCR] MUST be present on systems, where the graphics hardware is not present or not made available to an OS loader via the standard UEFI EFI_GRAPHICS_OUTPUT_PROTOCOL interface.

In these cases, the table provides essential configuration for an early OS boot console.

ACPI_060

An SPCR table, if present, MUST meet the following requirements:

  • Revision 4 or later of SPCR.

  • For NS16550-compatible UARTs:

    • Use Interface Type 0x12 (16550-compatible with parameters defined in Generic Address Structure).

    • There MUST be a matching AML device object with compatible ID RSCV0003.

See additional guidance.

ACPI_080

Depending on the interrupt controller implemented by the system, PLIC or APLIC namespace devices MUST be present in the ACPI namespace along with MADT entries. See RVI ACPI IDs.

Also see AML_090, AML_100 and additional guidance.

BRS-I ACPI Methods and Objects

This section lists additional requirements for ACPI methods and objects.

ID# Requirement

AML_010

The Cache Coherency Attribute (_CCA) device method MUST be implemented.

This object provides information about whether a device has to manage cache coherency and about hardware support. This object is mandatory for all devices that can access CPU-visible memory. (cite:[ACPI] Section 6.2.17).

AML_020

The Current Resource Setting (_CRS) device method for a PCIe Root Complex SHOULD NOT contain resources of type DWordIO, QWordIO or ExtendedIO.

Legacy PCI I/O BARs are uncommon in modern PCIe devices and support for PCI I/O space may complicate configuration of PCIe Root Complex hardware in a compliant manner.

AML_030

The Possible Resource Settings (_PRS) and Set Resource Settings (_SRS) device method SHOULD NOT be implemented.

ACPI resource descriptors are typically used to describe devices with fixed I/O regions that do not change. Flexible resource assignment is not supported by most modern ACPI OSes.

AML_040

Per-hart device objects MUST be defined under \_SB (System Bus) namespace and not in the deprecated \_PR (Processors) namespace.

AML_050

Systems supporting OS-directed hart performance control and power management MUST expose these via Collaborative Processor Performance Control (CPPC, cite:[ACPI] Section 8.4.6).

AML_060

Processor idle states MUST be described using Low Power Idle (_LPI, cite:[ACPI] Section 8.4.3).

AML_070

Systems with a Real-Time Clock on an OS-managed bus (e.g. I2C, subject to arbitration issues due to access to the bus by the OS) MUST implement the Time and Alarm Device (TAD).

Also see URT_020.

AML_080

Systems implementing a TAD MUST be functional without additional system-specific OS drivers.

In situations where the Time and Alarm Device (TAD) depends on a vendor-specific OS driver for correct function (SPI, I2C, etc), the TAD MUST be functional if the OS driver is not loaded. That is, when a dependent driver is loaded, an AML method switches further accesses to go through the driver-backed OperationRegion.

AML_090

PLIC and APLIC device objects MUST support the Global System Interrupt Base (_GSB, cite:[ACPI] Section 6.2.7) object. See additional guidance.

AML_100

Devices with Global System Interrupt (GSI, aka wired interrupt) resources MUST indicate the dependency on the corresponding interrupt controller using Operation Region Dependencies (_DEP, cite:[ACPI] Section 6.5.8). See additional guidance.

AML_110

UART device objects with ID RSCV0003 MUST implement Properties for UART Devices.