6.1. 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 ACPI [3] and UEFI [10] specification requirements. Additional non-normative guidance may be found in the firmware implementation guidance section.

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

MUST 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 [17].

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 ([3], Section 4) for more ACPI requirements relating to PCIe support. See additional guidance.

ACPI_050

A Serial Port Console Redirection Table [19] 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.

6.1.1. BRS-I ACPI Methods and Objects

This section lists additional requirements for ACPI methods and objects.

ID# Rule

AML_010

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_020

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_030

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

AML_040

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

AML_050

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

AML_060

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_070

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_080

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

AML_090

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

AML_100

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

Also see AML_080 and additional guidance.

RVI-specific ACPI IDs

ACPI ID is used in the _HID (Hardware ID), _CID (Compatible ID) or _SUB (Subsystem ID) objects as described in the ACPI Specification for devices, that do not have a standard enumeration mechanism. The ACPI ID consists of two parts: a vendor identifier followed by a product identifier.

Vendor IDs consist of 4 characters, each character being either an uppercase letter (A-Z) or a numeral (0-9). The vendor ID SHOULD be unique across the Industry and registered by the UEFI forum. For RVI standard devices, RSCV is the vendor ID registered. Vendor-specific devices can use an appropriate vendor ID registered for the manufacturer.

Product IDs are always four-character hexadecimal numbers (0-9 and A-F). The device manufacturer is responsible for assigning this identifier to each product model.

This document contains the canonical list of ACPI IDs for the namespace devices that adhere to the RVI specifications. The RVI task groups may make pull requests against this repository to request the allocation of ACPI ID for any new device.

ACPI ID Device

RSCV0001

RISC-V Platform-Level Interrupt Controller (PLIC)

RSCV0002

RISC-V Advanced Platform-Level Interrupt Controller (APLIC)

RSCV0003

NS16550 UART compatible with an SPCR definition using Interface Type 0x12

RSCV0004

RISC-V IOMMU implemented as a platform device

RSCV0005

RISC-V SBI Message Proxy (MPXY) Mailbox Controller

RSCV0006

RISC-V RPMI System MSI Interrupt Controller

Also see ACPI Device Properties for UART Devices.

RVI-specific ACPI Device Properties

This section is used to define the _DSD device properties [20] in the rscv- namespace.

Where explicit values are provided in a property definition, only these values must be used. System behavior with any other values is undefined.

Property Type Description

Currently, there are no properties defined in the rscv- namespace. Request for new property names in the rscv- namespace should be made as a git pull request to this table.

ACPI Device Properties for UART Devices

Generic 16550-compatible UART devices can have device properties in the global name space since Operating Systems are already using them.

Property Type Description

clock-frequency

Integer

Clock feeding the IP block in Hz.

A value of zero will preclude the ability to set the baud rate, or to configure a disabled device.

reg-offset

Integer

Offset to apply to the register map base address from the start of the registers.

reg-shift

Integer

Quantity to shift the register offsets by.

reg-io-width

Integer

The size (in bytes) of the register accesses that should be performed on the device.

1, 2, 4 or 8.

fifo-size

Integer

The FIFO size (in bytes).