sysclk: revise cpu volt bugfix

This commit is contained in:
souldbminersmwc
2026-01-23 18:33:09 -05:00
parent 64301c6d33
commit d3b1e9d31d
2 changed files with 27 additions and 44 deletions

View File

@@ -701,17 +701,17 @@ protected:
this->listElement->addItem(new tsl::elm::CategoryHeader("Memory Latencies")); this->listElement->addItem(new tsl::elm::CategoryHeader("Memory Latencies"));
std::vector<NamedValue> rlLabels = { std::vector<NamedValue> rlLabels = {
NamedValue("2133RL", 40), NamedValue("1333RL", 28),
NamedValue("1866RL", 36),
NamedValue("1600RL", 32), NamedValue("1600RL", 32),
NamedValue("1333RL", 28) NamedValue("1866RL", 36),
NamedValue("2133RL", 40)
}; };
std::vector<NamedValue> wlLabels = { std::vector<NamedValue> wlLabels = {
NamedValue("2133WL", 18), NamedValue("1333WL", 12),
NamedValue("1866WL", 16),
NamedValue("1600WL", 14), NamedValue("1600WL", 14),
NamedValue("1333WL", 12) NamedValue("1866WL", 16),
NamedValue("2133WL", 18)
}; };
addConfigButton( addConfigButton(

View File

@@ -113,40 +113,25 @@ ClockManager::ClockManager()
} }
void ClockManager::FixCpuBug() { void ClockManager::FixCpuBug() {
Board::SetHz(SysClkModule_CPU, 1785000000); // this will just set to the max when kip is unloaded so idgaf static u32 cpuFreqs[] = {
Board::SetHz(SysClkModule_CPU, 1887000000); 1785000000,
Board::SetHz(SysClkModule_CPU, 1963000000); 1887000000,
Board::SetHz(SysClkModule_CPU, 2091000000); 1963000000,
Board::SetHz(SysClkModule_CPU, 2193000000); 2091000000,
Board::SetHz(SysClkModule_CPU, 2295000000); 2193000000,
Board::SetHz(SysClkModule_CPU, 2397000000); 2295000000,
Board::SetHz(SysClkModule_CPU, 2499000000); 2397000000,
Board::SetHz(SysClkModule_CPU, 2601000000); 2499000000,
Board::SetHz(SysClkModule_CPU, 2703000000); // i am just replicating what the user would manually do to fix the bug. if 2703 is unstable it will reset to 1020 due to how fast this runs 2601000000,
Board::SetHz(SysClkModule_CPU, 1020000000); 2703000000,
1020000000
};
static u32 cpuFreqsSize = sizeof(cpuFreqs) / sizeof(u32);
for(int i = 0; i < cpuFreqsSize; i++) {
Board::SetHz(SysClkModule_CPU, cpuFreqs[i]);
svcSleepThread(2'500'000); // 2.5ms
}
ResetToStockClocks(); ResetToStockClocks();
u32 targetHz = 0;
u32 maxHz = 0;
u32 nearestHz = 0;
targetHz = this->context->overrideFreqs[SysClkModule_CPU];
if (!targetHz)
{
targetHz = this->config->GetAutoClockHz(this->context->applicationId, SysClkModule_CPU, this->context->profile, false);
if(!targetHz)
targetHz = this->config->GetAutoClockHz(GLOBAL_PROFILE_ID, SysClkModule_CPU, this->context->profile, false);
}
if (targetHz)
{
maxHz = this->GetMaxAllowedHz(SysClkModule_CPU, this->context->profile);
nearestHz = this->GetNearestHz(SysClkModule_CPU, targetHz, maxHz);
if (nearestHz != this->context->freqs[SysClkModule_CPU]) {
Board::SetHz(SysClkModule_CPU, nearestHz);
this->context->freqs[SysClkModule_CPU] = nearestHz;
}
}
} }
ClockManager::~ClockManager() ClockManager::~ClockManager()
@@ -450,11 +435,6 @@ void ClockManager::Tick()
} }
bool isBoost = apmExtIsBoostMode(mode); bool isBoost = apmExtIsBoostMode(mode);
if (prevBoostMode && !isBoost) {
if(this->config->GetConfigValue(HocClkConfigValue_FixCpuVoltBug))
FixCpuBug();
}
prevBoostMode = isBoost; prevBoostMode = isBoost;
bool noGPU = false; bool noGPU = false;
@@ -538,6 +518,9 @@ void ClockManager::Tick()
Board::SetHz((SysClkModule)module, nearestHz); Board::SetHz((SysClkModule)module, nearestHz);
this->context->freqs[module] = nearestHz; this->context->freqs[module] = nearestHz;
} }
if(module == SysClkModule_CPU) {
FixCpuBug();
}
} }
} }
} }