Stop Dell from throttling CPU with power adapter

40,816

Solution 1

I've done some investigation into this and found that there's probably no good way to prevent recent Dell laptops from throttling the CPU when it doesn't detect an OEM AC adapter (or one with a broken data pin.)

Disabling SpeedStep or "additional sleep modes" or messing with the power profiles in the BIOS makes no difference. The "Intel Extreme Tuning" utility doesn't seem to support these motherboards as all overclocking options are locked out, but when a non-OEM charger is connected up it reports that CPU thermal throttling is engaged, and CPU-Z shows the FSB multiplier down to 5x and the core voltage at 0.6 volts.

My guess is that perhaps the BIOS is designed to send false motherboard temperature readings to the CPU when a non-OEM adapter is detected, causing it to throttle. It seems Dell was very serious about locking you in to OEM adapters when they designed this system.

Edit: I found a utility that will allow you to disable the unknown adapter throttling, under Windows at least (I don't know yet if the utility will work under Linux, or if there is something similar.) ThrottleStop has a checkbox called "BD PROCHOT" which causes the CPU core voltage and multiplier to reset to normal when disabled. Apparently this is a "2 way signal path to the CPU. It allows other components in a laptop like the motherboard or GPU to send a signal to the CPU which tricks the CPU into thinking it is too hot", confirming that the way this "feature" is implemented by the BIOS is through sending this signal to the CPU when an unknown AC adapter is detected.

Solution 2

-Only for Intel-CPUs-

Start by installing MSR-TOOLS in Linux.

sudo apt install msr-tools

You should load msr as a kernel module by the following command

sudo modprobe msr

Read the value from Model Specific Register (MSR) - 0x1FC

sudo rdmsr 0x1FC

Then finally write the value to the Model Specific Register (MSR) - 0x1FC

sudo wrmsr 0x1FC 4004d

There you go! Your CPU runs at maximum !

Solution 3

Here's an OS-independent program you can compile with a C compiler/GCC (so long as it has an implementation of asprintf available) and set to run automatically at system startup which should disable the throttling on these Intel-based laptops, I've used this successfully on a Dell Inspiron 5558 laptop running Xubuntu with root privilege for the program, with "msrtools" installed and "modprobe msr" in the startup file prior to program execution, to allow reading and writing the MSR-registers from the user side (other OS may require different commands for "const char* cmd" to read/write to processor register location 0x1FC and will likely require root/privileged user access for the executable whatever form that may take)

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define BUFSIZE (64)

int get_msr_value(uint64_t* reg_value) {
  const char* cmd = "rdmsr -u 0x1FC";
  char cmd_buf[BUFSIZE];

  FILE* fp;

  if ((fp = popen(cmd, "r")) == NULL) {
    printf("Error opening pipe!\n");
    return -1;
  }

  cmd_buf[strcspn(fgets(cmd_buf, BUFSIZE, fp), "\n")] = 0;
  *reg_value = atoi(cmd_buf);

  if (pclose(fp)) {
    printf("Command not found or exited with error status\n");
    return -1;
  }

  return 0;
}

int main(void) {
  const char* cmd = "wrmsr -a 0x1FC";
  char* concat_cmd;
  int ret;
  uint64_t* reg_value = &(uint64_t){0};

  if ((ret = get_msr_value(reg_value))) {
    return ret;
  }

  printf("Old register value: %lu\n", *reg_value);

  *reg_value = *reg_value & 0xFFFFFFFE;  // clear bit 0

  printf("New register value: %lu\n", *reg_value);

  if (asprintf(&concat_cmd, "%s %i", cmd, *reg_value) == -1)
    return -1;

  printf("Executing: %s\n", concat_cmd);

  system(concat_cmd);
  free(concat_cmd);

  return 0;
}
Share:
40,816

Related videos on Youtube

BarrowWight
Author by

BarrowWight

Updated on September 18, 2022

Comments

  • BarrowWight
    BarrowWight over 1 year

    My Dell laptop is experiencing the old problem of the power adapter failing to be recognized by the computer. I know for a fact it is just a break in the data cable in the line, because if I position it just right, the cable is recognized and the computer stops throttling the CPU to 20%. Is there any way that this can be disabled, so that I don't have the fiddle with my power cord every time I plug the computer in?

    • Ramhound
      Ramhound over 7 years
      What does disabling the data line detection have to do with your CPU throttling?
    • Yorik
      Yorik over 7 years
      @Ramhound: wild guess, but probably "on battery" power setting? Not sure why the OP is so quick to blame a data channel though, faulty Power connections on the motherboard are pretty common.
    • Jeff Zeitlin
      Jeff Zeitlin over 7 years
      I did have a similar problem not long ago, and the OP's diagnosis turned out to be correct in my case. The only real option I had was to buy a new compatible Dell adapter.
    • BarrowWight
      BarrowWight over 7 years
      @Ramhound Dell computers have a data line in the power brick that tells the laptop what the rating on the power adapter is. Run a quick google search and you can see what I mean. I was wondering if anyone knew how to disable the throttling feature.
    • user
      user over 5 years
  • mic84
    mic84 over 5 years
    welcome to superuser:- do you have any reference links to go with this answer? Please take a few minutes to read How to Answer or Help center, again welcome to superuser.
  • sradforth
    sradforth over 5 years
    Would you mind confirming we should be "unchecking" BD-PRODCHOT to fix Dell's crazy CPU slowing on non-OEM powerpacks? It seemed to be ticked when opening TechPowerUp.
  • Bitrex
    Bitrex over 5 years
    @sradforth Hi, I don't have a Dell laptop anymore so unfortunately I don't recall exactly how ThrottleStop operates. But you can find which toggle setting it is easily enough via running the CPU-Z utility for Windows simultaneously; if the processor is throttled it will be obvious from the real-time processor clock speed reported in the main page, it will be stuck at something like 400MHz no matter what you do. When set "correctly" the clock reported will jump up to its nominal rate in response to user activity when not idling, as expected
  • Bitrex
    Bitrex over 5 years
    The throttling isn't Windows-specific it happens when running Linux as well.
  • DeVil
    DeVil over 5 years
    Can't upvote this enough! I can confirm, I unticked BD PROCHOT in Throttlestop and I could immediately see in task manager my CPU jumping back up to normal levels after watching it flatline at 30% for the recorded time. So annoying. Thanks again.
  • Guido van Steen
    Guido van Steen almost 5 years
    In my case this did not help: sudo ./ThrottleStop\n Old register value: 2359388\n New register value: 2359388\n Executing: wrmsr -a 0x1FC 2359388
  • Денис Карпов
    Денис Карпов over 4 years
    Actually not on maximum. It will run with frequency which will be set to register 0x1fc, that's why its better to write value which you will read from register first
  • MichaelE
    MichaelE over 3 years
    ThrottleStop worked. First I unchecked BD PROCHOT and it did not work right away, but then I unchecked SpeedStep and speed returned to normal. Then I checked both, but system was still normal so it fixed somthing. I left BD PROCHOT and after a reboot performance is still normal without ThrottleStop running. Thank you.
  • Szymon
    Szymon almost 3 years
    Top upvoted and chosen answer is wrong and suggests to people that they can't do anything about this issue. Just what Dell would want. In fact, I have solved this issue on Inspiron 5567 both Win 10 and Linux. Longer Win10 startup time is no big deal, if it allows me to not pay a tribute to the extortionists at Dell.