You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Surface Pro 7 has CPU throttled to 1500 MHz after resume from suspend #706
It's definitely related to low battery. It seems to happen when the device is < 5% on battery. The processor is throttled to 1500, and then when the battery charges up the machine is still stuck in the throttled mode.
To replicate, allow the Surface to auto-sleep/hibernate due to low battery, and then plug in and boot up.
One other thing worth nothing that I just discovered is that this issue does not occur with the standard linux kernel (specifically, I'm running PopOS). This appears to be exclusive to the linux-surface kernel.
1500 Mhz? When I'm low battery after sleep, my CPU is throttled to 500 Mhz. I'd wish for 1500 Mhz, lol. Sometimes it unstucks itself and goes back to normal after battery charges a bit, sometimes it can remain stuck at 500 Mhz even with 100% battery and I have to restart. Can't remember if I tried putting it to sleep to see if it fixes it. Neither did I try Log Off. But a restart definitely fixes it past ... 20% battery I believe.
SP7 i5 on Fedora 35 with Surface Kernel 5.16. (5.16.17-1.surface.fc35.x86_64)
To reduce the risk of electrical fire, do not set this MSR_VR_CURRENT_CONFIG higher than observed for your device. This is the good value for my Surface Pro 7 i7.
I obtained it by diffing it with the rdmsr giving a bad value of 0x78 when things were throttled. This variable seems to make all the difference. Setting it to a bad value on a good boot causes bad throttling, and setting it back to the good value fixes things without restarting.
To reduce the risk of electrical fire, do not set this MSR_VR_CURRENT_CONFIG higher than observed for your device. This is the good value for my Surface Pro 7 i7.
I obtained it by diffing it with the rdmsr giving a bad value of 0x78 when things were throttled. This variable seems to make all the difference. Setting it to a bad value on a good boot causes bad throttling, and setting it back to the good value fixes things without restarting.
after using this fix, my computer froze, which is not something that has happened before and i do not see another possible reason for why it could have. could changing that setting have caused this?
edit: i have an sp7 i7 and rdmsr yeilded FFF, so i just went with your values being not totally sure what i was doing.
@Flameopathic A freeze shouldn't happen and I never saw one. Also, don't worry, this is a per-boot temporary register, not a permanent setting.
Your computer certainly wasn't overheating, and letting it return to normal values shouldn't cause anything different from CPU operation in a normal boot. Specifically my i7 is 512GB. This MSR is a maximum not a target, according to the Intel docs:
Register Address: 601H, 1537 MSR_VR_CURRENT_CONFIG
Power Limit 4 (PL4) Package
Package-level maximum power limit (in Watts). It is a proactive, instantaneous limit.
12:0 PL4 Value
PL4 value in 0.125 A increments. This field is locked by VR_CURRENT_CONFIG[LOCK]. When the LOCK bit is set to 1b, this
field becomes Read Only.
I don't know what set yours to FFF, which looks corrupt and too high. We want to take the value from a normal boot to restore on problematic boots. Despite worrying, I set FFF for a minute and nothing froze, but I prefer the proper value. You can also search the Intel manual for LIMIT, or just loop rdmsr for all registers across good and bad boots to diff.
If the GUI freezes, try TTY to know if there's a panic. Today I'm on 6.10.5-surface-1. If it still freezes, then try disabling secure boot (which might've caused wrmsr to freeze) and updating Surface firmware using Windows.
@danielzgtg Can I ask you for some guidance?
I have this same problem with my Surface Pro 7 i5 256gb. However, the battery doesn't work any longer, so I cannot get the values from a good boot, as it's never happening. Do you know where I could find possibles register values to test?
@KakeyaK You can just use my 0x408 value. Nothing bad happened to the user who used the extreme 0xFFF value. Surfaces have other overheating protection mechanisms, and the risk so far appears to be no more than that that overclockers face.
For future reference, I also found this issue #1041 that mentions the same error. Their answer involved doing some calculation regarding the cpu wattage to choose a value for the 0x601 MSR. I tried both values and both worked. However, doing the calculations stated in the other issue I got slightly lower values for vCore and frequency (measured via i7z).
I also have this issue randomly with my i5-1135G7 after a cold boot, @danielzgtg your suggestion work like a charm on my Manjaro installation, thanks! Without it i7z reported a multiplier of max. 5x-6x on all CPU Cores which is unbearable slow...
This worked for me once, and now it's not working at all. Same register same value. I'm not sure what else to try at the moment. All my cores are stuck at 400MHz or slower.
Further, I cannot get a good reboot or shutdown where the cores are working right
Activity
japostoles commentedon Jan 26, 2022
This also seems to happen if the device sleeps due to low battery.
When it comes back up, the CPU is throttled.
japostoles commentedon Feb 23, 2022
It's definitely related to low battery. It seems to happen when the device is < 5% on battery. The processor is throttled to 1500, and then when the battery charges up the machine is still stuck in the throttled mode.
To replicate, allow the Surface to auto-sleep/hibernate due to low battery, and then plug in and boot up.
japostoles commentedon Feb 23, 2022
Letting the battery charge, and then hibernate / resume will correct the issue.
Suspend doesn't seem to trigger the "fix".
japostoles commentedon Apr 18, 2022
One other thing worth nothing that I just discovered is that this issue does not occur with the standard linux kernel (specifically, I'm running PopOS). This appears to be exclusive to the linux-surface kernel.
RareMv commentedon Apr 18, 2022
1500 Mhz? When I'm low battery after sleep, my CPU is throttled to 500 Mhz. I'd wish for 1500 Mhz, lol. Sometimes it unstucks itself and goes back to normal after battery charges a bit, sometimes it can remain stuck at 500 Mhz even with 100% battery and I have to restart. Can't remember if I tried putting it to sleep to see if it fixes it. Neither did I try Log Off. But a restart definitely fixes it past ... 20% battery I believe.
SP7 i5 on Fedora 35 with Surface Kernel 5.16. (5.16.17-1.surface.fc35.x86_64)
willoma commentedon Jul 6, 2024
I have the same behaviour on my Surface Laptop Go 3, stuck at 400MHz...
danielzgtg commentedon Jul 8, 2024
Run the following commands to fix the throttling:
To reduce the risk of electrical fire, do not set this
MSR_VR_CURRENT_CONFIGhigher than observed for your device. This is the good value for my Surface Pro 7 i7.I obtained it by diffing it with the
rdmsrgiving a bad value of0x78when things were throttled. This variable seems to make all the difference. Setting it to a bad value on a good boot causes bad throttling, and setting it back to the good value fixes things without restarting.urocylus commentedon Aug 25, 2024
after using this fix, my computer froze, which is not something that has happened before and i do not see another possible reason for why it could have. could changing that setting have caused this?
edit: i have an sp7 i7 and rdmsr yeilded FFF, so i just went with your values being not totally sure what i was doing.
danielzgtg commentedon Oct 19, 2024
@Flameopathic A freeze shouldn't happen and I never saw one. Also, don't worry, this is a per-boot temporary register, not a permanent setting.
Your computer certainly wasn't overheating, and letting it return to normal values shouldn't cause anything different from CPU operation in a normal boot. Specifically my i7 is 512GB. This MSR is a maximum not a target, according to the Intel docs:
I don't know what set yours to FFF, which looks corrupt and too high. We want to take the value from a normal boot to restore on problematic boots. Despite worrying, I set FFF for a minute and nothing froze, but I prefer the proper value. You can also search the Intel manual for
LIMIT, or just looprdmsrfor all registers across good and bad boots todiff.If the GUI freezes, try TTY to know if there's a panic. Today I'm on
6.10.5-surface-1. If it still freezes, then try disabling secure boot (which might've caused wrmsr to freeze) and updating Surface firmware using Windows.urocylus commentedon Oct 19, 2024
@danielzgtg thank you for the help and resources! everything seems to be playing a little nicer, the freeze must have been unrelated.
KakeyaK commentedon Nov 12, 2024
@danielzgtg Can I ask you for some guidance?
I have this same problem with my Surface Pro 7 i5 256gb. However, the battery doesn't work any longer, so I cannot get the values from a good boot, as it's never happening. Do you know where I could find possibles register values to test?
danielzgtg commentedon Nov 13, 2024
@KakeyaK You can just use my
0x408value. Nothing bad happened to the user who used the extreme0xFFFvalue. Surfaces have other overheating protection mechanisms, and the risk so far appears to be no more than that that overclockers face.KakeyaK commentedon Nov 14, 2024
@danielzgtg Thank you! It worked great!
For future reference, I also found this issue #1041 that mentions the same error. Their answer involved doing some calculation regarding the cpu wattage to choose a value for the 0x601 MSR. I tried both values and both worked. However, doing the calculations stated in the other issue I got slightly lower values for vCore and frequency (measured via i7z).
GrauBlitz commentedon May 19, 2025
I also have this issue randomly with my i5-1135G7 after a cold boot, @danielzgtg your suggestion work like a charm on my Manjaro installation, thanks! Without it i7z reported a multiplier of max. 5x-6x on all CPU Cores which is unbearable slow...
lizsugar commentedon May 23, 2025
This worked for me once, and now it's not working at all. Same register same value. I'm not sure what else to try at the moment. All my cores are stuck at 400MHz or slower.
Further, I cannot get a good reboot or shutdown where the cores are working right
33 remaining items
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake
powercap: intel_rapl: Add PL4 support for Ice Lake