diff --git a/Source/sys-clk/common/include/sysclk/config.h b/Source/sys-clk/common/include/sysclk/config.h index 94e76626..3539ad13 100644 --- a/Source/sys-clk/common/include/sysclk/config.h +++ b/Source/sys-clk/common/include/sysclk/config.h @@ -65,6 +65,7 @@ typedef enum { HorizonOCConfigValue_GPUSchedulingMethod, HorizonOCConfigValue_RAMVoltUsageDisplayMode, + HorizonOCConfigValue_CpuGovernorMinimumFreq, KipConfigValue_custRev, // KipConfigValue_mtcConf, @@ -249,7 +250,8 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr case HorizonOCConfigValue_RAMVoltUsageDisplayMode: return pretty ? "RAM Voltage / Usage Display Mode" : "ram_volt_usage_display_mode"; - + case HorizonOCConfigValue_CpuGovernorMinimumFreq: + return pretty ? "CPU Governor Minimum Frequency" : "cpu_gov_min_freq"; // KIP config values case KipConfigValue_custRev: return pretty ? "Custom Revision" : "kip_cust_rev"; @@ -448,6 +450,8 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val) return 9600ULL; // 8600mW will trigger on erista stock, so raise it a bit case HocClkConfigValue_LiteTDPLimit: return 6400ULL; // 0.5C + case HorizonOCConfigValue_CpuGovernorMinimumFreq: + return 612ULL; // 612MHz default: return 0ULL; } diff --git a/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp b/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp index 82227c0f..0d8d560e 100644 --- a/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp +++ b/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp @@ -28,7 +28,10 @@ #pragma message("Compiling with minimal features") #endif -class SysmoduleSettingsSubMenuGui; +#define A_BTN "\ue0e0" +#define R_ARROW "\u2192" +class GeneralSettingsSubMenuGui; +class GovernorSettingsSubMenuGui; class DisplaySubMenuGui; class SafetySubMenuGui; class RamSubmenuGui; @@ -38,6 +41,7 @@ class CpuSubmenuGui; class GpuSubmenuGui; class GpuCustomTableSubmenuGui; class RamTableEditor; + MiscGui::MiscGui() { this->configList = new SysClkConfigValueList {}; @@ -359,16 +363,28 @@ void MiscGui::listUI() std::vector noNamedValues = {}; this->listElement->addItem(new tsl::elm::CategoryHeader("Settings")); - tsl::elm::ListItem* sysmoduleSettingsSubMenu = new tsl::elm::ListItem("Sysmodule Settings"); + tsl::elm::ListItem* sysmoduleSettingsSubMenu = new tsl::elm::ListItem("General Settings"); sysmoduleSettingsSubMenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::changeTo(); return true; } return false; }); + sysmoduleSettingsSubMenu->setValue(R_ARROW); this->listElement->addItem(sysmoduleSettingsSubMenu); + tsl::elm::ListItem* governorSettingsSubMenu = new tsl::elm::ListItem("Governor Settings"); + governorSettingsSubMenu->setClickListener([](u64 keys) { + if (keys & HidNpadButton_A) { + tsl::changeTo(); + return true; + } + return false; + }); + governorSettingsSubMenu->setValue(R_ARROW); + this->listElement->addItem(governorSettingsSubMenu); + tsl::elm::ListItem* safetySubmenu = new tsl::elm::ListItem("Safety Settings"); safetySubmenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { @@ -377,9 +393,10 @@ void MiscGui::listUI() } return false; }); + safetySubmenu->setValue(R_ARROW); this->listElement->addItem(safetySubmenu); - this->listElement->addItem(new tsl::elm::CategoryHeader("KIP")); + // this->listElement->addItem(new tsl::elm::CategoryHeader("KIP")); tsl::elm::ListItem* saveBtn = new tsl::elm::ListItem("Save KIP Settings"); saveBtn->setClickListener([](u64 keys) { @@ -393,6 +410,7 @@ void MiscGui::listUI() } return false; }); + saveBtn->setValue(A_BTN); this->listElement->addItem(saveBtn); tsl::elm::ListItem* ramSubmenu = new tsl::elm::ListItem("RAM Settings"); @@ -403,6 +421,7 @@ void MiscGui::listUI() } return false; }); + ramSubmenu->setValue(R_ARROW); this->listElement->addItem(ramSubmenu); tsl::elm::ListItem* cpuSubmenu = new tsl::elm::ListItem("CPU Settings"); @@ -413,6 +432,7 @@ void MiscGui::listUI() } return false; }); + cpuSubmenu->setValue(R_ARROW); this->listElement->addItem(cpuSubmenu); tsl::elm::ListItem* gpuSubmenu = new tsl::elm::ListItem("GPU Settings"); @@ -423,8 +443,9 @@ void MiscGui::listUI() } return false; }); + gpuSubmenu->setValue(R_ARROW); this->listElement->addItem(gpuSubmenu); - this->listElement->addItem(new tsl::elm::CategoryHeader("Display")); + tsl::elm::ListItem* displaySubMenu = new tsl::elm::ListItem("Display Settings"); displaySubMenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { @@ -433,7 +454,9 @@ void MiscGui::listUI() } return false; }); + displaySubMenu->setValue(R_ARROW); this->listElement->addItem(displaySubMenu); + #if IS_MINIMAL == 0 // std::vector chargerCurrents = { // NamedValue("Disabled", 0), @@ -530,12 +553,13 @@ void MiscGui::listUI() #endif } -class SysmoduleSettingsSubMenuGui : public MiscGui { +class GeneralSettingsSubMenuGui : public MiscGui { public: - SysmoduleSettingsSubMenuGui() { } + GeneralSettingsSubMenuGui() { } protected: void listUI() override { + this->listElement->addItem(new tsl::elm::CategoryHeader("General Settings")); ValueThresholds thresholdsDisabled(0, 0); std::vector ramVoltDispModes = { NamedValue("VDD2 + VDDQ", RamDisplayMode_VDD2VDDQ), @@ -558,12 +582,25 @@ protected: } }; +class GovernorSettingsSubMenuGui : public MiscGui { +public: + GovernorSettingsSubMenuGui() { } + +protected: + void listUI() override { + this->listElement->addItem(new tsl::elm::CategoryHeader("Governor Settings")); + addFreqButton(HorizonOCConfigValue_CpuGovernorMinimumFreq, "CPU Governor Minimum Frequency", SysClkModule_CPU, BaseMenuGui::IsMariko() ? cpu_freq_label_m : cpu_freq_label_e); + } +}; + + class DisplaySubMenuGui : public MiscGui { public: DisplaySubMenuGui() { } protected: void listUI() override { + this->listElement->addItem(new tsl::elm::CategoryHeader("Display Settings")); addConfigToggle(HorizonOCConfigValue_OverwriteRefreshRate, nullptr); tsl::elm::CustomDrawer* warningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) { renderer->drawString("\uE150 Enabling unsafe display", false, x + 20, y + 30, 18, tsl::style::color::ColorText); @@ -692,6 +729,7 @@ protected: } return false; }); + freqSubmenu->setValue(R_ARROW); this->listElement->addItem(freqSubmenu); tsl::elm::ListItem* latenciesSubmenu = new tsl::elm::ListItem("RAM Latency Editor"); @@ -702,6 +740,7 @@ protected: } return false; }); + latenciesSubmenu->setValue(R_ARROW); this->listElement->addItem(latenciesSubmenu); tsl::elm::ListItem* timingsSubmenu = new tsl::elm::ListItem("RAM Timing Reductions"); @@ -712,6 +751,7 @@ protected: } return false; }); + timingsSubmenu->setValue(R_ARROW); this->listElement->addItem(timingsSubmenu); } @@ -1104,7 +1144,7 @@ protected: {}, marikoMaxEmcClock, false, - "\ue0e0" + A_BTN ); } else { // 1600000, 1331200, 1065600, 800000, 665600, 408000, 204000 @@ -1166,9 +1206,9 @@ protected: NamedValue("2400 MHz", 2400000, "JEDEC."), }; - addConfigButtonS(KipConfigValue_eristaEmcMaxClock, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, "\ue0e0"); - addConfigButtonS(KipConfigValue_eristaEmcMaxClock1, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, "\ue0e0"); - addConfigButtonS(KipConfigValue_eristaEmcMaxClock2, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, "\ue0e0"); + addConfigButtonS(KipConfigValue_eristaEmcMaxClock, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, A_BTN); + addConfigButtonS(KipConfigValue_eristaEmcMaxClock1, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, A_BTN); + addConfigButtonS(KipConfigValue_eristaEmcMaxClock2, "", ValueRange(0, 1, 1, "", 1), "", &eristaRamThresholds, {}, eristaMaxEmcClock, false, A_BTN); } }; }; @@ -1355,6 +1395,7 @@ protected: } return false; }); + customTableSubmenu->setValue(R_ARROW); this->listElement->addItem(customTableSubmenu); } };