diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/customize.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/customize.cpp index eaa585fb..4bdd3dcd 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/customize.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/customize.cpp @@ -15,7 +15,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - +// ram timing defines +#define MAX(A, B) std::max(A, B) +#define MIN(A, B) std::min(A, B) +#define CEIL(A) std::ceil(A) +#define FLOOR(A) std::floor(A) #include "customize.hpp" namespace ams::ldr::oc { @@ -96,6 +100,10 @@ volatile CustomizeTable C = { .commonGpuVoltOffset = 0, .marikoEmcDvbShift = 0, + // TODO - Don't use defines for these! + +#define nCK_erista 1000'000. / C.eristaEmcMaxClock; +#define nCK_mariko 1000'000. / C.marikoEmcMaxClock; .BL = 16, .tRFCpb = 140, @@ -113,27 +121,27 @@ volatile CustomizeTable C = { .tDQS2DQ_max = 0.8, .tDQSQ = 0.18, -.tWTR = 10, -.tRTP = 7.5, -.tWR = 18, +.tWTR = MAX(10, 8 * nCK_mariko), +.tRTP = 7.5, // Cannot find concrete value for this timing +.tWR = MAX(10, 4 * nCK_mariko), .tR2REF = 25.5, -.tRCD = 18, -.tRRD = 10, +.tRCD = 20, // Cannot find concrete value for this timing +.tRRD = 10, // Cannot find concrete value for this timing .tREFpb = 488, -.tXP = 10, -.tCMDCKE = 1.75, -.tMRWCKEL = 14, -.tCKELCS = 5, +.tXP = MAX(7.5, 5 * nCK_mariko), +.tCMDCKE = MAX(1.75, 3 * nCK_mariko), +.tMRWCKEL = MAX(14, 10 * nCK_mariko), +.tCKELCS = MAX(5, 5 * nCK_mariko), .tCSCKEH = 1.75, -.tXSR = 287.5, -.tCKE = 7.5, +.tXSR = MAX(C.tRFcpb + 7.5, 5 * nCK_mariko), +.tCKE = MAX(7.5, 4 * nCK_mariko), -.tSR = 15, -.tFAW = 40, +.tSR = MAX(15, 3 * nCK_mariko), +.tFAW = 30, -.tCKCKEH = 1.75, +.tCKCKEH = MAX(1.75, 3 * nCK_mariko), .WL = 14, .RL = 32, diff --git a/preset/presetMicronWTB.txt b/preset/presetMicronWTB.txt index df813eaf..4dc3b216 100644 --- a/preset/presetMicronWTB.txt +++ b/preset/presetMicronWTB.txt @@ -1,41 +1,41 @@ OCS2-MICRON-WTB-PRESET -.BL = 32, +.BL = 16, .tRFCpb = 140, .tRFCab = 280, -.tRAS = 27, +.tRAS = 42, .tRPpb = 18, .tRPab = 21, -.tRC = 38, +.tRC = 60, .tDQSCK_min = 1.5, .tDQSCK_max = 3.5, -.tWPRE = 2.0, -.tRPST = 0.5, +.tWPRE = 1.8, +.tRPST = 0.4, .tDQSS_max = 1.25, -.tDQS2DQ_max = 0.7, +.tDQS2DQ_max = 0.8, .tDQSQ = 0.18, -.tWTR = 10, -.tRTP = 7.5, -.tWR = 18, +.tWTR = MAX(10, 8 * nCK_mariko), +.tRTP = 7.5, // Cannot find concrete value for this timing +.tWR = MAX(10, 4 * nCK_mariko), .tR2REF = 25.5, -.tRCD = 18, -.tRRD = 18, +.tRCD = 20, // Cannot find concrete value for this timing +.tRRD = 10, // Cannot find concrete value for this timing .tREFpb = 488, -.tXP = 7.5, -.tCMDCKE = 1.75, -.tMRWCKEL = 14, -.tCKELCS = 5, +.tXP = MAX(7.5, 5 * nCK_mariko), +.tCMDCKE = MAX(1.75, 3 * nCK_mariko), +.tMRWCKEL = MAX(14, 10 * nCK_mariko), +.tCKELCS = MAX(5, 5 * nCK_mariko), .tCSCKEH = 1.75, -.tXSR = 287.5, -.tCKE = 5, +.tXSR = MAX(C.tRFcpb + 7.5, 5 * nCK_mariko), +.tCKE = MAX(7.5, 4 * nCK_mariko), -.tSR = 15, -.tFAW = 54, +.tSR = MAX(15, 3 * nCK_mariko), +.tFAW = 30, -.tCKCKEH = 1.75, +.tCKCKEH = MAX(1.75, 3 * nCK_mariko), -.WL = 15, -.RL = 30, \ No newline at end of file +.WL = 14, +.RL = 32,