9

I have a late-2013 MacBook Pro 15" which still has the original battery. It's at 1,144 charging cycles, and a few days ago the battery health was at about 50%, though since then it plunged to 4%.

The output of pmset -g batt:

Now drawing from 'AC Power'
 -InternalBattery-0 (id=xxxxxxx)    100%; charged; 0:00 remaining (Poor/Good)
    failure: "Permanent Battery Failure" present: true

(Just yesterday, the output was the same except for failure: "Fuse Blown".)

The output from System Information:

Battery Information:

  Model Information:
  Serial Number:    [redacted]
  Manufacturer: SMP
  Device Name:  bq20z451
  Pack Lot Code:    0
  PCB Lot Code: 0
  Firmware Version: 702
  Hardware Revision:    1
  Cell Revision:    1206
  Charge Information:
  Charge Remaining (mAh):   308
  Fully Charged:    Yes
  Charging: No
  Full Charge Capacity (mAh):   319
  Health Information:
  Cycle Count:  1144
  Condition:    Replace Now
  Battery Installed:    Yes
  Amperage (mA):    0
  Voltage (mV): 11090

The battery/power icon on the menu bar also indicates Condition: Replace Now.

According to a series of other posts (1, 2, 3, 4, 5), when the battery is detected as dead or removed, the CPU is throttled to its slowest possible speed. This is what happened to me two days ago: after a restart (due to taking out the power adapter a few seconds before closing the lid), the computer was running very very slowly and iStat Menus was always showing a CPU clock speed of 800 MHz.

Now, I understand the battery is shot and needs replacing, and I have ordered a new one, but it won't arrive overnight. I need to keep using the laptop in the meanwhile as it is the only computer I have. It's really painful to work with the CPU permanently throttled to 800 MHz, and I'm looking for a temporary fix.

