From aae77e058523d87e291e6b086df1f732b12abfa5 Mon Sep 17 00:00:00 2001 From: souldbminersmwc Date: Thu, 30 Jul 2026 16:29:19 -0400 Subject: [PATCH] more timings --- .../loader/source/oc/mtc_timing_value.hpp | 10 +++++++++ .../pcv/erista/calculate_timings_erista.cpp | 15 ++++++++++++- .../source/oc/pcv/erista/pcv_erista_mtc.cpp | 21 ++++++++----------- .../pcv/mariko/calculate_timings_mariko.cpp | 4 ++-- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/mtc_timing_value.hpp b/Source/Atmosphere/stratosphere/loader/source/oc/mtc_timing_value.hpp index 173f21b7..29d79ab9 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/mtc_timing_value.hpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/mtc_timing_value.hpp @@ -94,6 +94,16 @@ namespace ams::ldr::hoc { inline u32 tWTPDEN; inline u32 tW2R; + inline u32 rdv; + inline u32 qpop; + inline u32 quse_width; + inline u32 quse; + inline u32 einput_duration; + inline u32 einput; + inline u32 qrst; + inline u32 ibdly; + inline u32 qsafe; + inline u32 wdv; inline u32 wsv; inline u32 wev; diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/erista/calculate_timings_erista.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/erista/calculate_timings_erista.cpp index 70fd9055..ba77b3e1 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/erista/calculate_timings_erista.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/erista/calculate_timings_erista.cpp @@ -120,12 +120,25 @@ namespace ams::ldr::hoc::pcv::erista { CalculateMrw2(); tR2P = CEIL((RL * 0.426) - 2.0); - tR2W = (2 * WL) + (3 * FLOOR(48.0 / WL)) - 2 + FLOOR((5.6563 / tCK_avg) + 0.2575) - (C.t6_tRTW * 3) + finetRTW; + tR2W = (2 * WL) + (2 * FLOOR(48.0 / WL)) + 4 + FLOOR((5.653 / tCK_avg) + 0.265) - FLOOR(2.0 / tCK_avg) - (C.t6_tRTW * 3) + finetRTW; tW2P = (CEIL(WL * 1.7303) * 2) - 5; tWTPDEN = CEIL(((1.800 / tCK_avg) + MAX(RL + (2.550 / tCK_avg), static_cast(tW2P))) + (BL / 2)); tW2R = FLOOR(MAX((5.020 / tCK_avg) + 1.130, WL - MAX(-CEIL(0.258 * (WL - RL)), 1.964)) * 1.964) + WL - CEIL(tWTR / tCK_avg) + finetWTR; + rdv = RL + FLOOR((5.678 / tCK_avg) + 18.962); + qpop = rdv - 16; + u32 quseSum = RL + FLOOR(5.659 / tCK_avg) + 4; + quse_width = CEIL((5.363 / tCK_avg) + 4.020) - FLOOR(3.100 / tCK_avg); + quse = quseSum - quse_width; + einput_duration = FLOOR(9.998 / tCK_avg) + 5.0 + quse_width; + einput = quse - (FLOOR(9.998 / tCK_avg) + 1); + u32 qrst_duration = FLOOR((1.398 / tCK_avg) + 4.5); + u32 qrstLow = MAX(static_cast(einput - qrst_duration - 2), static_cast(0)); + qrst = PACK_U32(qrst_duration, qrstLow); + ibdly = PACK_U32_NIBBLE_HIGH_BYTE_LOW(1, quse - qrst_duration - 2.0); + qsafe = (einput_duration + 3) + MAX(MIN(qrstLow * rdv, qrst_duration + qrst_duration), einput); + wdv = WL; wsv = WL - 2; wev = 0xA + (WL - 14); diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/erista/pcv_erista_mtc.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/erista/pcv_erista_mtc.cpp index d1ea3a9b..e1144184 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/erista/pcv_erista_mtc.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/erista/pcv_erista_mtc.cpp @@ -112,13 +112,12 @@ namespace ams::ldr::hoc::pcv::erista { WRITE_PARAM_ALL_REG(table, emc_pchg2pden, GET_CYCLE_CEIL(1.75)); WRITE_PARAM_ALL_REG(table, emc_ar2pden, GET_CYCLE_CEIL(1.75)); WRITE_PARAM_ALL_REG(table, emc_pdex2cke, MAX(GET_CYCLE_CEIL(1.75) - 2, 2u)); - WRITE_PARAM_ALL_REG(table, emc_act2pden, GET_CYCLE_CEIL(1.75)); + WRITE_PARAM_ALL_REG(table, emc_act2pden, GET_CYCLE_CEIL(14.0)); WRITE_PARAM_ALL_REG(table, emc_cke2pden, GET_CYCLE_CEIL(8.5)); WRITE_PARAM_ALL_REG(table, emc_pdex2mrr, GET_CYCLE_CEIL(pdex2mrr)); WRITE_PARAM_ALL_REG(table, emc_rw2pden, tWTPDEN); /* Accept imperfection or prepare for suffering. */ - // #if defined(AMS_BUILD_FOR_AUDITING) || defined(AMS_BUILD_FOR_DEBUGGING) // WRITE_PARAM_ALL_REG(table, emc_einput, einput); // WRITE_PARAM_ALL_REG(table, emc_einput_duration, einput_duration); WRITE_PARAM_ALL_REG(table, emc_obdly, obdly); @@ -133,17 +132,15 @@ namespace ams::ldr::hoc::pcv::erista { // WRITE_PARAM_ALL_REG(table, emc_tr_qrst, qrst); // WRITE_PARAM_ALL_REG(table, emc_qsafe, qsafe); // WRITE_PARAM_ALL_REG(table, emc_tr_qsafe, qsafe); - // WRITE_PARAM_ALL_REG(table, emc_tr_qpop, qpop); - // WRITE_PARAM_ALL_REG(table, emc_qpop, qpop); - // WRITE_PARAM_ALL_REG(table, emc_rdv, rdv); - // WRITE_PARAM_ALL_REG(table, emc_tr_rdv_mask, rdv + 2); - // WRITE_PARAM_ALL_REG(table, emc_rdv_early, rdv - 2); - // WRITE_PARAM_ALL_REG(table, emc_rdv_early_mask, rdv); - // WRITE_PARAM_ALL_REG(table, emc_rdv_mask, rdv + 2); - // WRITE_PARAM_ALL_REG(table, emc_tr_rdv, rdv); + WRITE_PARAM_ALL_REG(table, emc_tr_qpop, qpop); + WRITE_PARAM_ALL_REG(table, emc_qpop, qpop); + WRITE_PARAM_ALL_REG(table, emc_rdv, rdv); + WRITE_PARAM_ALL_REG(table, emc_tr_rdv_mask, rdv + 2); + WRITE_PARAM_ALL_REG(table, emc_rdv_early, rdv - 2); + WRITE_PARAM_ALL_REG(table, emc_rdv_early_mask, rdv); + WRITE_PARAM_ALL_REG(table, emc_rdv_mask, rdv + 2); + WRITE_PARAM_ALL_REG(table, emc_tr_rdv, rdv); table->emc_mrw2 = (table->emc_mrw2 & ~0xFFu) | static_cast(mrw2); - // table->dram_timings.rl = RL; - // #endif constexpr double MC_ARB_DIV = 4.0; constexpr u32 MC_ARB_SFA = 2; diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/mariko/calculate_timings_mariko.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/mariko/calculate_timings_mariko.cpp index e4ce9a01..d63f5bfb 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/mariko/calculate_timings_mariko.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/mariko/calculate_timings_mariko.cpp @@ -173,8 +173,8 @@ namespace ams::ldr::hoc::pcv::mariko { u32 quseSum = RL + FLOOR(5.110 / tCK_avg) + 4; quse_width = CEIL(MAX((4.7980 / tCK_avg) + 4.046, (5.0680 / tCK_avg) + 3.276)) - FLOOR(2.55 / tCK_avg); quse = quseSum - quse_width; - einput_duration = FLOOR(9.994 / tCK_avg) + 5.0 + quse_width; - einput = quse - (FLOOR(9.994 / tCK_avg) + 1); + einput_duration = FLOOR(9.998 / tCK_avg) + 5.0 + quse_width; + einput = quse - (FLOOR(9.998 / tCK_avg) + 1); u32 qrst_duration = FLOOR((1.398 / tCK_avg) + 4.5); u32 qrstLow = MAX(static_cast(einput - qrst_duration - 2), static_cast(0)); qrst = PACK_U32(qrst_duration, qrstLow);