1866/1600 support
This commit is contained in:
@@ -27,29 +27,6 @@ namespace ams::ldr::oc::pcv::mariko {
|
||||
return 0x1A;
|
||||
}
|
||||
|
||||
/* TODO: This function is quite uggly, refactor! */
|
||||
void CalculateMiscTimings() {
|
||||
einput_duration = 0x1C;
|
||||
|
||||
for (u32 i = 0; i < g_misc_table_size; i++) {
|
||||
const auto& e = g_misc_table[i];
|
||||
if (C.marikoEmcMaxClock >= e.min_freq) {
|
||||
if (e.einput) einput_duration = e.einput;
|
||||
}
|
||||
}
|
||||
|
||||
rext = GetRext();
|
||||
}
|
||||
|
||||
void CalculateIbdly() {
|
||||
/* Ibdly is so inconsistent, I am using the most common value and then checking with a lookup table. */
|
||||
ibdly = 0x1000001D + C.mem_burst_read_latency;
|
||||
|
||||
if (auto patch = FindIbdlyPatch()) {
|
||||
ibdly += patch->adjust;
|
||||
}
|
||||
}
|
||||
|
||||
void CalculateTWTPDEN() {
|
||||
tWTPDEN = tW2P + 1 + CEIL(tDQSS_max / tCK_avg) + CEIL(tDQS2DQ_max / tCK_avg) + 6;
|
||||
if (C.marikoEmcMaxClock >= 2'233'000 && C.marikoEmcMaxClock < 2'533'000) tWTPDEN++;
|
||||
@@ -64,19 +41,6 @@ namespace ams::ldr::oc::pcv::mariko {
|
||||
}
|
||||
}
|
||||
|
||||
void CalculateQsafe() {
|
||||
qsafe = ROUND((C.marikoEmcMaxClock / 1000.0) / 138.0 + 37.4) + C.mem_burst_read_latency;
|
||||
if (auto patch = FindQsafePatch()) {
|
||||
qsafe += patch->adjust;
|
||||
}
|
||||
}
|
||||
|
||||
void CalculateQpop() {
|
||||
qpop = FLOOR(((C.marikoEmcMaxClock / 1000.0) - 2133 + 167) / 200.0) + 0x2D + C.mem_burst_read_latency;
|
||||
|
||||
if (C.marikoEmcMaxClock >= 3'133'000) qpop++;
|
||||
}
|
||||
|
||||
void CalculatePdex2rw() {
|
||||
double freq_mhz = C.marikoEmcMaxClock / 1000.0;
|
||||
|
||||
@@ -99,15 +63,42 @@ namespace ams::ldr::oc::pcv::mariko {
|
||||
}
|
||||
}
|
||||
|
||||
void CalculateMrw2() {
|
||||
static const u8 rlMapDBI[8] = {
|
||||
6, 12, 16, 22, 28, 32, 36, 40
|
||||
};
|
||||
|
||||
static const u8 wlMapSetA[8] = {
|
||||
4, 6, 8, 10, 12, 14, 16, 18
|
||||
};
|
||||
|
||||
u32 rlIndex = 0;
|
||||
u32 wlIndex = 0;
|
||||
|
||||
for (u32 i = 0; i < std::size(rlMapDBI); ++i) {
|
||||
if (rlMapDBI[i] == RL_DBI) {
|
||||
rlIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < std::size(wlMapSetA); ++i) {
|
||||
if (wlMapSetA[i] == WL) {
|
||||
wlIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mrw2 = static_cast<u8>(((rlIndex & 0x7) | ((wlIndex & 0x7) << 3) | ((0 & 0x1) << 6)));
|
||||
}
|
||||
|
||||
void CalculateTimings() {
|
||||
CalculateMiscTimings();
|
||||
CalculateIbdly();
|
||||
rext = GetRext();
|
||||
CalculateTWTPDEN();
|
||||
CalculateTR2W();
|
||||
CalculateQsafe();
|
||||
CalculateQpop();
|
||||
CalculatePdex2rw();
|
||||
CalculateCke2pden();
|
||||
CalculateMrw2();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,34 +19,6 @@
|
||||
|
||||
namespace ams::ldr::oc::pcv::mariko {
|
||||
|
||||
const MiscTimings g_misc_table[] = {
|
||||
{1'866'000, 0x20, },
|
||||
{2'133'000, 0x24, },
|
||||
{2'166'000, 0, },
|
||||
{2'233'000, 0x25, },
|
||||
{2'300'000, 0x26, },
|
||||
{2'333'000, 0x27, },
|
||||
{2'366'000, 0x26, },
|
||||
{2'433'000, 0x27, },
|
||||
{2'466'000, 0x2A, },
|
||||
{2'500'000, 0x28, },
|
||||
{2'533'000, 0x29, },
|
||||
{2'566'000, 0, },
|
||||
{2'633'000, 0x2A, },
|
||||
{2'700'000, 0x2B, },
|
||||
{2'733'000, 0x2C, },
|
||||
{2'766'000, 0x2B, },
|
||||
{2'833'000, 0x2C, },
|
||||
{2'866'000, 0, },
|
||||
{2'900'000, 0, },
|
||||
{2'933'000, 0x2E, },
|
||||
{2'966'000, 0, },
|
||||
{3'033'000, 0x2F, },
|
||||
{3'133'000, 0x31, },
|
||||
};
|
||||
|
||||
const u32 g_misc_table_size = sizeof(g_misc_table) / sizeof(g_misc_table[0]);
|
||||
|
||||
const ReplacePatch g_rext_table[] = {
|
||||
{2'133'000, 0x1A}, {2'166'000, 0x19}, {2'200'000, 0x19},
|
||||
{2'233'000, 0x19}, {2'266'000, 0x1A}, {2'300'000, 0x1B},
|
||||
@@ -70,34 +42,6 @@ namespace ams::ldr::oc::pcv::mariko {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const AdjustPatch g_ibdly_patches[] = {
|
||||
{2'133'000, -2},
|
||||
{2'166'000, -1},
|
||||
{2'200'000, -1},
|
||||
{2'233'000, -1},
|
||||
{2'266'000, -1},
|
||||
{2'300'000, -2},
|
||||
{2'333'000, -2},
|
||||
{2'500'000, -1},
|
||||
{2'533'000, -2},
|
||||
{2'566'000, -1},
|
||||
{2'600'000, -1},
|
||||
{2'633'000, -1},
|
||||
{2'666'000, -1},
|
||||
{2'700'000, -2},
|
||||
{2'733'000, -2},
|
||||
{2'933'000, -1},
|
||||
};
|
||||
|
||||
const u32 g_ibdly_table_size = sizeof(g_ibdly_patches) / sizeof(g_ibdly_patches[0]);
|
||||
|
||||
const AdjustPatch *FindIbdlyPatch() {
|
||||
for (u32 i = 0; i < g_ibdly_table_size; i++)
|
||||
if (g_ibdly_patches[i].freq == C.marikoEmcMaxClock)
|
||||
return &g_ibdly_patches[i];
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const AdjustPatch g_tr2w_patches[] = {
|
||||
{2'500'000, 1},
|
||||
{2'533'000, 1},
|
||||
@@ -116,37 +60,6 @@ namespace ams::ldr::oc::pcv::mariko {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const AdjustPatch g_qsafe_patches[] = {
|
||||
{2'166'000, 1},
|
||||
{2'200'000, 1},
|
||||
{2'500'000, -1},
|
||||
{2'533'000, -1},
|
||||
{2'666'000, -1},
|
||||
{2'700'000, -1},
|
||||
{2'733'000, -1},
|
||||
{2'800'000, -1},
|
||||
{2'833'000, -1},
|
||||
{2'866'000, -1},
|
||||
{2'900'000, -1},
|
||||
{2'933'000, -2},
|
||||
{2'966'000, -1},
|
||||
{3'000'000, -1},
|
||||
{3'033'000, -1},
|
||||
{3'066'000, -2},
|
||||
{3'100'000, -2},
|
||||
{3'166'000, -1},
|
||||
{3'200'000, -1},
|
||||
};
|
||||
|
||||
const u32 g_qsafe_table_size = sizeof(g_qsafe_patches) / sizeof(g_qsafe_patches[0]);
|
||||
|
||||
const AdjustPatch *FindQsafePatch() {
|
||||
for (u32 i = 0; i < g_qsafe_table_size; i++)
|
||||
if (g_qsafe_patches[i].freq == C.marikoEmcMaxClock)
|
||||
return &g_qsafe_patches[i];
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const AdjustPatch g_pdex2rw_patches[] = {
|
||||
{2'166'000, 1},
|
||||
{2'300'000, 1},
|
||||
|
||||
@@ -33,18 +33,10 @@ namespace ams::ldr::oc::pcv::mariko {
|
||||
s32 adjust;
|
||||
};
|
||||
|
||||
extern const AdjustPatch g_ibdly_patches[];
|
||||
extern const u32 g_ibdly_table_size;
|
||||
const AdjustPatch *FindIbdlyPatch();
|
||||
|
||||
extern const AdjustPatch g_tr2w_patches[];
|
||||
extern const u32 g_tr2w_table_size;
|
||||
const AdjustPatch *FindTR2WPatch();
|
||||
|
||||
extern const AdjustPatch g_qsafe_patches[];
|
||||
extern const u32 g_qsafe_table_size;
|
||||
const AdjustPatch *FindQsafePatch();
|
||||
|
||||
extern const AdjustPatch g_pdex2rw_patches[];
|
||||
extern const u32 g_pdex2rw_table_size;
|
||||
const AdjustPatch *FindPdex2rwPatch();
|
||||
@@ -53,12 +45,4 @@ namespace ams::ldr::oc::pcv::mariko {
|
||||
extern const u32 g_cke2pden_table_size;
|
||||
const AdjustPatch *FindCke2pdenPatch();
|
||||
|
||||
struct MiscTimings {
|
||||
u32 min_freq;
|
||||
u32 einput;
|
||||
};
|
||||
|
||||
extern const MiscTimings g_misc_table[];
|
||||
extern const u32 g_misc_table_size;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user