Making Most Out of my Old AMD Laptop

From Broken Hinge to 35W Homelab Server: Resurrecting a Huawei MateBook 13
Hardware Mod & Embedded Linux • AMD Zen+ Picasso • ACPI DSDT • 24/7 Compute

From Broken Hinge to 35W Homelab Server: Resurrecting a Huawei MateBook 13

How reverse-engineering AMD’s Precision Boost 2, ACPI tables, and the Embedded Controller turned an abandoned ultrabook with dead cells into an overclocked, headless compute powerhouse.

#01 The College Workhorse Meets Its Demise

Back in 2021, I bought a truly solid laptop: the Huawei MateBook 13 AMD. Powered by an AMD Ryzen 5 3500U (4 cores, 8 threads), 16 GB of dual-channel DDR4 RAM, and a 512 GB NVMe SSD, it was a sleek, lightweight machine that served as my primary engineering workstation throughout university.

From multi-layer PCB design and embedded electronics programming to compiling software and gaming, it handled heavy workloads without breaking a sweat. Its integrated Radeon Vega 8 graphics were surprisingly capable, comfortably pushing titles like GTA V at 720p 60 FPS.

It felt like an aluminum MacBook Air clone, but built with genuine thermal headroom: beefy power VRMs and a dual-fan cooling assembly allowed the CPU to boost up to its 3.5 GHz single-core limit over its 2.1 GHz base clock. But after four years of daily transport, the chassis hinge snapped clean off, and shortly thereafter, the internal battery pack died completely.

Removing broken lid
Power house
Motherboard inspection
University
Bench testing
Laptop Brand new from Store

#02 Turning E-Waste into a 24/7 Compute Server

Rather than discarding capable quad-core x86 silicon, I stripped away the broken display assembly and turned the board into a 24/7 headless Linux server running Ubuntu.

To test its endurance, I assigned it three continuous background workloads:

I2P Network Logo

I2P Router

Decentralized network routing node helping preserve privacy and connectivity.

ArchiveTeam Warrior Logo

ArchiveTeam Warrior

Distributed web crawling workers archiving at-risk digital history.

BOINC Distributed Compute Logo

BOINC Distributed

Multi-core AVX PrimeGrid sieves and Radeon Vega 8 OpenCL mathematical transforms.

#03 Hitting the Dreaded 400 MHz Throttling Wall

Everything looked great until sustained loads began. That is when I ran into a massive firmware restriction: without a functional battery attached, the motherboard refused to boost past 2.1 GHz. The GPU was pegged at 450 MHz, and periodically the entire system throttled violently down to 400 MHz (0.4 GHz).

The Electrical Cause: Modern laptops use the battery as a high-current surge buffer. When the Embedded Controller (EC) cannot communicate with a healthy battery, it trips emergency safety downclocking via a hardware line named BD PROCHOT# (Bi-Directional Processor Hot) to prevent power adapter brownouts.

My initial instinct was straightforward: rebuild the pack by wiring new high-capacity 18650 lithium cells to the factory battery management board.

Rebuilt 18650 battery pack mod
Wiring rebuilt 3S 18650 cells to the factory Huawei BMS circuitry

However, the system still fell into 400 MHz to 1.5 GHz drops. This is where hardware meets firmware safety: laptop Battery Management Systems (BMS) store state flags in volatile memory. If cells drop below critical voltage or disconnect, the BMS locks out irreversibly to prevent fires. Replacing the cells had triggered a permanent limp mode—no charging, no discharging, and continuous alert signals sent to the motherboard!

#04 Reverse Engineering the ACPI Tables & EC RAM

Since the physical battery circuit had locked itself, I disconnected it completely and attacked the problem at the firmware interface.

By dumping and disassembling the ACPI DSDT table (/sys/firmware/acpi/tables/DSDT), I found exactly how the operating system and the Embedded Controller evaluate battery status:

🔍 Deep Technical Breakdown: The ACPI _BIX Check & EC RAM Map ▼

In the disassembled DSDT, the ACPI Extended Battery Information method (_BIX) contains a strict evaluation condition:

Method (_BIX, 0, Serialized) {
    If (ECOK ()) {
        If ((Acquire (Z009, 0x2000) == Zero)) {
            // CRITICAL SANITY CHECK: ALL THREE MUST BE NON-ZERO
            If (((BTDV && BTFC) && BTDC)) {
                BPKG [0x02] = BTDC /* Design Capacity (3610 mAh) */
                BPKG [0x03] = BTFC /* Last Full Charge Capacity */
                BPKG [0x05] = BTDV /* Design Voltage (11400 mV) */
            }
            Release (Z009)
        }
    }
    Return (BPKG)
}

Without a battery, the EC RAM offsets for BTDC (0x84) and BTDV (0x86) remain at 0x00. This causes the kernel driver to omit capacity from sysfs, prompting system monitors like btop to disable CPU boost scaling.

EC Offset Field Injected Value Function
0x80 ACST / BST1 0x03 Signals AC Online + Battery Present
0x84 BTDC 3610 mAh Design Capacity (Unlocks _BIX)
0x86 BTDV 11400 mV Design Voltage (11.4V nominal)
0x90 BAPV 12500 mV Present Pack Voltage (12.5V simulated)

