From b104d852c7580f03a1a8f3d01e20a284b8480b4a Mon Sep 17 00:00:00 2001 From: IceStormNG Date: Sat, 2 Mar 2024 13:26:37 +0100 Subject: [PATCH] Explicitly save previous power limits --- app/AutoTDP/AutoTDPService.cs | 2 ++ app/AutoTDP/PowerLimiter/ASUSACPIPowerLimiter.cs | 5 +++++ app/AutoTDP/PowerLimiter/IPowerLimiter.cs | 2 ++ app/AutoTDP/PowerLimiter/IntelMSRPowerLimiter.cs | 15 ++++++++------- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/AutoTDP/AutoTDPService.cs b/app/AutoTDP/AutoTDPService.cs index 4dd76f03..753c97a9 100644 --- a/app/AutoTDP/AutoTDPService.cs +++ b/app/AutoTDP/AutoTDPService.cs @@ -299,6 +299,8 @@ namespace GHelper.AutoTDP tdpThread = new Thread(() => { CurrentTDP = powerLimiter.GetCPUPowerLimit(); + powerLimiter.SavePowerLimits(); // save current power limits to restore them afterwards + LowestStableTDP = profile.MaxTdp; LowestTDP = profile.MaxTdp; diff --git a/app/AutoTDP/PowerLimiter/ASUSACPIPowerLimiter.cs b/app/AutoTDP/PowerLimiter/ASUSACPIPowerLimiter.cs index 8e3397c7..6697c0e1 100644 --- a/app/AutoTDP/PowerLimiter/ASUSACPIPowerLimiter.cs +++ b/app/AutoTDP/PowerLimiter/ASUSACPIPowerLimiter.cs @@ -13,6 +13,11 @@ namespace GHelper.AutoTDP.PowerLimiter private int DefaultC1 = 0; public ASUSACPIPowerLimiter() + { + + } + + public void SavePowerLimits() { DefaultA0 = Program.acpi.DeviceGet(AsusACPI.PPT_APUA0); DefaultA3 = Program.acpi.DeviceGet(AsusACPI.PPT_APUA3); diff --git a/app/AutoTDP/PowerLimiter/IPowerLimiter.cs b/app/AutoTDP/PowerLimiter/IPowerLimiter.cs index b8045c78..de799f6a 100644 --- a/app/AutoTDP/PowerLimiter/IPowerLimiter.cs +++ b/app/AutoTDP/PowerLimiter/IPowerLimiter.cs @@ -8,5 +8,7 @@ public void ResetPowerLimits(); + public void SavePowerLimits(); + } } diff --git a/app/AutoTDP/PowerLimiter/IntelMSRPowerLimiter.cs b/app/AutoTDP/PowerLimiter/IntelMSRPowerLimiter.cs index 03706ff5..5a3cf24e 100644 --- a/app/AutoTDP/PowerLimiter/IntelMSRPowerLimiter.cs +++ b/app/AutoTDP/PowerLimiter/IntelMSRPowerLimiter.cs @@ -27,6 +27,14 @@ namespace GHelper.AutoTDP.PowerLimiter ReadPowerUnit(); } + public void SavePowerLimits() + { + DefaultEax = 0; + DefaultEdx = 0; + + ols.Rdmsr(MSR_PKG_POWER_LIMIT, ref DefaultEax, ref DefaultEdx); + } + public void ReadPowerUnit() { uint eax = 0; @@ -72,13 +80,6 @@ namespace GHelper.AutoTDP.PowerLimiter ols.Rdmsr(MSR_PKG_POWER_LIMIT, ref eax, ref edx); - if (DefaultEax == 0) - { - //Store default settings to reset them on exit - DefaultEax = eax; - DefaultEdx = edx; - } - uint pl1 = eax & PL1_MASK; uint pl2 = edx & PL2_MASK;