PROCHOT Throttling (Dead Battery)
Affects: Laptops with a dead or removed battery; documented on a MacBook Pro 2015, applies anywhere the SMC/EC asserts PROCHOT
Symptom
Everything is very slow (video choppy even at low resolution) and the fan never spins. The machine is cool because the CPU is held at ~1 GHz and physically cannot run fast enough to heat up.
Cause
When the battery is dead or removed, the power-management chip asserts a signal called PROCHOT (BD_PROCHOT on some vendors). The CPU obeys and throttles to near minimum speed regardless of the governor or TLP settings. Software settings cannot override it: the CPU must be told to ignore the signal.
Fix
Clear bit 0 of MSR 0x1fc to make the CPU ignore external PROCHOT. Internal thermal protection still works: this only disables the SMC's ability to force-throttle.
sudo apt install msr-tools sudo modprobe msr sudo wrmsr 0x1fc 0xa005 # clears bit 0 (value varies; read first) sudo rdmsr -f 0:0 0x1fc # verify: 0 = good, 1 = still throttleable
The MSR resets every boot and on resume, so persist it three ways: a script that does the write, a systemd oneshot unit that re-applies it at boot, and a /lib/systemd/system-sleep/ hook that re-applies after resume. /etc/modules-load.d/ loads the msr module at boot.
Verify
sudo rdmsr -f 0:0 0x1fc # 0 = disabled, 1 = throttleable grep MHz /proc/cpuinfo # under load should reach max clock, not ~1000
Notes
- This masks a hardware warning. The correct fix for a machine with a swollen or failed battery is replacing the battery; the MSR workaround is for machines run permanently on AC.
- The signature to remember: slow AND cold. A slow laptop with a working fan is a different problem.
