mirror of
https://github.com/ayufan/steam-deck-tools.git
synced 2026-04-07 23:33:52 +00:00
Use global mutex to ensure driver access are sequential
This commit is contained in:
parent
a1a438c3f8
commit
f7e3e70c2b
6 changed files with 148 additions and 74 deletions
|
|
@ -51,21 +51,25 @@ namespace PowerControl.Helpers.GPU
|
|||
return true;
|
||||
}
|
||||
|
||||
public VangoghGPU? Open()
|
||||
public VangoghGPU? Open(bool validateSMU = true)
|
||||
{
|
||||
var gpu = VangoghGPU.OpenMMIO(MMIOAddress, MMIOSize);
|
||||
if (gpu == null)
|
||||
return null;
|
||||
|
||||
// Check supported SMU version
|
||||
var smuVersion = gpu.SMUVersion;
|
||||
if (smuVersion != SMUVersion)
|
||||
if (validateSMU)
|
||||
{
|
||||
Log("SMU: {0:X8} => not supported", smuVersion);
|
||||
return null;
|
||||
// Check supported SMU version
|
||||
var smuVersion = gpu.SMUVersion;
|
||||
if (smuVersion != SMUVersion)
|
||||
{
|
||||
Log("SMU: {0:X8} => not supported", smuVersion);
|
||||
return null;
|
||||
}
|
||||
|
||||
Log("SMU: {0:X8} => detected", smuVersion);
|
||||
}
|
||||
|
||||
Log("SMU: {0:X8} => detected", smuVersion);
|
||||
return gpu;
|
||||
}
|
||||
};
|
||||
|
|
@ -85,7 +89,7 @@ namespace PowerControl.Helpers.GPU
|
|||
|
||||
public static VangoghGPU? Open()
|
||||
{
|
||||
return DetectedDevice?.Open();
|
||||
return DetectedDevice?.Open(false);
|
||||
}
|
||||
|
||||
public static bool Detect()
|
||||
|
|
|
|||
|
|
@ -160,14 +160,19 @@ namespace PowerControl
|
|||
|
||||
if (VangoghGPU.IsSupported)
|
||||
{
|
||||
using (var sd = VangoghGPU.Open())
|
||||
return Instance.WithGlobalMutex<object>(200, () =>
|
||||
{
|
||||
if (sd is null)
|
||||
return null;
|
||||
using (var sd = VangoghGPU.Open())
|
||||
{
|
||||
if (sd is null)
|
||||
return null;
|
||||
|
||||
sd.SlowTDP = mW;
|
||||
sd.FastTDP = mW;
|
||||
}
|
||||
sd.SlowTDP = mW;
|
||||
sd.FastTDP = mW;
|
||||
}
|
||||
|
||||
return selected;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -185,9 +190,9 @@ namespace PowerControl
|
|||
UseShellExecute = false,
|
||||
CreateNoWindow = true
|
||||
});
|
||||
}
|
||||
|
||||
return selected;
|
||||
return selected;
|
||||
}
|
||||
}
|
||||
},
|
||||
new Menu.MenuItemWithOptions()
|
||||
|
|
@ -200,20 +205,23 @@ namespace PowerControl
|
|||
ResetValue = () => { return "Default"; },
|
||||
ApplyValue = delegate(object selected)
|
||||
{
|
||||
using (var sd = VangoghGPU.Open())
|
||||
return Instance.WithGlobalMutex<object>(200, () =>
|
||||
{
|
||||
if (sd is null)
|
||||
return null;
|
||||
|
||||
if (selected.ToString() == "Default")
|
||||
using (var sd = VangoghGPU.Open())
|
||||
{
|
||||
sd.HardMinGfxClock = 200;
|
||||
if (sd is null)
|
||||
return null;
|
||||
|
||||
if (selected.ToString() == "Default")
|
||||
{
|
||||
sd.HardMinGfxClock = 200;
|
||||
return selected;
|
||||
}
|
||||
|
||||
sd.HardMinGfxClock = uint.Parse(selected.ToString().Replace("MHz", ""));
|
||||
return selected;
|
||||
}
|
||||
|
||||
sd.HardMinGfxClock = uint.Parse(selected.ToString().Replace("MHz", ""));
|
||||
return selected;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
new Menu.MenuItemWithOptions()
|
||||
|
|
@ -226,38 +234,41 @@ namespace PowerControl
|
|||
ResetValue = () => { return "Default"; },
|
||||
ApplyValue = delegate(object selected)
|
||||
{
|
||||
using (var sd = VangoghGPU.Open())
|
||||
return Instance.WithGlobalMutex<object>(200, () =>
|
||||
{
|
||||
if (sd is null)
|
||||
return null;
|
||||
|
||||
switch(selected.ToString())
|
||||
using (var sd = VangoghGPU.Open())
|
||||
{
|
||||
case "Default":
|
||||
sd.MinCPUClock = 1400;
|
||||
sd.MaxCPUClock = 3500;
|
||||
break;
|
||||
|
||||
case "Power-Save":
|
||||
sd.MinCPUClock = 1400;
|
||||
sd.MaxCPUClock = 1800;
|
||||
break;
|
||||
|
||||
case "Balanced":
|
||||
sd.MinCPUClock = 2200;
|
||||
sd.MaxCPUClock = 2800;
|
||||
break;
|
||||
|
||||
case "Max":
|
||||
sd.MinCPUClock = 3000;
|
||||
sd.MaxCPUClock = 3500;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (sd is null)
|
||||
return null;
|
||||
|
||||
switch(selected.ToString())
|
||||
{
|
||||
case "Default":
|
||||
sd.MinCPUClock = 1400;
|
||||
sd.MaxCPUClock = 3500;
|
||||
break;
|
||||
|
||||
case "Power-Save":
|
||||
sd.MinCPUClock = 1400;
|
||||
sd.MaxCPUClock = 1800;
|
||||
break;
|
||||
|
||||
case "Balanced":
|
||||
sd.MinCPUClock = 2200;
|
||||
sd.MaxCPUClock = 2800;
|
||||
break;
|
||||
|
||||
case "Max":
|
||||
sd.MinCPUClock = 3000;
|
||||
sd.MaxCPUClock = 3500;
|
||||
break;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
return selected;
|
||||
}
|
||||
return selected;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
new Menu.MenuItemWithOptions()
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ namespace PowerControl
|
|||
{
|
||||
Trace.WriteLine("WinRing0 initialized=" + WinRing0.InitializeOls().ToString());
|
||||
|
||||
VangoghGPU.Detect();
|
||||
Instance.WithGlobalMutex(1000, () => VangoghGPU.Detect());
|
||||
}
|
||||
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue