DSDT vs SSDT for Firmware Engineers

A practical explanation of why platforms use both DSDT and SSDT, how they are loaded, and how to debug table layering issues.

3 min read
ACPI Advanced cover

At first glance, ACPI could be one giant table. Put every device, method, and resource in the DSDT and ship the firmware.

Real platforms rarely stay that simple.

CPU topology may depend on SKU. Thunderbolt may be enabled only on some boards. A touchpad may be I2C on one model and USB on another. An OEM may need to patch a device method without rewriting the entire platform namespace.

That is why DSDT and SSDT are usually used together.

01 DSDT

Base platform namespace

Usually contains the main board tree such as \_SB, PCI root, EC, thermal, and core platform methods.

02 SSDT

Additional namespace fragments

Adds CPU, devices, power resources, hotplug, graphics, storage, or OEM-specific feature blocks.

03 OS

Namespace merge

The OS ACPI interpreter loads all AML tables and builds a single namespace tree.

04 Driver

Driver binding and method evaluation

Drivers do not care which table created the object. They consume the final merged namespace.

How DSDT and SSDT build one OS namespace

The practical difference

Item Value Note
DSDT Main AML table Referenced from FADT. Usually the platform backbone.
SSDT Supplemental AML table Loaded from XSDT/RSDT as an additional description block.
Namespace effect Merged Objects from DSDT and SSDTs become one ACPI namespace.
Typical use Base vs modular DSDT for common board description; SSDT for SKU/device/policy-specific additions.
Debug risk Override and ordering confusion The bug may live in an SSDT even when the visible namespace path looks like a DSDT object.

Real World Example: CPU SSDT

On many systems, CPU-related objects are produced as SSDTs. The base DSDT may describe the platform skeleton, while CPU SSDTs describe processor objects, power states, performance capabilities, or topology.

That lets firmware generate CPU information according to the installed processor and enabled features.

XSDT
├── FACP/FADT → DSDT
├── SSDT-CPU
├── SSDT-PState
├── SSDT-I2C
└── SSDT-OEMFeature

If a CPU power management bug appears, reading only the DSDT may miss the real source.

Debug Diary: the object exists, but not where you expected

A common mistake is to decompile dsdt.dat, search for a device, and conclude that firmware does not describe it.

But the device may be in an SSDT:

acpidump -b
iasl -d dsdt.dat ssdt*.dat
grep -R "Device (TPD0)" *.dsl

If the object appears in ssdt4.dsl, then your debug target is the module that produced that SSDT, not necessarily the main DSDT generation path.

Common Pitfall: assuming SSDT means optional only

SSDT often means modular, not unimportant. A required device can live in an SSDT. A critical power method can live in an SSDT. A wrong SSDT can break boot, sleep, PCIe hotplug, or driver binding.

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.