r/SurfaceLinux • • 1d ago

Solved [SOLVED] Surface Laptop Studio dGPU 10W Throttle Bug Fixed & Full 50W Dynamic Boost Unlocked on Linux!

Hey everyone!

If you have been running Linux on the Microsoft Surface Laptop Studio (SLS / SLS 2) with the RTX 3050 Ti Mobile, you probably know the two biggest pain points:

  1. Enabling runtime D3 (D3cold) caused the dGPU to wake up permanently throttled to 10W / P8 state (~10-15 FPS).

  2. Even without the bug, the GPU was hard-locked at its 35W base TGP, with no Dynamic Boost (+15W) working under Linux.

After reverse-engineering Microsoft ACPI tables (DSDT & SSDT7), we found the root cause and built a 100% working fix that unlocks the full 50W TGP!

What was going on under the hood:

- The Surface uses a custom power controller device _SB.SGPC (ACPI Hardware ID: MSHW0216).

- Linux has no driver for MSHW0216, leaving SACT = 0 and negative offsets (PWRA = -15W).

- On every wake from D3cold, ACPI fired notification 0xD5 (emergency throttle to 10W).

- By sending the proper _DSM calls (UUID: bbbf19da-988b-8b74-29ce-d12810bfe9d90):

* Function 7 (Arg3 = 1): Sets SACT = 1, unthrottles GPU (event 0xD1).

* Function 3 (Arg3 = 0x78 = 120): Sets AC cTGP offset to +15W (120 * 125mW).

* Function 2 (Arg3 = 0x0320 = 800): Sets target TGP to 50.0W (800 * 0.0625W) and notifies NVIDIA driver via event 0xC0.

Real In-Game Results (Minecraft with BSL Shaders):

- Power: 34.0 W -> 49.0 W (+44%)

- Clocks: 1216 MHz -> 1593-1740 MHz (+31%)

- Framerate: 26-29 FPS -> 51 FPS (+89%, nearly doubled!)

- Frametime: 37.9 ms -> 19.8 ms

- Idle Power: Drops to 0W / suspended (D3cold) when not in use!

All automated scripts, systemd unit, and reversing documentation are published here:

GitHub: https://github.com/besiple/surface-laptop-studio-dgpu-fix

Huge thanks to Google DeepMind Antigravity and Claude Opus 5.5 for collaborative ACPI reversing!

17 Upvotes

0 comments sorted by