From e7ac97d436b19f2ce4abf6dba6baf76fba990f83 Mon Sep 17 00:00:00 2001 From: hanabbi Date: Wed, 6 Sep 2023 20:12:28 +0900 Subject: [PATCH] loader: add more steps in dvb table --- .../loader/source/oc/pcv/pcv_mariko.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp index cf1a317b..c417974b 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp @@ -451,6 +451,7 @@ Result MemFreqDvbTable(u32* ptr) { if (C.marikoEmcMaxClock <= EmcClkOSLimit) R_SKIP(); + u32 voltAdd = 25*C.marikoEmcDvbShift; if (C.marikoEmcMaxClock < 1862400) { std::memcpy(new_start, default_end, sizeof(emc_dvb_dvfs_table_t)); } else if (C.marikoEmcMaxClock < 2131200){ @@ -460,13 +461,22 @@ Result MemFreqDvbTable(u32* ptr) { emc_dvb_dvfs_table_t oc_table = { 2131200, { 725, 700, 675, } }; std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); } else if (C.marikoEmcMaxClock < 2665600){ - emc_dvb_dvfs_table_t oc_table = { 2400000, { s32(750+25*C.marikoEmcDvbShift), s32(725+25*C.marikoEmcDvbShift), s32(700+25*C.marikoEmcDvbShift), } }; + emc_dvb_dvfs_table_t oc_table = { 2400000, { s32(750+voltAdd), s32(725+voltAdd), s32(700+voltAdd), } }; + std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); + } else if (C.marikoEmcMaxClock < 2931200){ + emc_dvb_dvfs_table_t oc_table = { 2665600, { s32(775+voltAdd), s32(750+voltAdd), s32(725+voltAdd), } }; + std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); + } else if (C.marikoEmcMaxClock < 3200000){ + emc_dvb_dvfs_table_t oc_table = { 2931200, { s32(800+voltAdd), s32(775+voltAdd), s32(750+voltAdd), } }; std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); } else { - emc_dvb_dvfs_table_t oc_table = { 2665600, { s32(775+25*C.marikoEmcDvbShift), s32(750+25*C.marikoEmcDvbShift), s32(725+25*C.marikoEmcDvbShift), } }; + emc_dvb_dvfs_table_t oc_table = { 3200000, { s32(800+voltAdd), s32(800+voltAdd), s32(775+voltAdd), } }; std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); } new_start->freq = C.marikoEmcMaxClock; + /* Max dvfs entry is 32, but HOS doesn't seem to boot if exact freq doesn't exist in dvb table, + reason why it's like this + */ R_SUCCEED(); }