From f2ee9ed38d11deeefcd70dea62f872f7c00e207c Mon Sep 17 00:00:00 2001 From: Pedro Nariyoshi Date: Wed, 29 Jan 2020 10:27:05 -0500 Subject: [PATCH] Implement Disable_BDPROCHOT --- lenovo_fix.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lenovo_fix.py b/lenovo_fix.py index da9bcf9..d3389ad 100755 --- a/lenovo_fix.py +++ b/lenovo_fix.py @@ -379,10 +379,6 @@ def load_config(): value = config.set(power_source, option, str(max(0.001, value))) elif option == 'Update_Rate_s': fatal('The mandatory "Update_Rate_s" parameter is missing.') - for option in ('Disable_BDPROCHOT'): - value = config.boolean(power_source, option, fallback=None) - if value is None: - value = config.set(power_source, option, 0) trip_temp = config.getfloat(power_source, 'Trip_Temp_C', fallback=None) if trip_temp is not None: @@ -517,6 +513,7 @@ def calc_reg_values(platform_info, config): else: valid_c_tdp_target_value = max(0, c_tdp_target_value) regs[power_source]['MSR_CONFIG_TDP_CONTROL'] = valid_c_tdp_target_value + return regs @@ -532,6 +529,18 @@ def set_hwp(): log('[D] HWP - write "{:#02x}" - read "{:#02x}" - match {}'.format(HWP_VALUE, read_value, match)) +def set_disable_bdprochot(): + # Disable BDPROCHOT + cur_val = readmsr(0x1FC,flatten=True) + new_val = (cur_val & 0xFFFFFFFFFFFFFFFE) + + writemsr(0x1FC, new_val) + if args.debug: + read_value = readmsr(0x1FC, from_bit=31, to_bit=31)[0] + match = OK if ~read_value else ERR + log('[D] BDPROCHOT - write "{:#02x}" - read "{:#02x}" - match {}'.format(0, read_value, match)) + + def power_thread(config, regs, exit_event): try: mchbar_mmio = MMIO(0xFED159A0, 8) @@ -603,6 +612,11 @@ def power_thread(config, regs, exit_event): ) ) + # Disable BDPROCHOT + disable_bdprochot = config.getboolean(power['source'], 'Disable_BDPROCHOT', fallback=None) + if disable_bdprochot is not None: + set_disable_bdprochot() + wait_t = config.getfloat(power['source'], 'Update_Rate_s') enable_hwp_mode = config.getboolean('AC', 'HWP_Mode', fallback=False) # set HWP less frequently. Just to be safe since (e.g.) TLP might reset this value