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 fc6ae8f8..70fd9055 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,10 +120,10 @@ namespace ams::ldr::hoc::pcv::erista { CalculateMrw2(); tR2P = CEIL((RL * 0.426) - 2.0); - tR2W = FLOOR(FLOOR((5.0 / tCK_avg) + ((FLOOR(48.0 / WL) - 0.478) * 3.0)) / 1.501) + RL - (C.t6_tRTW * 3) + finetRTW; + tR2W = (2 * WL) + (3 * FLOOR(48.0 / WL)) - 2 + FLOOR((5.6563 / tCK_avg) + 0.2575) - (C.t6_tRTW * 3) + finetRTW; tW2P = (CEIL(WL * 1.7303) * 2) - 5; - tWTPDEN = CEIL(((1.803 / tCK_avg) + MAX(RL + (2.694 / tCK_avg), static_cast(tW2P))) + (BL / 2)); + 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; wdv = WL; @@ -134,8 +134,8 @@ namespace ams::ldr::hoc::pcv::erista { u32 obdlyLow = MAX(WL - FLOOR((126.0 / CEIL(tCK_avg + 8.601))), 0.0); obdly = PACK_U32_NIBBLE_HIGH_BYTE_LOW(obdlyHigh, obdlyLow); - pdex2rw = CEIL((CEIL(12.335 - tCK_avg) + (7.430 / tCK_avg) - CEIL(tCK_avg * 11.361))); - tCLKSTOP = FLOOR(MIN(8.488 / tCK_avg, 23.0)) + 8.0; + pdex2rw = CEIL((7.5 / tCK_avg) + 0.998) + FLOOR(1.75 / tCK_avg) + FLOOR(1.0 / tCK_avg); + tCLKSTOP = FLOOR(MIN(8.4996 / tCK_avg, 23.0)) + 7.0 + MIN(CEIL(1.75 / tCK_avg) - 3.0, 1.0); const double tMMRI = tRCD + (tCK_avg * 3); pdex2mrr = tMMRI + 10; 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 6b2d4321..d1ea3a9b 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 @@ -94,7 +94,7 @@ namespace ams::ldr::hoc::pcv::erista { WRITE_PARAM_ALL_REG(table, emc_tfaw, GET_CYCLE_CEIL(tFAW)); WRITE_PARAM_ALL_REG(table, emc_trpab, MIN(GET_CYCLE_CEIL(tRPab), static_cast(0x3F))); WRITE_PARAM_ALL_REG(table, emc_tckesr, GET_CYCLE_CEIL(tSR)); - WRITE_PARAM_ALL_REG(table, emc_tcke, GET_CYCLE_CEIL(7.425) + 2); + WRITE_PARAM_ALL_REG(table, emc_tcke, GET_CYCLE_CEIL(tXP) + MIN(GET_CYCLE_CEIL(1.75) - 2, 2u)); WRITE_PARAM_ALL_REG(table, emc_tpd, GET_CYCLE_CEIL(tXP)); WRITE_PARAM_ALL_REG(table, emc_tclkstop, tCLKSTOP); WRITE_PARAM_ALL_REG(table, emc_r2p, tR2P); @@ -109,11 +109,11 @@ namespace ams::ldr::hoc::pcv::erista { WRITE_PARAM_ALL_REG(table, emc_dyn_self_ref_control, dyn_self_ref_control); WRITE_PARAM_ALL_REG(table, emc_pdex2wr, pdex2rw); WRITE_PARAM_ALL_REG(table, emc_pdex2rd, pdex2rw); - WRITE_PARAM_ALL_REG(table, emc_pchg2pden, GET_CYCLE_CEIL(1.763)); + 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, GET_CYCLE_CEIL(1.05)); - WRITE_PARAM_ALL_REG(table, emc_act2pden, GET_CYCLE_CEIL(14.0)); - WRITE_PARAM_ALL_REG(table, emc_cke2pden, GET_CYCLE_CEIL(8.499)); + 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_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); 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 6e2c6d08..5ee68ad0 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 @@ -164,27 +164,26 @@ namespace ams::ldr::hoc::pcv::mariko { tRPab = tRPpb + 3; tR2P = CEIL((RL * 0.426) - 2.0); - tR2W = RL + 2 * (FLOOR(48.0 / WL) - 2) + CEIL((5.1022 / tCK_avg) + 0.2750) - FLOOR((1.4996 / tCK_avg) + 0.0020) - (tRTW * 3) + finetRTW; - tRTM = FLOOR((10.0 + RL) + (3.502 / tCK_avg)) + FLOOR(7.489 / tCK_avg); + tR2W = RL + 2 * (FLOOR(48.0 / WL) - 2) + CEIL((5.106 / tCK_avg) + 0.260) - FLOOR((1.5 / tCK_avg) + 0.002) - (tRTW * 3) + finetRTW; + tRTM = FLOOR((10.0 + RL) + (3.500 / tCK_avg)) + FLOOR(7.498 / tCK_avg); tRATM = CEIL((tRTM - 10.0) + (RL * 0.426)); - rdv = RL + FLOOR((5.105 / tCK_avg) + 17.017); + rdv = RL + FLOOR((5.109 / tCK_avg) + 17.003); qpop = rdv - 14; - u32 quseSum = CEIL(((4.897 / tCK_avg) - FLOOR(2.538 / tCK_avg)) + 3.782) - + FLOOR(RL + ((5.082 / tCK_avg) + FLOOR(2.560 / tCK_avg))) - CEIL(4.820 / tCK_avg); - quse_width = CEIL(MAX((4.7760 / tCK_avg) + 4.110, (5.1060 / tCK_avg) + 3.170)) - FLOOR(2.55 / tCK_avg); + u32 quseSum = RL + FLOOR(5.110 / tCK_avg) + 4; + quse_width = CEIL(MAX((4.8210 / tCK_avg) + 4.001, (5.0860 / tCK_avg) + 3.235)) - FLOOR(2.55 / tCK_avg); quse = quseSum - quse_width; - einput_duration = FLOOR(9.936 / tCK_avg) + 5.0 + quse_width; - einput = quse - CEIL(9.928 / tCK_avg); - u32 qrst_duration = FLOOR((1.375 / tCK_avg) + 4.555); + einput_duration = FLOOR(9.994 / tCK_avg) + 5.0 + quse_width; + einput = quse - (FLOOR(9.994 / 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); tW2P = (CEIL(WL * 1.7303) * 2) - 5; - tWTPDEN = CEIL(((1.803 / tCK_avg) + MAX(RL + (2.694 / 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; - tWTM = CEIL(WL + ((7.570 / tCK_avg) + 8.753)); + tWTPDEN = CEIL(((1.800 / tCK_avg) + MAX(RL + (2.550 / tCK_avg), static_cast(tW2P))) + (BL / 2)); + tW2R = FLOOR(MAX((5.087 / tCK_avg) + 1.030, WL - MAX(-CEIL(0.258 * (WL - RL)), 1.964)) * 1.964) + WL - CEIL(tWTR / tCK_avg) + finetWTR; + tWTM = CEIL(WL + ((7.498 / tCK_avg) + 9.005)); tWATM = (tWTM + (FLOOR(WL / 0.816) * 2.0)) - 4.0; wdv = WL; @@ -195,9 +194,9 @@ namespace ams::ldr::hoc::pcv::mariko { u32 obdlyLow = MAX(WL - FLOOR((126.0 / CEIL(tCK_avg + 8.601))), 0.0); obdly = PACK_U32_NIBBLE_HIGH_BYTE_LOW(obdlyHigh, obdlyLow); - pdex2rw = CEIL((7.4870 / tCK_avg) + 1.0257) + FLOOR((1.7410 / tCK_avg) + 0.03) + FLOOR(1.0 / tCK_avg); + pdex2rw = CEIL((7.5 / tCK_avg) + 0.998) + FLOOR(1.75 / tCK_avg) + FLOOR(1.0 / tCK_avg); - tCLKSTOP = FLOOR(MIN(8.488 / tCK_avg, 23.0)) + 8.0; + tCLKSTOP = FLOOR(MIN(8.4996 / tCK_avg, 23.0)) + 7.0 + MIN(CEIL(1.75 / tCK_avg) - 3.0, 1.0); u32 tMMRI = tRCD + (tCK_avg * 3); pdex2mrr = tMMRI + 10; diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/mariko/pcv_mariko_mtc.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/mariko/pcv_mariko_mtc.cpp index 36d1392d..dc1b3402 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/mariko/pcv_mariko_mtc.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/mariko/pcv_mariko_mtc.cpp @@ -79,7 +79,7 @@ namespace ams::ldr::hoc::pcv::mariko { WRITE_PARAM_ALL_REG(table, emc_tfaw, GET_CYCLE_CEIL(tFAW)); WRITE_PARAM_ALL_REG(table, emc_trpab, MIN(GET_CYCLE_CEIL(tRPab), static_cast(0x3F))); WRITE_PARAM_ALL_REG(table, emc_tckesr, GET_CYCLE_CEIL(tSR)); - WRITE_PARAM_ALL_REG(table, emc_tcke, GET_CYCLE_CEIL(tXP) + 2); + WRITE_PARAM_ALL_REG(table, emc_tcke, GET_CYCLE_CEIL(tXP) + MIN(GET_CYCLE_CEIL(1.75) - 2, 2u)); WRITE_PARAM_ALL_REG(table, emc_tpd, GET_CYCLE_CEIL(tXP)); WRITE_PARAM_ALL_REG(table, emc_tclkstop, tCLKSTOP); WRITE_PARAM_ALL_REG(table, emc_r2p, tR2P); @@ -98,11 +98,11 @@ namespace ams::ldr::hoc::pcv::mariko { WRITE_PARAM_ALL_REG(table, emc_dyn_self_ref_control, dyn_self_ref_control); WRITE_PARAM_ALL_REG(table, emc_pdex2wr, pdex2rw); WRITE_PARAM_ALL_REG(table, emc_pdex2rd, pdex2rw); - WRITE_PARAM_ALL_REG(table, emc_pchg2pden, GET_CYCLE_CEIL(1.763)); + 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, GET_CYCLE_CEIL(1.75) - 2); + 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(14.0)); - WRITE_PARAM_ALL_REG(table, emc_cke2pden, GET_CYCLE_CEIL(8.499)); + 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); WRITE_PARAM_ALL_REG(table, emc_einput, einput);