Purpose of this post
After 2 years, I realised that I too was suffering from the 400 MHz bug, where my Framework’s CPUs would seemingly randomly throttle at 400 MHz. If you don’t know what I’m talking about, just search “400 MHz” on this forum.
I’m sure there are other posts from people who didn’t realise what was happening and who, like me, were being driven up the wall trying to figure out why their laptop was slowing down randomly.
The posts on this forum were only partially helpful. From speaking with Framework support, I was able to find a better solution, namely removing the HDMI expansion card. I couldn’t find this information anywhere, and so I’m writing it down here for others to find.
TL;DR
To fix the issue:
- Remove expansion cards, in particular HDMI or Display Port
- Reset the embedded controller by holding down the power button for 30 seconds or so
Bug characteristics
- Laptop inexplicably slows down, sometimes for a couple of seconds or sometimes endlessly. It feels like you’re using a computer from 10-20 years ago and tasks such as music / video editing, gaming, etc are impossible.
- Very difficult to reproduce, it really just seems random
- Restarting seems to have no or just a temporary effect
Confirming that it’s the 400 MHz bug
When your laptop slows down, check the CPU frequency. If it’s stuck at 400MHz, then it’s probably this.
If you’re on Linux, you can type:
watch -n.1 "grep \"^[c]pu MHz\" /proc/cpuinfo"
Suggestions for fixing it
Removing problematic expansion cards
I got this information from Framework support:
The 400MHz lock is also caused by a signal called BD PROCHOT (Bi-Directional Processor Hot). This signal allows other components (such as a wonky power adapter or a sensor) to tell the CPU to throttle, even if the CPU temperature is low.
A loose or faulty Expansion Card (especially HDMI or DisplayPort) can leak current and confuse the EC. Try running the laptop with all cards removed to see if the spikes vanish.
Removing my HDMI expansion card fixed the problem for me.
Resetting the mainboard’s embedded controller
This may or may not help. It didn’t for me, but it seems to have for others, see e.g. here
In a first instance, try just turning off your laptop by holding the power button, remove the charger, wait a couple of minutes, then boot up again.
If that doesn’t work, then a more thorough process (as suggested by Framework support) is:
- Turn off the laptop and unplug the charger
- Remove all expansion cards and the Input Cover.
- Then, disconnect or remove only the RAM, the SSD, the RTC coin, and the battery cable (no need to remove the entire battery).
- Leave the removed components for 15 minutes.
- Reinstall or reinsert the RAM, the SSD, and the battery cable.
- Plug the laptop into the charger.
Reapplying thermal paste
Some people e.g. here found that this fixes the issue, but as this person points out, it’s probably because in the process the embedded controller is reset.
Other fixes
If all else fails:
Intel Extreme Tuning Utility (Windows)
Framework support suggested:
using msr-tools to disable the PROCHOT bit, though this is more advanced.
I think this is Linux specific and above my abilities.
My gripes with Framework support
In general, I had a very good experience with support. They got back to me within hours and were able to suggest removing the expansion card which fixed my issue. So for that, cheers!
However, I doubt that it would have been such a quick fix if I hadn’t self diagnosed the 400 MHz issue. I would have personally appreciated foregoing all the usual niceties of “what’s your BIOS, did you use a dock, what power adapter are you using, …” given that this seems to be such a frequent problem. Or at the very least, asking me those questions but also suggesting it to me right from the start.
What I would really want is for Framework to write about this in the knowledge base. I really do not understand why it’s not there. What’s more, I asked Framework support when I was in contact with them 3 separate times if they could either share more information online (e.g. in the knowledge base) or explain to me why they hadn’t done so yet. This bug is not new. The earliest reference I could find of it in the forums was from Framework themselves back in 2021. This bug has been driving me absolutely nuts - I’ve spent 2 years dealing with it intermittently and was only able to fix it during an artistic residency this week where it was so bad that I couldn’t make music at all and I was able to I spend 2 days figuring out what was going on.
Anyway, in the meantime I hope that this helps.