MacBooks without batteries severely throttled #

Update

Resolved the throttling issue on a Mid-2012 unibody MacBook Pro running Ubuntu Linux 24.04.3:

Caution: This bypasses a platform protection signal. Without a working battery, peak power demand may exceed the adapter’s capacity and cause shutdowns. Replacing the battery is the proper fix.

Check

Confirm throttling by sampling CPU frequencies under load:

Before the workaround, all four samples showed:

MHz: [1197, 1197, 1197, 1197]

Test

Clear bit 0 of MSR_POWER_CTL (0x1fc), leaving other bits intact:

sudo apt install msr-tools
sudo modprobe msr

original=$(sudo rdmsr -p 0 0x1fc)
printf 'Original: %s\n' "$original"

sudo wrmsr -p 0 0x1fc \
  "$(printf '%x' "$((16#$original & ~1))")"

A set bit doesn't prove the signal is active, it just enables the CPU's response to it; see Intel's MSR documentation.

The CPU check now shows:

MHz: [3007, 2893, 2914, 2893]
MHz: [3044, 2893, 1200, 1200]
MHz: [3092, 1600, 1200, 1200]
MHz: [3092, 1200, 3100, 2893]

To undo the temporary change from the same shell:

sudo wrmsr -p 0 0x1fc "$original"

Persist

To persist across boot and resume, run as root:

Revert

After replacing the battery, run as root and reboot to allow firmware to reinitialize the register:

#!/bin/bash
set -euo pipefail

systemctl disable --now disable-bd-prochot.service

rm -f /etc/systemd/system/disable-bd-prochot.service \
      /usr/lib/systemd/system-sleep/disable-bd-prochot \
      /usr/local/sbin/disable-bd-prochot

systemctl daemon-reload
echo "Workaround removed. Reboot now."

/mac | Nov 15, 2018


RSS | Archives