_CRS Deep Dive

How ACPI _CRS reports device resources to the OS and how wrong IRQ, GPIO, I2C, SPI, or MMIO descriptors cause driver problems.

3 min read
Đọc bằng English Tiếng Việt 日本語
ACPI Advanced cover

The driver binds. The device appears. But it does not work.

No touch events. No interrupt. No MMIO access. Sometimes the OS log says resource conflict.

This is where _CRS becomes important.

_CRS means Current Resource Settings. It tells the OS which hardware resources belong to an ACPI device.

Item Value Note
IRQ / GpioInt Interrupt resource Wrong interrupt means driver may load but never receive events.
GpioIo GPIO control pin Often used for reset, power enable, or mode select.
I2CSerialBus I2C connection descriptor Used by HID-over-I2C touchpads, sensors, and PMICs.
SpiSerialBus SPI connection descriptor Used by some touch controllers, TPMs, and board devices.
Memory32Fixed / QWordMemory MMIO resource Wrong base or length can cause access failure or conflict.
DMA DMA resource Required for some platform devices.

Example: HID-over-I2C touchpad resource

Name (RBUF, ResourceTemplate ()
{
    I2CSerialBusV2 (0x002C, ControllerInitiated, 400000,
        AddressingMode7Bit, "\\_SB.PCI0.I2C1", 0x00,
        ResourceConsumer, , Exclusive)

    GpioInt (Level, ActiveLow, ExclusiveAndWake, PullUp, 0,
        "\\_SB.GPI0", 0x00, ResourceConsumer, , )
    {
        0x003A
    }
})

Method (_CRS, 0, NotSerialized)
{
    Return (RBUF)
}

If the I2C address is wrong, the driver probes the wrong slave. If the GPIO interrupt pin is wrong, the device may initialize but never report input.

Debug Diary: device present, interrupt silent

Symptom:

Device Manager: HID I2C device exists
Driver: loaded
Touchpad: no input
OS log: interrupt count stays 0

ACPI path:

_HID says driver identity is correct
_STA says device is present
_CRS gives I2C address and GPIO interrupt

In this case, _CRS is more suspicious than _HID or _STA.

_CRS debug checklist

Common Pitfall: correct device, wrong resource

A driver can bind correctly because _HID is correct, but still fail because _CRS describes the wrong electrical connection. This is common during board bring-up when the schematic changes but ACPI resources are copied from an older SKU.

Found this useful?

Save it or share it with someone learning firmware, BIOS/UEFI, and embedded systems.

Nội dung liên quan

Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.