From fb3e976f2e86f2737e9c4c2492c9a69660e5a3a9 Mon Sep 17 00:00:00 2001 From: Lightos1 <124387232+Lightos1@users.noreply.github.com> Date: Sun, 26 Apr 2026 22:13:49 +0200 Subject: [PATCH] ldr: fix 1333 latency max bug -- index 0 is a valid latency --- .../loader/source/oc/mariko/calculate_timings.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/mariko/calculate_timings.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/mariko/calculate_timings.cpp index 02d4d11f..7133ca36 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/mariko/calculate_timings.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/mariko/calculate_timings.cpp @@ -34,8 +34,8 @@ namespace ams::ldr::hoc::pcv::mariko { latency += index * latencyStep; } - static u32 GetMaxLatencyIndex(volatile u32 *latencyArray, u32 latencySize) { - u32 maxIndex = 0; + static s32 GetMaxLatencyIndex(volatile u32 *latencyArray, u32 latencySize) { + s32 maxIndex = -1; for (u32 i = 0; i < latencySize; ++i) { if (latencyArray[i]) { maxIndex = i; @@ -65,18 +65,18 @@ namespace ams::ldr::hoc::pcv::mariko { } void HandleLatency(u32 freq) { - static u32 rlIndexMax = GetMaxLatencyIndex(C.readLatency, std::size(C.readLatency)); - static u32 wlIndexMax = GetMaxLatencyIndex(C.writeLatency, std::size(C.writeLatency)); + static s32 rlIndexMax = GetMaxLatencyIndex(C.readLatency, std::size(C.readLatency)); + static s32 wlIndexMax = GetMaxLatencyIndex(C.writeLatency, std::size(C.writeLatency)); constexpr u32 ReadLatencyStep = 4; constexpr u32 WriteLatencyStep = 2; bool autoLatencyRead = false, autoLatencyWrite = false; - if (rlIndexMax == 0) { + if (rlIndexMax == -1) { AutoLatency(RL, freq, ReadLatencyStep); autoLatencyRead = true; } - if (wlIndexMax == 0) { + if (wlIndexMax == -1) { AutoLatency(WL, freq, WriteLatencyStep); autoLatencyWrite = true; } @@ -120,6 +120,7 @@ namespace ams::ldr::hoc::pcv::mariko { } } + /* DBI is always enabled. */ mrw2 = static_cast(((rlIndex & 0x7) | ((wlIndex & 0x7) << 3) | ((0 & 0x1) << 6))); }