From c3696412298d7d67dcd542aa6f1f9e7dd86dfa72 Mon Sep 17 00:00:00 2001 From: KazushiM <85604869+KazushiMe@users.noreply.github.com> Date: Thu, 14 Apr 2022 23:06:39 +0800 Subject: [PATCH] =?UTF-8?q?-=20[Sys-clk-OC]:=20Avoid=20conflicts=20with=20?= =?UTF-8?q?ptm=20module=20setting=20boost=20clocks=20-=20[Sys-clk-OC]:=20R?= =?UTF-8?q?educe=20sensitivity=20of=20Auto=20CPU=20Boost=20(=E2=89=A595%)?= =?UTF-8?q?=20-=20[test=5Fpatch]:=20Throw=20error=20if=20no=20patching=20e?= =?UTF-8?q?ntries=20were=20found.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../loader/source/oc/ldr_oc_suite.cpp | 22 +++++++++++++++++-- .../stratosphere/loader/source/oc/test.cpp | 14 +++++++++--- Source/sys-clk-OC/README.md | 2 +- .../sysmodule/src/clock_manager.cpp | 14 +++--------- 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.cpp index 8a560472..ca106358 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/ldr_oc_suite.cpp @@ -909,7 +909,17 @@ namespace ams::ldr::oc { cnt[MEM_PLL_CLK], cnt[GPU_MAX_CLOCK]); - if (cnt[CPU_CLOCK_VDD] > 1 || + if ( + #ifndef ATMOSPHERE_IS_STRATOSPHERE + !cnt[CPU_CLOCK_VDD] || + !cnt[CPU_TABLE] || + !cnt[GPU_TABLE] || + !cnt[CPU_MAX_VOLT] || + !cnt[GPU_PLL_CLK] || + !cnt[MEM_PLL_CLK] || + !cnt[GPU_MAX_CLOCK] || + #endif + cnt[CPU_CLOCK_VDD] > 1 || cnt[CPU_TABLE] > 1 || cnt[GPU_TABLE] > 1 || cnt[CPU_MAX_VOLT] > 13 || @@ -1082,7 +1092,15 @@ namespace ams::ldr::oc { cnt[MEM_VOLT], cnt[MEM_PLL_CLK]); - if (cnt[CPU_CLOCK] > 1 || + if ( + #ifndef ATMOSPHERE_IS_STRATOSPHERE + !cnt[CPU_CLOCK] || + !cnt[CPU_MAX_VOLT] || + !cnt[MEM_CLOCK] || + !cnt[MEM_VOLT] || + !cnt[MEM_PLL_CLK] || + #endif + cnt[CPU_CLOCK] > 1 || cnt[MEM_VOLT] > 2 || cnt[MEM_PLL_CLK] > 2) { diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/test.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/test.cpp index 039ffbae..4533d406 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/test.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/test.cpp @@ -45,8 +45,16 @@ void* loadExec(const char* file_loc, size_t* out_size) { exit(-1); } - fseek(fp, 0, SEEK_END); - size_t size = ftell(fp); + if (fseek(fp, 0, SEEK_END) < 0) { + fprintf(stderr, "fseek error\n"); + exit(-1); + } + + long size = ftell(fp); + if (size == -1L) { + fprintf(stderr, "\"%s\" is a directory", file_loc); + exit(-1); + } fseek(fp, 0, SEEK_SET); void* buf = malloc(size); @@ -55,7 +63,7 @@ void* loadExec(const char* file_loc, size_t* out_size) { fclose(fp); if (size < 8192) { - fprintf(stderr, "File is too small to process: \"%s\" (%lu B)\n", file_loc, size); + fprintf(stderr, "File is too small to process: \"%s\" (%ld B)\n", file_loc, size); exit(-1); } diff --git a/Source/sys-clk-OC/README.md b/Source/sys-clk-OC/README.md index a803ce3c..bfe2c563 100644 --- a/Source/sys-clk-OC/README.md +++ b/Source/sys-clk-OC/README.md @@ -180,7 +180,7 @@ The `[values]` section allows you to alter timings in sys-clk, you should not ne | Key | Desc | Default | |:-----------------------:|-------------------------------------------------------------------------------|:-------:| -|**auto_cpu_boost** | Auto-boost CPU when system Core #3 utilization is high | ON | +|**auto_cpu_boost** | Auto-boost CPU when system Core #3 utilization ≥ 95% | ON | |**sync_reversenx_mode** | Sync nominal profile (mode) with ReverseNX (-Tool and -RT) | ON | |**temp_log_interval_ms** | Defines how often sys-clk log temperatures, in milliseconds (`0` to disable) | 0 ms | |**csv_write_interval_ms**| Defines how often sys-clk writes to the CSV, in milliseconds (`0` to disable) | 0 ms | diff --git a/Source/sys-clk-OC/sysmodule/src/clock_manager.cpp b/Source/sys-clk-OC/sysmodule/src/clock_manager.cpp index 6d80c5d4..47d2272e 100644 --- a/Source/sys-clk-OC/sysmodule/src/clock_manager.cpp +++ b/Source/sys-clk-OC/sysmodule/src/clock_manager.cpp @@ -244,16 +244,7 @@ void ClockManager::WaitForNextTick() uint64_t freeIdleTick = 19'200 * tickWaitTimeMs; uint8_t freePerc = systemCoreIdleTick / (freeIdleTick / 100); - uint8_t systemCoreBoostFreeThreshold = 5; - switch (this->context->realProfile) - { - case SysClkProfile_HandheldChargingOfficial: - case SysClkProfile_Docked: - systemCoreBoostFreeThreshold = 10; - break; - default: - break; - } + constexpr uint8_t systemCoreBoostFreeThreshold = 5; bool systemCoreBoostCPUPrevState = this->oc->systemCoreBoostCPU; this->oc->systemCoreBoostCPU = (freePerc <= systemCoreBoostFreeThreshold); @@ -416,7 +407,8 @@ bool ClockManager::RefreshContext() } // restore clocks to stock values on app or profile change - if(hasChanged) + // and let ptm module handle boost clocks rather than resetting + if (hasChanged && !IsCpuBoostMode()) Clocks::ResetToStock(); /* Check ReverseNX-RT and adjust nominal profile when context changes */