From ea754707ee6fe2d88e3c3b56e10036d069506409 Mon Sep 17 00:00:00 2001 From: souldbminersmwc Date: Wed, 28 Jan 2026 15:39:56 -0500 Subject: [PATCH] sysclk: fix erista gpu vmin --- .../stratosphere/loader/source/oc/pcv/pcv.hpp | 5 ++-- .../loader/source/oc/pcv/pcv_erista.cpp | 24 ++++++++---------- .../contents/00FF0000636C6BFF/exefs.nsp | Bin 211565 -> 211550 bytes dist/atmosphere/kips/hoc.kip | Bin 276972 -> 276908 bytes dist/switch/.overlays/horizon-oc-overlay.ovl | Bin 1122364 -> 1122364 bytes 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv.hpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv.hpp index 6febf32b..0eb25e4e 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv.hpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv.hpp @@ -216,9 +216,8 @@ namespace ams::ldr::oc::pcv { constexpr u32 GpuClkPllLimit = 921'600'000; constexpr u32 GpuVminOfficial = 810; - static const u32 gpuVoltDvfsPattern[] = { 1150, 1000, 100, 1000, 10, }; - static const u32 gpuVoltDvfsOffsets[] = { 1, 2, 3, 4, 5, }; - static_assert(sizeof(gpuVoltDvfsPattern) == sizeof(gpuVoltDvfsOffsets), "Invalid gpuVoltDvfsPattern"); + static const u32 gpuVoltDvfsPattern[] = { 810, 1150, 1000, 100, 1000, 10, }; + static_assert(sizeof(gpuVoltDvfsPattern) == (sizeof(u32) * 6), "Invalid gpuVoltDvfsPattern"); static const u32 gpuVoltThermalPattern[] = { 950, 1132, 0, 810, 1132, 15000, 810, 1132, 30000, 810, 1132, 50000, 810, 1132, 70000, 810, 1132, 105000 }; static_assert(sizeof(gpuVoltThermalPattern) == 0x48, "invalid gpuVoltageThermalPattern size"); diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_erista.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_erista.cpp index 8a8d2cef..b8cdc28a 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_erista.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_erista.cpp @@ -103,14 +103,15 @@ namespace ams::ldr::oc::pcv::erista { } Result GpuVoltDVFS(u32 *ptr) { - if (MatchesPattern(ptr, gpuVoltDvfsPattern, gpuVoltDvfsOffsets)) { - if (C.eristaGpuVmin) { - PATCH_OFFSET(ptr, C.eristaGpuVmin); - } - R_SUCCEED(); - } + u32 result = std::memcmp(ptr, gpuVoltDvfsPattern, sizeof(gpuVoltDvfsPattern)); - R_THROW(ldr::ResultInvalidGpuDvfs()); + if (result) + R_THROW(ldr::ResultInvalidGpuDvfs()); + + if (C.eristaGpuVmin) + PATCH_OFFSET(ptr, C.eristaGpuVmin); + + R_SUCCEED(); } Result GpuVoltThermals(u32 *ptr) { @@ -730,19 +731,16 @@ namespace ams::ldr::oc::pcv::erista { } void Patch(uintptr_t mapped_nso, size_t nso_size) { - u32 CpuCvbDefaultMaxFreq = static_cast(GetDvfsTableLastEntry(CpuCvbTableDefault)->freq); - u32 GpuCvbDefaultMaxFreq = static_cast(GetDvfsTableLastEntry(GpuCvbTableDefault)->freq); - PatcherEntry patches[] = { - {"CPU Freq Table", CpuFreqCvbTable, 1, nullptr, CpuCvbDefaultMaxFreq}, + {"CPU Freq Table", CpuFreqCvbTable, 1, nullptr, static_cast(GetDvfsTableLastEntry(CpuCvbTableDefault)->freq)}, {"CPU Volt DVFS", &CpuVoltDvfs, 1, nullptr, 825}, {"CPU Volt Thermals", &CpuVoltThermals, 1, nullptr, 825}, {"CPU Volt Dfll", &CpuVoltDfll, 1, nullptr, 0xFFD0EAFF}, {"GPU Volt DVFS", &GpuVoltDVFS, 1, nullptr, 810}, {"GPU Volt Thermals", &GpuVoltThermals, 1, nullptr, 810}, - {"GPU Freq Table", GpuFreqCvbTable, 1, nullptr, GpuCvbDefaultMaxFreq}, + {"GPU Freq Table", GpuFreqCvbTable, 1, nullptr, static_cast(GetDvfsTableLastEntry(GpuCvbTableDefault)->freq)}, {"GPU Freq Asm", &GpuFreqMaxAsm, 2, &GpuMaxClockPatternFn}, - {"GPU Freq PLL", &GpuFreqPllLimit, 1, nullptr, GpuClkPllLimit}, + {"GPU Freq PLL", &GpuFreqPllLimit, 1, nullptr, GpuClkPllLimit}, // NOT ISSUE {"MEM Freq Mtc", &MemFreqMtcTable, 0, nullptr, EmcClkOSLimit}, {"MEM Freq Max", &MemFreqMax, 0, nullptr, EmcClkOSLimit}, {"MEM Freq PLLM", &MemFreqPllmLimit, 2, nullptr, EmcClkPllmLimit}, diff --git a/dist/atmosphere/contents/00FF0000636C6BFF/exefs.nsp b/dist/atmosphere/contents/00FF0000636C6BFF/exefs.nsp index 63b9d9062c47e88ae79c6cc99e04b391c88d43e5..2925aeaf1fed28be8701d40c9afd24d7f183281b 100644 GIT binary patch delta 370 zcmaF+h3DQEo(U3y*G!oikioTyn(0`y5`9@)~>{9vXkY1 zyS z(Kh$FQ~YDe6qj|)4vg&%jEvhI7@798G6rw|+s4GhqS3^_;Fqru;G(dai{TCLq97N4 z1;^y%)PfQf2FKvcyzB#M!0q)jnIaf9rZ6yg z=A~ukWtNC@I5PMp`rTjuA~D5(}J=_ur6 i=A|mArl=OH7IQT)sBh1m&2*_x1Y1aL57uIq5&!_0-FLtM delta 385 zcmccjh3D-To(U3yPfeK_kipZ5n(0=bHGzT;SQsuiGB8YVW@adVjPi^`t#&R4D@ zctP-F_n@1|nxvbV7;Y?OVEDv6J<*KWY!ah_!qWLg>y&?G%)U2C(;%=*e6{D&Y@J(0 zWnJ$Qm_>d4kN7k@Ft$4|GH!QZWZKipSiJpj8xs$U`a}i>zkG!N7lq)}Tnuk`7X`Wa zD>x=6rxui`FgONh=4Bt?WL9Eum~Pn36wV>Rbd`a>ftzJ}XE)PfE)EHP3uP{*{S4Cs zrZMegiesG4J)P+RANQEoLbJ0GeTPv;Y7A diff --git a/dist/atmosphere/kips/hoc.kip b/dist/atmosphere/kips/hoc.kip index c02e3798c8fb21732df50a43d5b7de43f7d3af76..335f1ed2fa1d2d69c324ae327fb364dca348483d 100644 GIT binary patch delta 3270 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