Skip to content

Latest commit

 

History

History
83 lines (72 loc) · 5.42 KB

acpi.adoc

File metadata and controls

83 lines (72 loc) · 5.42 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# Rule

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 _HID (Hardware ID) or _CID (Compatible ID) RSCV0003.

See additional guidance.

ACPI_080

PLIC/APLIC namespace devices MUST be present in the ACPI namespace whenever corresponding MADT entries are present. See RVI ACPI IDs.

Also see AML_090 and additional guidance.

BRS-I ACPI Methods and Objects

This section lists additional requirements for ACPI methods and objects.

ID# Rule

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 return any descriptors for I/O ranges (such as created by ASL macros WordIO, DWordIO, QWordIO, IO, FixedIO, 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) with functioning _GRT and _SRT methods, and the _GCP method returning bit 2 set (i.e. get/set real time features implemented).

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

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