From e6b4cb6612b2b43d9a26b5e7596dbbda731d83d2 Mon Sep 17 00:00:00 2001 From: souldbminersmwc Date: Thu, 12 Feb 2026 19:49:52 -0500 Subject: [PATCH] sysclk: add lineon's cpu volt bugfix thanks, lineon! --- .../sys-clk/overlay/src/ui/gui/misc_gui.cpp | 3 -- Source/sys-clk/sysmodule/src/board.cpp | 11 ++++- .../sys-clk/sysmodule/src/clock_manager.cpp | 42 ------------------- Source/sys-clk/sysmodule/src/clock_manager.h | 1 - 4 files changed, 10 insertions(+), 47 deletions(-) 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 ff27412d..653c3253 100644 --- a/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp +++ b/Source/sys-clk/overlay/src/ui/gui/misc_gui.cpp @@ -248,9 +248,6 @@ void MiscGui::listUI() addConfigToggle(HocClkConfigValue_UncappedClocks, nullptr); addConfigToggle(HocClkConfigValue_OverwriteBoostMode, nullptr); - #if IS_MINIMAL == 0 - addConfigToggle(HocClkConfigValue_FixCpuVoltBug, nullptr); - #endif addConfigToggle(HocClkConfigValue_ThermalThrottle, nullptr); addConfigToggle(HocClkConfigValue_HandheldTDP, nullptr); addConfigToggle(HocClkConfigValue_EnforceBoardLimit, nullptr); diff --git a/Source/sys-clk/sysmodule/src/board.cpp b/Source/sys-clk/sysmodule/src/board.cpp index 1848fd07..c04e15ca 100644 --- a/Source/sys-clk/sysmodule/src/board.cpp +++ b/Source/sys-clk/sysmodule/src/board.cpp @@ -451,13 +451,22 @@ void Board::SetHz(SysClkModule module, std::uint32_t hz) ASSERT_RESULT_OK(rc, "clkrstOpenSession"); rc = clkrstSetClockRate(&session, hz); ASSERT_RESULT_OK(rc, "clkrstSetClockRate"); - + if(module == SysClkModule_CPU) { + svcSleepThread(200'000'000); + rc = clkrstSetClockRate(&session, hz); + ASSERT_RESULT_OK(rc, "clkrstSetClockRate"); + } clkrstCloseSession(&session); } else { rc = pcvSetClockRate(Board::GetPcvModule(module), hz); ASSERT_RESULT_OK(rc, "pcvSetClockRate"); + if(module == SysClkModule_CPU) { + svcSleepThread(200'000'000); + rc = pcvSetClockRate(Board::GetPcvModule(module), hz); + ASSERT_RESULT_OK(rc, "pcvSetClockRate"); + } } } diff --git a/Source/sys-clk/sysmodule/src/clock_manager.cpp b/Source/sys-clk/sysmodule/src/clock_manager.cpp index 02b18b8f..1c84881f 100644 --- a/Source/sys-clk/sysmodule/src/clock_manager.cpp +++ b/Source/sys-clk/sysmodule/src/clock_manager.cpp @@ -114,44 +114,6 @@ ClockManager::ClockManager() previousRamHz = Board::GetHz(SysClkModule_MEM); } - -void ClockManager::FixCpuBug() { - static constexpr u64 freqs[] = { - 1785000000, // this will just set to the max when kip is unloaded so idgaf - 1887000000, - 1963000000, - 2091000000, - 2193000000, - 2295000000, - 2397000000, - 2499000000, - 2601000000, - 2703000000 // replicates manual fix; if unstable it resets to 1020 due to speed - }; - - for (u64 hz : freqs) { - Board::SetHz(SysClkModule_CPU, hz); - } - - svcSleepThread(1'000'000); - - Board::SetHz(SysClkModule_CPU, 1020000000); - ResetToStockClocks(); - u32 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) - { - Board::SetHz(SysClkModule_CPU, targetHz); - this->context->freqs[SysClkModule_CPU] = targetHz; - } -} - ClockManager::~ClockManager() { threadClose(&governorTHREAD); @@ -611,10 +573,6 @@ void ClockManager::Tick() Board::ResetToStockGpu(); } } - - if(module == SysClkModule_CPU && this->config->GetConfigValue(HocClkConfigValue_FixCpuVoltBug)) { - FixCpuBug(); - } } } } diff --git a/Source/sys-clk/sysmodule/src/clock_manager.h b/Source/sys-clk/sysmodule/src/clock_manager.h index 7af5c539..9cbe5554 100644 --- a/Source/sys-clk/sysmodule/src/clock_manager.h +++ b/Source/sys-clk/sysmodule/src/clock_manager.h @@ -49,7 +49,6 @@ class ClockManager ClockManager(); virtual ~ClockManager(); - void FixCpuBug(); SysClkContext GetCurrentContext(); Config* GetConfig();