add max preset for REFRESH, set limit
This commit is contained in:
@@ -23,7 +23,7 @@ namespace ams::ldr::oc {
|
|||||||
|
|
||||||
const std::array<u32, 5> tWTR_values = {10, 9, 8, 7, 6};
|
const std::array<u32, 5> tWTR_values = {10, 9, 8, 7, 6};
|
||||||
|
|
||||||
const std::array<u32, 4> tREFpb_values = {488, 976, 1952, 3400};
|
const std::array<u32, 5> tREFpb_values = {488, 976, 1952, 3256, 9999};
|
||||||
|
|
||||||
const std::array<u32, 6> tWL_values = {14, 12, 10, 8, 6, 4};
|
const std::array<u32, 6> tWL_values = {14, 12, 10, 8, 6, 4};
|
||||||
|
|
||||||
@@ -87,7 +87,8 @@ namespace ams::ldr::oc {
|
|||||||
// {REFRESH, REFRESH_LO} = max[(tREF/#_of_rows) / (emc_clk_period) - 64, (tREF/#_of_rows) / (emc_clk_period) * 97%]
|
// {REFRESH, REFRESH_LO} = max[(tREF/#_of_rows) / (emc_clk_period) - 64, (tREF/#_of_rows) / (emc_clk_period) * 97%]
|
||||||
// emc_clk_period = dram_clk / 2;
|
// emc_clk_period = dram_clk / 2;
|
||||||
// 1600 MHz: 5894, but N' set to 6176 (~4.8% margin)
|
// 1600 MHz: 5894, but N' set to 6176 (~4.8% margin)
|
||||||
const u32 REFRESH = u32(std::ceil((double(tREFpb) * C.marikoEmcMaxClock / numOfRows * 1.048 / 2 - 64))) / 4 * 4;
|
const u32 REFRESH = MIN((u32)65472, u32(std::ceil((double(tREFpb) * C.marikoEmcMaxClock / numOfRows * 1.048 / 2 - 64))) / 4 * 4);
|
||||||
|
const u32 REFBW = MIN((u32)65536, REFRESH+64);
|
||||||
// tPDEX2WR, tPDEX2RD (timing delay from exiting powerdown mode to a write/read command) in ns
|
// tPDEX2WR, tPDEX2RD (timing delay from exiting powerdown mode to a write/read command) in ns
|
||||||
// const u32 tPDEX2 = 10;
|
// const u32 tPDEX2 = 10;
|
||||||
// Exit power-down to next valid command delay
|
// Exit power-down to next valid command delay
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ void MemMtcTableAutoAdjust(MarikoMtcTable* table, const MarikoMtcTable* ref) {
|
|||||||
WRITE_PARAM_ALL_REG(table, emc_trpab, GET_CYCLE_CEIL(tRPab));
|
WRITE_PARAM_ALL_REG(table, emc_trpab, GET_CYCLE_CEIL(tRPab));
|
||||||
WRITE_PARAM_ALL_REG(table, emc_tclkstable, GET_CYCLE_CEIL(tCKCKEH));
|
WRITE_PARAM_ALL_REG(table, emc_tclkstable, GET_CYCLE_CEIL(tCKCKEH));
|
||||||
WRITE_PARAM_ALL_REG(table, emc_tclkstop, GET_CYCLE_CEIL(tCKE)+8);
|
WRITE_PARAM_ALL_REG(table, emc_tclkstop, GET_CYCLE_CEIL(tCKE)+8);
|
||||||
WRITE_PARAM_ALL_REG(table, emc_trefbw, REFRESH + 64);
|
WRITE_PARAM_ALL_REG(table, emc_trefbw, REFBW);
|
||||||
|
|
||||||
constexpr u32 MC_ARB_DIV = 4;
|
constexpr u32 MC_ARB_DIV = 4;
|
||||||
constexpr u32 MC_ARB_SFA = 2;
|
constexpr u32 MC_ARB_SFA = 2;
|
||||||
|
|||||||
@@ -375,9 +375,10 @@ var AdvTable: Array<AdvEntry> = [
|
|||||||
"<b>1</b> : 488 (Default timing)",
|
"<b>1</b> : 488 (Default timing)",
|
||||||
"<b>2</b> : 976",
|
"<b>2</b> : 976",
|
||||||
"<b>3</b> : 1952",
|
"<b>3</b> : 1952",
|
||||||
"<b>4</b> : 3256",],
|
"<b>4</b> : 3256",
|
||||||
|
"<b>4</b> : MAX",],
|
||||||
1,
|
1,
|
||||||
[0,4],
|
[0,5],
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
new AdvEntry(
|
new AdvEntry(
|
||||||
|
|||||||
Reference in New Issue
Block a user