I developed a lightweight background service, ec_voltage_patcher.py, that writes these register values directly into the Embedded Controller's RAM using the Linux kernel's ec_sys interface at 50 Hz (20ms intervals).

⚡ Calibrating the ACPI IRQ 9 Loop

Writing to the EC triggers hardware interrupts over LPC/eSPI. Running a tight 5ms loop initially hammered 3,200 interrupts/sec, burning 20% of an entire CPU core on [irq/9-acpi]! Calibrating the interval to 20ms (50 Hz) dropped interrupts by 75%, reclaiming ~15% of that core for compute while keeping telemetry smooth.

#05 Unlocking 35W Power & Eliminating 400 MHz Drops

By default, Huawei firmware chokes the Ryzen 5 3500U to an 18W STAPM limit. With battery emulation active, I leveraged ryzenadj to command the processor's System Management Unit (SMU) registers directly:

SMU Power Tuning Command Active in daemon
ryzenadj \
  --stapm-limit=35000 \        # 35W Sustained Power Target
  --fast-limit=35000 \         # 35W Fast PPT (Matched to prevent VRM over-current)
  --slow-limit=35000 \         # 35W Slow PPT
  --vrm-current=55000 \        # 55A TDC Sustained Current Limit
  --vrmmax-current=70000 \     # 70A EDC Peak Electrical Current Limit
  --tctl-temp=88 \             # 88°C Thermal Ceiling
  --prochot-deassertion-ramp=1 # Collapses 400 MHz recovery from 30s to 1ms!

The key parameter here is --prochot-deassertion-ramp=1. Normally, when a transient spike trips the processor hot line, AMD's default firmware enforces a sluggish 30-second penalty box at 400 MHz. Setting the ramp to 1 forces the processor to recover in just 1 millisecond, preventing random clock stalls.

#06 Overcoming Heat-Soak: The PTM7950 Repaste

While power limits were unlocked, the hardware soon met another roadblock: thermal throttling. At 35W, the bare silicon die was shooting past 85°C almost instantly.

Disassembling the stock copper cooling assembly revealed the culprit: after 4 years of heavy use, the factory thermal paste had baked out completely into dry, chalky powder, creating micro-air gaps between the bare silicon and copper coldplate.

Dried thermal paste on heatsink
The factory thermal paste had dried into a chalky thermal insulator

To address this permanently, I completed three key hardware upgrades:

  • Honeywell PTM7950 Phase-Change Pad: Melting at ~45°C to fill microscopic voids on the bare silicon, it provides near liquid-metal heat transfer with zero pump-out effect and zero electrical short risks.
  • High-Conductivity VRM Thermal Pads: Applied to the power delivery MOSFETs to dissipate heat directly into an external aluminum heatsink with active fan cooling.
  • 100W USB-PD Power Supply: Upgraded from the factory 65W charger to a 100W brick, preventing transient voltage sag that previously tripped emergency BD PROCHOT downclocks.
Stable 35W All-Core Boost Telemetry
Stable 35W sustained operation: all 8 threads holding 2.7 to 3.1 GHz with temps at an ultra-cool 66°C

#07 Profile Comparison Matrix & Verified Results

Here is how the tuned profiles compare across different operating conditions:

Profile Fast PPT Slow PPT Tctl Temp All-Core Clocks Noise & Thermals Recommended For
Silent / Cool 25 W 22 W 72 °C ~2.40 – 2.50 GHz Whisper quiet, ~65–70°C Office work, quiet environments
Stabilized 65W 30 W 28 W 84 °C ~2.40 – 2.89 GHz Passive block / OEM brick 24/7 compute with OEM 65W adapter
Active Fan + 100W PD
Current Active
38 W 35 W 88 °C ~2.72 – 3.16 GHz Cool (~66–75°C) with fan 24/7 BOINC (CPU+GPU) + Frigate NVR
Max Turbo / Water 45 W 45 W 95 °C ~3.05 GHz (Physical limit) High airflow or loop, ~75–80°C Benchmarking & full custom liquid cooling
Sustained Package
35W
+133% over stock TDP
All-Core Clocks
~2.87 GHz
Up to 3.16 GHz burst
GPU VRAM Bus
1.2 GHz
38.4 GB/s pinned
Junction Temp
~66 °C
PTM7950 + Fan

#08 Conclusion: Giving E-Waste a High-Performance Second Life

What began as an e-waste pile of broken aluminum and dead battery cells evolved into an immensely rewarding journey through x86 power architecture and firmware reverse-engineering.

By combining EC RAM emulation, Precision Boost 2 tuning, and modern phase-change thermal materials, this old laptop now runs faster, cooler, and more reliably than it ever did fresh out of the factory box. Today, it quietly crunches distributed science calculations and manages live camera streams 24/7 without missing a beat.

Looking for the scripts and firmware?

The battery emulator daemon, systemd service, and ESP32 firmware are open-source on GitHub.

View Repository →

Published with ❤️ by the hardware engineering community • Powered by Linux & Open Source

No comments:

Post a Comment