This page describes an alternative way of analyzing the ACPI firmware
by using the acpica tools directly.
Extracting the Firmware
Extract the binary ACPI tables
This will create the file dsdt.dat
sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
Generate the DSL file
This will create the file dsdt.dsl. You can view it with your favorite text editor.
iasl -d dsdt.dat
Get a list of ACPI methods
acpiexec -b Methods dsdt.datExample Output
[...] \_SB.PC00.LPCB.EC0._REG Method 0x5e8056d96f60 001 Args 2 Len 002D Aml 0x7564f4170c19 \_SB.PC00.LPCB.EC0.CMDW Method 0x5e8056d97050 001 Args 2 Len 004E Aml 0x7564f4170c4e \_SB.PC00.LPCB.EC0.FANG Method 0x5e8056da2610 001 Args 1 Len 0009 Aml 0x7564f4171377 \_SB.PC00.LPCB.EC0.FANW Method 0x5e8056da2780 001 Args 2 Len 0008 Aml 0x7564f4171387 \_SB.PC00.LPCB.EC0.TUVR Method 0x5e8056da9940 001 Args 1 Len 0003 Aml 0x7564f4171396 \_SB.PC00.LPCB.EC0.THRO Method 0x5e8056da9a30 001 Args 1 Len 0005 Aml 0x7564f41713a0 \_SB.PC00.LPCB.EC0.CLCK Method 0x5e8056da9b20 001 Args 1 Len 0024 Aml 0x7564f41713ac \_SB.PC00.LPCB.EC0.PCLK Method 0x5e8056da9c10 001 Args 0 Len 0004 Aml 0x7564f41713d7 \_SB.PC00.LPCB.EC0.ITHR Method 0x5e8056da9d00 001 Args 1 Len 0026 Aml 0x7564f41713e2 \_SB.PC00.LPCB.EC0.IPCL Method 0x5e8056da9df0 001 Args 0 Len 0010 Aml 0x7564f417140f [...]
Get a list of operation regions
acpiexec -b 'Objects Region' dsdt.dat
The regions that have the type EmbeddedControl are exposed via the embedded controller.
[...]
\_SB.PC00.LPCB.EC0.ERAM Region 0x620cececfac0 001 [EmbeddedControl] Addr 0000000000000000 Len 00FF
\_SB.PC00.LPCB.EC0.ECRM Region 0x620ceced0250 001 [EmbeddedControl] Addr 0000000000000000 Len 00FF
\_SB.PC00.LPCB.EC0.SSRM Region 0x620ceced0620 001 [EmbeddedControl] Addr 0000000000000050 Len 000A
\_SB.PC00.LPCB.EC0.MAIO Region 0x620ceced2520 001 [SystemMemory] Addr 0000000000000000 Len 00FF
\_SB.PC00.LPCB.PKBS Region 0x620cecee2de0 001 [SystemIO] Addr 0000000000000060 Len 0005
\_SB.PC00.XHCI.XPRT Region 0x620cece7b800 001 [PCI_Config] Addr 0000000000000000 Len 0100
\_SB.PC00.XDCI.OTGD Region 0x620cece7e6d0 001 [PCI_Config] Addr 0000000000000000 Len 0100
\_SB.PC00.HDAS.HDAR Region 0x620cece7f4c0 001 [PCI_Config] Addr 0000000000000000 Len 0100
\_SB.PC00.RP01.PXCS Region 0x620cece892f0 001 [SystemMemory] Addr 00000000000E0000 Len 0C80
[...]
Get a list of registers
acpiexec -b 'Objects RegionField' dsdt.dat
Note: Only registers with an operation region of the type EmbeddedControl are actually embedded controller registers.
In this example, these are ERAM and ECRM.
[...]
\_SB.PC00.LPCB.EC0.INDI RegionField 0x5ac2ebacbd30 001 Rgn [ERAM] Off 0E8 Len 08 Acc 01
\_SB.PC00.LPCB.EC0.DMEE RegionField 0x5ac2ebacbda0 001 Rgn [ERAM] Off 100 Len 08 Acc 01
\_SB.PC00.LPCB.EC0.VBPS RegionField 0x5ac2ebacbe10 001 Rgn [ERAM] Off 7A8 Len 08 Acc 01
\_SB.PC00.LPCB.EC0.PMCD RegionField 0x5ac2ebace740 001 Rgn [ECRM] Off 000 Len 20 Acc 04
\_SB.PC00.LPCB.EC0.S0FL RegionField 0x5ac2ebace7b0 001 Rgn [ECRM] Off 020 Len 08 Acc 01
\_SB.PC00.LPCB.EC0.SXF0 RegionField 0x5ac2ebace820 001 Rgn [ECRM] Off 028 Len 08 Acc 01
\_SB.PC00.LPCB.EC0.SXF1 RegionField 0x5ac2ebace890 001 Rgn [ECRM] Off 030 Len 08 Acc 01
\EFCT RegionField 0x5ac2eb9f64f0 001 Rgn [GNVS] Off 460 Len 08 Acc 01
\EFHT RegionField 0x5ac2eb9f6560 001 Rgn [GNVS] Off 468 Len 08 Acc 01
\VRDE RegionField 0x5ac2eb9f65d0 001 Rgn [GNVS] Off 470 Len 08 Acc 01
\VRAT RegionField 0x5ac2eb9f6640 001 Rgn [GNVS] Off 478 Len 08 Acc 01
\VRPT RegionField 0x5ac2eb9f66b0 001 Rgn [GNVS] Off 480 Len 08 Acc 01
[...]
The offset (Off) is specified in bits (hexadecimal).
To convert the bit offset into a byte offset and bit position, we open python or ipython and divide the bit offset by 8 to obtain the byte offset, and use modulo 8 to determine the bit position:
~ > python Python 3.13.5 (main, Jun 21 2025, 09:35:00) [GCC 15.1.1 20250425] on linux Type "help", "copyright", "credits" or "license" for more information. >>> 0x2E8 // 8 93 >>> 0x2E8 % 8 0
This yields register number 93 and a bit offset of 0.