add gpu voltage request

This commit is contained in:
Lightos1
2026-07-04 13:44:45 +02:00
parent d7df43e962
commit cb0ffbcd29
11 changed files with 130 additions and 27 deletions

View File

@@ -542,6 +542,15 @@ std::vector<std::string> ConfigInfoStrings(HocClkConfigValue val, bool isMariko,
"- Enabled: Enables GPU scheduling, 96.5% GPU max load",
"Default: Do not override"
};
case HocClkConfigValue_LiveGpuVoltage:
return {
"Adjust GPU voltage on the fly.",
"Warning: unstable settings allowed.",
"Exception: while RAM OC is active, voltage cannot drop below stability minimum.",
"RAM frequency changes overwrite requested voltage.",
"Voltage applies globally across all frequencies.",
"\"Reset\" restores default or RAM-stable minimum."
};
default:
return {};
}

View File

@@ -662,6 +662,9 @@ class ExperimentalSettingsSubMenuGui : public MiscGui {
addConfigToggle(HocClkConfigValue_MarikoMiddleFreqs, nullptr, true);
addConfigToggle(HocClkConfigValue_LiveCpuUv, nullptr);
}
addConfigToggle(HocClkConfigValue_LiveGpuVoltage, "Live GPU Volt Request", false);
std::vector<NamedValue> gpuSchedMethodValues = {
NamedValue("INI", GpuSchedulingOverrideMethod_Ini),
NamedValue("NV Service", GpuSchedulingOverrideMethod_NvService),
@@ -2126,6 +2129,41 @@ class GpuSubmenuGui : public MiscGui {
addConfigButton(HocClkConfigValue_DVFSOffset, "GPU DVFS Offset", ValueRange(0, 12, 1, "", 0), "GPU DVFS Offset", &thresholdsDisabled, {},
dvfsOffset, false);
if (this->configList->values[HocClkConfigValue_LiveGpuVoltage]) {
std::vector<NamedValue> gpuVoltRequestValues = {
NamedValue("Reset", 0),
};
for (u32 mv = IsMariko() ? 420 : 700; mv <= 1050; mv += 5) {
gpuVoltRequestValues.push_back(NamedValue(std::to_string(mv) + "mV", mv));
}
tsl::elm::ListItem *gpuVoltRequestBtn = new tsl::elm::ListItem("GPU Volt Request");
gpuVoltRequestBtn->setTextColor(tsl::Color(120, 235, 255, 255));
gpuVoltRequestBtn->setValue("Request");
gpuVoltRequestBtn->setClickListener([gpuVoltRequestValues](u64 keys) {
if ((keys & HidNpadButton_A) == 0)
return false;
tsl::changeTo<ValueChoiceGui>(
0, ValueRange(0, 0, 1, "", 1), "GPU Volt Request",
[](u32 value) {
Result rc = hocClkIpcRequestGpuVoltage(value);
if (R_FAILED(rc)) {
FatalGui::openWithResultCode("hocClkIpcRequestGpuVoltage", rc);
return false;
}
return true;
},
ValueThresholds(), false, std::map<u32, std::string>{}, gpuVoltRequestValues, false, false);
return true;
});
this->listElement->addItem(gpuVoltRequestBtn);
}
tsl::elm::ListItem *customTableSubmenu = new tsl::elm::ListItem("GPU Voltage Table");
customTableSubmenu->setClickListener([](u64 keys) {
if (keys & HidNpadButton_A) {