msr-utility
msr-utility copied to clipboard
Use utility to disable bd-prochot permanently?
Hello all;
I have a brand new MSI Raider laptop that is now permanently throttled to a nearly unusable 400 mhz per core because, after overheating once, bd-prochot is ALWAYS on.
My understanding is Bd-prochot is controlled by bit[0] of MSR 0x1FC. In linux at least, simply writing 2 seems to override bd-prochot permanently.
Is this what I need to run?
msr-cmd.exe -l write 0x1FC 0x0000000000000002
Any help would be very appreciated! I hate to have to return my entire laptop for something as stupid as one registry key being set wrong.
In fact, it is not permanent, registers will be reset after S3/S4 resume or reboot. You need to create a task in task scheduler to set MSR again on such events occur.
Simply if you don't understand register things too much, you can use Throttlestop to do the job. If disabling BDPROCHOT in Throttlestop solves the problem, then register below may work.
Download the mingw port of the tool. Since you didn't mention what CPU you are using, here is the register of boardwell:
#define MSR_POWER_CTL 0x1fc
#define PCH_NEG_DISABLE (1 << 30) // PKG C-state Lat. Neg.
#define PCH_NEG_DISABLE_SHIFT 30
#define LTR_SW_DISABLE (1 << 29) // LTR_IIO_DISABLE, LTR: Snoop Related
#define LTR_SW_DISABLE_SHIFT 29 // ???
#define LTR_SW_INPUT_DISABLE 28 // LTR_SW_DISABLE, LTR Software Input, Disable = Ignore SW LTR input.
#define PROCHOT_LOCK (1 << 27)
#define PROCHOT_LOCK_SHIFT 27
#define PROCHOT_RESPONSE (1 << 26)
#define PROCHOT_RESPONSE_SHIFT 26
#define PWR_PERF_TUNING_CFG_MODE (1 << 25) // if set 0, turbo is disabled
#define PWR_PERF_TUNING_CFG_MODE_SHIFT 25
#define PWR_PERF_TUNING_ENABLE_DYN_SWITCHING (1 << 24) // Enable/Disable dynamic switching feature in the power performance tuning algorithm.
#define PWR_PERF_TUNING_ENABLE_DYN_SHIFT 24 // Power/Performance Switch
#define PWR_PERF_TUNING_DISABLE_EEP_CTRL (1 << 23) // DYNAMIC_P_STATE_CTRL, EE-P Control
#define PWR_PERF_TUNING_DISABLE_EEP_SHIFT 23
#define PWR_PERF_TUNING_DISABLE_SAPM_CTRL (1 << 22) // DISABLE THIS DROPS BENCHAMRKS PTS
#define PWR_PERF_TUNING_DISABLE_SAPM_SHIFT 22
#define DIS_PROCHOT_OUT (1 << 21)
#define DIS_PROCHOT_OUT_SHIFT 21
#define DIS_RACE_TO_HALT_OPTIMIZATION (1 << 20)
#define DIS_RACE_TO_HALT_OPTIMIZATION_SHIFT 20 // Gen 6~12, SDM
#define EE_TURBO_DISABLE (1 << 19)
#define EE_TURBO_DISABLE_SHIFT 19
#define ENERGY_EFFICIENT_PSTATE_ENABLE (1 << 18)
#define ENERGY_EFFICIENT_PSTATE_ENABLE_SHIFT 18
#define PHOLD_SR_DISABLE (1 << 17)
#define PHOLD_SR_DISABLE_SHIFT 17
#define PHOLD_CST_PREVENTION_INIT (1 << 16)
#define PHOLD_CST_PREVENTION_INIT_SHIFT 16
#define FAST_BRK_INT_EN (1 << 4) // Disable = Use 'fast' VID swing rate
#define FAST_BRK_INT_EN_SHIFT 4
#define FAST_BRK_SNP_EN (1 << 3) // Disable = Use 'fast' VID swing rate
#define FAST_BRK_SNP_EN_SHIFT 3
#define SAPM_IMC_C2_POLICY_EN (1 << 2)
#define SAPM_IMC_C2_POLICY_SHIFT 2
#define C1E_ENABLE (1 << 1)
#define C1E_ENABLE_SHIFT 1
#define ENABLE_BIDIR_PROCHOT_EN (1 << 0)
#define ENABLE_BIDIR_PROCHOT_EN_SHIFT 0
#define IA32_MISC_ENABLE 0x1a0 // thread scope
#define FAST_STRINGS_ENABLE_BIT BIT(0)
#define TM1_TM2_EMTTM_ENABLE_BIT BIT(3) // Automatic Thermal Control Circuit Enable (R/W)
#define MISC_TURBO_DISABLE BIT(6)
#define PERF_MONITORING BIT(7)
#define SPEED_STEP_ENABLE_BIT BIT(16)
#define MONITOR_MWAIT_SUPPORT BIT(18) // should not change on the fly
#define BURST_MODE_DISABLE BIT(38)
msr-cmd getbit 0x1fc 27
: check bit 27 of 0x1fc
is set by bios or not, if set, prochot bit is probably locked (read only).
msr-cmd -A setbit 0x1fc 0 0
: disable ENABLE_BIDIR_PROCHOT_EN
msr-cmd -A setbit 0x1a0 3 0
: TM1_TM2_EMTTM_ENABLE_BIT
is also thermal control related, you may wanna disable it