From b9b36de4c9dc2036a2516200e864852cdf047b08 Mon Sep 17 00:00:00 2001 From: hanabbi Date: Tue, 25 Apr 2023 00:35:57 +0900 Subject: [PATCH] feat(sys-clk-oc): set mariko min clock to 1020Mhz if using governor Mariko: If using governor and cpu profile is higher than 1020, min clock will be set to 1020. Not much power saved by underclocking below 1020, so to prevent stutter and hanging --- Source/sys-clk-OC/sysmodule/src/clock_manager.cpp | 8 ++++++++ Source/sys-clk-OC/sysmodule/src/oc_extra.cpp | 6 ++++++ Source/sys-clk-OC/sysmodule/src/oc_extra.h | 1 + 3 files changed, 15 insertions(+) diff --git a/Source/sys-clk-OC/sysmodule/src/clock_manager.cpp b/Source/sys-clk-OC/sysmodule/src/clock_manager.cpp index 393ef71f..494ad066 100644 --- a/Source/sys-clk-OC/sysmodule/src/clock_manager.cpp +++ b/Source/sys-clk-OC/sysmodule/src/clock_manager.cpp @@ -147,6 +147,14 @@ void ClockManager::Tick() for (unsigned int module = 0; module < SysClkModule_EnumMax; module++) { uint32_t hz = GetHz((SysClkModule)module); + + if (module == SysClkModule_CPU) { + this->governor->SetMinHz(*Clocks::freqRange[module].first, SysClkModule_CPU); + if (Clocks::GetIsMariko() && hz > (uint32_t)1020'000'000) { + this->governor->SetMinHz(1020'000'000, SysClkModule_CPU); + } + } + this->governor->SetMaxHz(hz, (SysClkModule)module); if (hz && hz != this->context->freqs[module] && !this->governor->IsHandledByGovernor((SysClkModule)module)) diff --git a/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp b/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp index 4084dbec..f6f1770e 100644 --- a/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp +++ b/Source/sys-clk-OC/sysmodule/src/oc_extra.cpp @@ -294,6 +294,12 @@ void Governor::SetMaxHz(uint32_t maxHz, SysClkModule module) { } } +void Governor::SetMinHz(uint32_t minHz, SysClkModule module) { + if (module == SysClkModule_CPU) { + m_cpu_gov->min_hz = minHz; + } +} + void Governor::GovernorManager::Start() { if (this->running) return; diff --git a/Source/sys-clk-OC/sysmodule/src/oc_extra.h b/Source/sys-clk-OC/sysmodule/src/oc_extra.h index c80a4068..b30a623b 100644 --- a/Source/sys-clk-OC/sysmodule/src/oc_extra.h +++ b/Source/sys-clk-OC/sysmodule/src/oc_extra.h @@ -337,6 +337,7 @@ public: uint32_t GetPerfConf() { return m_perf_conf_id; }; void SetMaxHz(uint32_t maxHz, SysClkModule module); + void SetMinHz(uint32_t minHz, SysClkModule module); void SetAutoCPUBoost(bool enabled) { m_cpu_gov->auto_boost = enabled; }; void SetCPUBoostHz(uint32_t boostHz) { m_cpu_gov->boost_hz = boostHz; };