sysclk: fix governor min hz

This commit is contained in:
souldbminersmwc
2026-03-21 11:39:50 -04:00
parent 901ab93e58
commit 8b9fbdf13d
3 changed files with 34 additions and 3 deletions

View File

@@ -451,7 +451,7 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
case HocClkConfigValue_LiteTDPLimit:
return 6400ULL; // 0.5C
case HorizonOCConfigValue_CpuGovernorMinimumFreq:
return 612ULL; // 612MHz
return 612000000ULL; // 612MHz
default:
return 0ULL;
}

View File

@@ -590,7 +590,28 @@ public:
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);
ValueThresholds thresholdsDisabled(0, 0);
std::vector<NamedValue> GovernorMinHz = {
NamedValue("510 MHz", 510000000),
NamedValue("612 MHz", 612000000),
NamedValue("714 MHz", 714000000),
NamedValue("816 MHz", 816000000),
NamedValue("918 MHz", 918000000),
NamedValue("1020 MHz", 1020000000),
};
addConfigButton(
HorizonOCConfigValue_CpuGovernorMinimumFreq,
"CPU Governor Minimum Frequency",
ValueRange(0, 0, 1, "", 0),
"CPU Governor Minimum Frequency",
&thresholdsDisabled,
{},
GovernorMinHz,
false
);
}
};

View File

@@ -61,6 +61,7 @@ u32 initialConfigValues[SysClkConfigValue_EnumMax]; // initial config. used for
bool kipAvailable = false;
bool isCpuGovernorInBoostMode = false;
bool isVRREnabled = false;
ClockManager *ClockManager::GetInstance()
{
return instance;
@@ -370,7 +371,8 @@ void ClockManager::CpuGovernorThread(void* arg) {
u32 downHoldRemaining = 0;
u32 lastHz = 0;
u32 minHz = 612;
u32 tick = 0;
for (;;) {
if (!mgr->running || !isCpuGovernorEnabled) {
downHoldRemaining = 0;
@@ -424,6 +426,14 @@ void ClockManager::CpuGovernorThread(void* arg) {
if (downHoldRemaining > 0)
downHoldRemaining--;
if(++tick > 50) {
minHz = mgr->config->GetConfigValue(HorizonOCConfigValue_CpuGovernorMinimumFreq);
tick = 0;
}
if(newHz < minHz)
newHz = minHz;
if ((!goingDown || (downHoldRemaining == 0)) && mgr->IsAssignableHz(SysClkModule_CPU, newHz)) {
Board::SetHz(SysClkModule_CPU, newHz);
mgr->context->freqs[SysClkModule_CPU] = newHz;