From 8cfab71f4dda88d0499d1d3c40f44b17afde5ea0 Mon Sep 17 00:00:00 2001 From: hanabbi Date: Mon, 24 Apr 2023 00:35:53 +0900 Subject: [PATCH] fix(sys-clk-oc): fix governor not setting clocks correctly: fixes #1 - move hz check from ApplyTargetFreq to caller --- Source/sys-clk-OC/sysmodule/src/oc_extra.cpp | 5 ++++- Source/sys-clk-OC/sysmodule/src/oc_extra.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp b/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp index 4e71b5a2..005413d6 100644 --- a/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp +++ b/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp @@ -143,6 +143,8 @@ namespace GovernorImpl { // Utilization is frequency-invariant (normalized): // target_freq = C * max_freq(ref_freq) * util / max void BaseGovernor::ApplyNewFreqFromNormUtil(uint32_t normUtil) { + uint32_t curr_hz = m_target_hz; + auto FindHzInTable = [](uint32_t* list, uint32_t hz) -> uint32_t { uint32_t* p = list; for (; *p != 0; p++) { @@ -163,7 +165,8 @@ void BaseGovernor::ApplyNewFreqFromNormUtil(uint32_t normUtil) { else new_hz = FindHzInTable(m_hz_list, next_freq); - ApplyTargetFreq(new_hz); + if (new_hz != curr_hz) + ApplyTargetFreq(new_hz); } void CpuGovernor::GovernorWorker::Start() { diff --git a/Source/sys-clk-OC/sysmodule/src/oc_extra.h b/Source/sys-clk-OC/sysmodule/src/oc_extra.h index 995e4bc8..b0ab1c34 100644 --- a/Source/sys-clk-OC/sysmodule/src/oc_extra.h +++ b/Source/sys-clk-OC/sysmodule/src/oc_extra.h @@ -97,7 +97,7 @@ namespace GovernorImpl { void ApplyNewFreqFromNormUtil(uint32_t norm); void ApplyTargetFreq(uint32_t hz) { - if (!hz || m_target_hz == hz) + if (!hz) return; m_target_hz = hz;