From 436b7feb8e61c4d88385c22452217b7d8da0a02d Mon Sep 17 00:00:00 2001 From: souldbminersmwc Date: Sat, 7 Mar 2026 10:35:40 -0500 Subject: [PATCH] sysclk: fix dvfs after set logic --- Source/sys-clk/sysmodule/src/clock_manager.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/sys-clk/sysmodule/src/clock_manager.cpp b/Source/sys-clk/sysmodule/src/clock_manager.cpp index c044a746..f15d4340 100644 --- a/Source/sys-clk/sysmodule/src/clock_manager.cpp +++ b/Source/sys-clk/sysmodule/src/clock_manager.cpp @@ -711,6 +711,7 @@ void ClockManager::DVFSBeforeSet(u32 targetHz) { this->context->voltages[HocClkVoltage_GPU] = vmin * 1000; } + void ClockManager::DVFSAfterSet(u32 targetHz) { s32 dvfsOffset = this->config->GetConfigValue(HorizonOCConfigValue_DVFSOffset); dvfsOffset = std::max(dvfsOffset, -50); @@ -724,9 +725,13 @@ void ClockManager::DVFSAfterSet(u32 targetHz) { if(!targetHz) targetHz = this->config->GetAutoClockHz(GLOBAL_PROFILE_ID, SysClkModule_GPU, this->context->profile, false); } + + u32 maxHz = this->GetMaxAllowedHz(SysClkModule_GPU, this->context->profile); + u32 nearestHz = this->GetNearestHz(SysClkModule_GPU, targetHz, maxHz); + if(targetHz) { Board::SetHz(SysClkModule_GPU, ~0); - Board::SetHz(SysClkModule_GPU, targetHz); + Board::SetHz(SysClkModule_GPU, nearestHz); } }