As I understood from other answers, this might be impossible, but funnily enough, I was fiddling around with this yesterday, and at some point, the computer suddenly felt snappy again (this happened at about the same time I was using pmset to change hibernatemode from 3 to 25, but it's probably not related). Checking iStat Menus, the CPU was no longer being throttled. This is exactly what I needed to hold out for the period until the battery arrives.

Unfortunately, this morning the laptop rebooted again. This is despite the fact that I closed the lid on the computer, waited until the fans stopped, and only then took out the power adapter, but still, when I connected the power adapter again and opened the lid, it had rebooted. Now the CPU is stuck at 800 MHz again and the computer is again unusable.

My question is: since it came out of throttling once (although I'm not sure what happened, or what I did, that was responsible), is there anything I can do to make it come out of throttling again?

2
  • The throttling is to prevent the CPU from failing and shutting down. Why would you intentionally crash your computer when you know it doesn’t have the power reserves to run at full power? The battery provides current needed for the high wattage operation. Of course, this is an interesting engineering piece if you don’t care if the results are wrong or the OS crashes, but are you looking for a long term solution?
    – bmike
    Aug 25, 2019 at 14:43
  • 1
    @bmike I don’t buy this. Maybe you can’t run it at absolutely full power, but running at 800 MHz seems excessive. Maybe Apple should only disable Turbo Boost? The capability exists, apps such as Volta do this. Especially if I have the correctly specified charger (85 W in this case). The charger should be powerful enough to run the computer above 800 MHz. Otherwise you’re left with what is essentially a paperweight, trust me on this. It is useful only for copying your stuff off of it and use another computer.
    – swineone
    Aug 25, 2019 at 14:56

5 Answers 5

3

Possible Solution 1: The proposed solution by Henry Gross-Hellsen is the most common one. It didn't work for me, but there are quite a few people responding that it worked for them.

I removed the entire IOPlatformPlugin.kext, but still CPU is reported as 0.80Ghz (800Mhz). Confirmed the kext removed, and on rebuild of kext sudo kextcache -i / it complained it was missing.

My only reasoning for this is it matters what device you're trying this on. The people who report it has worked for them either are on MacBook Air or MacBook~ that are much older than mine (mine is 2015). Or they don't mention what their device is at all, so hard to say it'll work on "newer" macs.

Relevant link: https://eclecticlight.co/2019/02/25/playing-with-fire-dealing-with-slow-hot-macs/ That hasn't been posted much. But it explains that most of the kext being removed are for 2013 and older machines. Which could explain why it didn't make a difference for me on my 2015 MacBook Pro.

Possible Solution 2: What does work for me, and you touched upon it, if I let my Mac go into default Energy Saver settings naturally, I get speeds back again. This is 100% reproducible for me.

The only issue I have is I can't mimic this through pmset. I still have the kext removed from 'Solution 1' above, not sure if it has a impact on why this works.

I won't investigate this further into getting the right pmset settings to trigger this manually and then having startup script because like all the people who have this question, we quickly get a replacement and move on. But I hope this information is useful for others who need a quick fix without feeling too much urgency in getting a new battery / computer.

=======================

Another interesting find is https://volta.garymathews.com/ which is a app (probably loads a kext) that is doing the opposite of what we're trying to accomplish (undervolting or underclocking the CPU to save power). But it's interesting since if this is possible, then preventing it should also be possible.

On the website it reads:

Only compatible with Haswell and Broadwell processors (Macbooks from 2013 - 2015). This functionality has been prevented on later generations.

Have not tried it as we aren't trying to save power, but use more than 800Mhz.

2
  • 1
    What do you mean by "if I let my Mac go into default Energy Saver settings naturally"?
    – loco.loop
    Aug 18, 2022 at 1:09
  • 1
    In Possible Solution 2, what do you mean by "let my Mac go into default Energy Saver settings naturally"?
    – loco.loop
    Aug 26, 2022 at 15:11
2

Please note that this can damage your device.. you've been warned. Continue at your own risk

In short, IOPlatformPlugin is power management, CPU scaling, idle frequency (and others). How much the following helps is arguable.

  1. Disable SIP in recovery (CMD+R on boot), open terminal (CMD+3 i think), csrutil disable
  2. Reboot into MacOS, move /System/Library/Extensions/IOPlatformPlugin.kext to / or somewhere else sudo mv /System/Library/Extensions/IOPlatformPlugin.kext / (terminal)
  3. Rebuild cache sudo kextcache -i /, reboot
  4. Re-enable SIP in recovery csrutil enable
2
  • I’ve already replaced the laptop’s battery, so unfortunately I can’t comment on the efficacy of this solution. I do invite others going through the same problem to comment on whether it “fixes” the throttling issue.
    – swineone
    Sep 30, 2018 at 19:54
  • Please provide more explanation on why move kext file to root to your answer
    – Croll
    Apr 12, 2019 at 12:20
1

I just ran into this exact issue, so I made a KEXT which writes to the IA32_HWP_REQUEST MSR to fix it.

Link to the TurboMac repository on GitHub.

As of writing this it's still in a pre-release state so if there are any issues please report them.

1
  • As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.
    – Community Bot
    Feb 10, 2022 at 4:02
0

This worked for me. However, the MacBook Air then boots and runs with full fan ALL THE TIME. It loses the ability to detect CPU temperature.(and apps like Mac Fan Control, cannot detect the fan)

  • Go to System > Library > Extensions. Next, scroll down and find a text file called IOPlatformPluginFamily.kext.
  • Right-click on the file and head to Show Package Contents > Resources > Plugins.
  • In the new list, right-click on ACPI_SMC_PlatformPlugin.kext and go to Show Package Contents > Contents > Resources.
  • Finally, locate the PLIST file that corresponds to your previously-noted Mac model number and delete it.

I then needed to reboot three times. Well, I noticed it started working after I rebooted a few times! enter image description here

1
0

On an early 2015 MacBook Air, I managed to achieve this by writing to the IA32_PERF_CTL MSR directly. I explained the exact steps in another answer here.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .