> For the complete documentation index, see [llms.txt](https://open-rt.gitbook.io/open-surfacert/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://open-rt.gitbook.io/open-surfacert/surface-rt/uefi/acpi-tables/acpi-ssdt.md).

# SSDT

Extends DSDT.

Surface RT has 2 SSDT tables.

SSDT0000.bin contains the hardware description (very interesting)\
SSDT0001.bin contains only TPM stuff. (uninteresting at the moment)

## Decompile SSDT0000.bin

Most of the ACPI tables can be decompiled by iASL (Intel ASL compiler).\
But SSDT0000.bin can **not** be decompiled by iASL.\
We have to use MS-ASL compiler. (MS ASL is not as strict as iASL which leads to issues with Linux)\
<https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/microsoft-asl-compiler>\
use `asl.exe /u /e /ResDecode SSDT0000.bin`\
Decompiled output below:

{% file src="/files/-MMUxhJi3sfKjLttf7nN" %}

## Compile SSDT0000.ASL

There is a way to compile the SSDT0000.ASL with iasl, without getting a lot of errors about external symbols. Just put the file next to the other acpi tables (don't decompile them), and it shouldn't give errors about missing external symbols. There are 4 syntax errors, currently there are no fixes available.

## What SSDT0000.ASL can tell you

WorkInProgress

### I2C Devices

Search for `I2CSerialBus` should reveal all i2c devices.

#### I2C1 (HID Stuff)

1. I2C1 0x00 - tCover
2. I2C1 0x28 - SEN1 / SNMU
3. I2C1 0x50 - GFXC??

#### I2C2 - Daughterboard

1. I2C2 0x0C - SARA
2. I2C2 0x2D - TEV2 - cypress
3. I2C2 0x39 - TIC2
4. I2C2 0x5B - TOUA -atmel

#### I2C3

1. I2C3 0x10 - GFXC
2. I2C3 0x72 - GFXC

#### I2C4 - HDMI

1. I2C4 0x30 - GFXC - EDID
2. I2C4 0x3A - GFXC - EDID
3. I2C4 0x3B - GFXC - EDID
4. I2C4 0x50 - GFXC - EDID

#### I2C5 -Mainboard

1. I2C5 0x0A - TRO1 - battery?
2. I2C5 0x0C - SARA / TIC1
3. I2C5 0x1A - AUDI - wolfson
4. I2C5 0x2D - Power resource / PMUD / TR3\_(RTC) - PMIC
5. I2C5 0x4C - THEM / TI2C
6. I2C5 0x60 - PMUD - PMIC2

### GPIOs

```
PB2: (Exclusive, PullDefault, 0, 0, IoRestrictionNoneAndPreserve, "\\_SB.GPIO", 0, ResourceConsumer, , )
PD1: (Exclusive, PullDefault, 0, 0, IoRestrictionOutputOnly, "\\_SB.GPIO", 0, ResourceConsumer, , )
PD7: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PDD0: (Exclusive, PullDefault, 0, 0, IoRestrictionNoneAndPreserve, "\\_SB.GPIO", 0, ResourceConsumer, , )
PDD2: (Exclusive, PullDefault, 0, 0, IoRestrictionNoneAndPreserve, "\\_SB.GPIO", 0, ResourceConsumer, , )
PDD7: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PH0: (Shared, PullDefault, 0, 0, IoRestrictionNoneAndPreserve, "\\_SB.GPIO", 0, ResourceConsumer, , )
PH6: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PI5: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PL1: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PN0: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PN3: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PN7: (Shared, PullDefault, 0, 0, IoRestrictionNoneAndPreserve, "\\_SB.GPIO", 0, ResourceConsumer, , )
PR4: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PR6: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PR6: (Shared, PullDefault, 0, 0, IoRestrictionNoneAndPreserve, "\\_SB.GPIO", 0, ResourceConsumer, , )
PR7: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PR7: (Shared, PullDefault, 0, 0, IoRestrictionNoneAndPreserve, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS0: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS1: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS3: (Exclusive, PullDefault, 0, 0, IoRestrictionOutputOnly, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS5: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS5: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS6: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS6: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS7: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS7: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PT3: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PV0: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PV0: (Shared, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PW2: (Shared, PullUp, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PW3: (Shared, PullUp, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PBB0: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PBB4: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PBB7: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
PCC7: (Exclusive, PullDefault, 0, 0, IoRestrictionNone, "\\_SB.GPIO", 0, ResourceConsumer, , )
```

### Interrupts

```
PI5: (Edge, ActiveBoth, SharedAndWake, PullDefault, 0x1388, "\\_SB.GPIO", 0, ResourceConsumer, , )
PJ0: (Edge, ActiveHigh, SharedAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PJ0: (Edge, ActiveHigh, SharedAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PK2: (Level, ActiveLow, Shared, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PL1: (Edge, ActiveBoth, SharedAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PN2: (Level, ActiveLow, Shared, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PN7: (Edge, ActiveBoth, Shared, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PN7: (Edge, ActiveBoth, Shared, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS0: (Edge, ActiveBoth, SharedAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS0: (Edge, ActiveBoth, SharedAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS5: (Edge, ActiveBoth, SharedAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS5: (Edge, ActiveBoth, SharedAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS6: (Edge, ActiveBoth, Shared, PullUp, 0x9c4, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS6: (Edge, ActiveBoth, Shared, PullUp, 0x9c4, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS7: (Edge, ActiveBoth, Shared, PullUp, 0x9c4, "\\_SB.GPIO", 0, ResourceConsumer, , )
PS7: (Edge, ActiveBoth, Shared, PullUp, 0x9c4, "\\_SB.GPIO", 0, ResourceConsumer, , )
PU5: (Level, ActiveHigh, SharedAndWake, PullDown, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PU6: (Edge, ActiveLow, ExclusiveAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PV0: (Edge, ActiveHigh, SharedAndWake, PullDefault, 0x9c4, "\\_SB.GPIO", 0, ResourceConsumer, , )
PV0: (Edge, ActiveHigh, SharedAndWake, PullDefault, 0x9c4, "\\_SB.GPIO", 0, ResourceConsumer, , )
PW2: (Edge, ActiveBoth, SharedAndWake, PullUp, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PW3: (Edge, ActiveBoth, Shared, PullUp, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PBB6: (Level, ActiveLow, Shared, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PDD3: (Edge, ActiveBoth, SharedAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
PDD3: (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0, "\\_SB.GPIO", 0, ResourceConsumer, , )
```

### Power Resources

* PRS1
  * PD7 -  ESD1
  * PRCN - PMIC(I2C5)
    * LDO5 - SD Regulator 1V8-3V3
* PRMU
  * PD7 - ESD1
* PRTU
  * PD1- ESD1
  * PD2 - ESD2
* PRI5
* PRTC

GFXC:\
PR6 LDO1\
PR7 LDO2\
PBB4 E1V8<br>
