ldr/sysclk: add 2397 erista cpu, fix cpu uv, add erista cpu max clock

This commit is contained in:
souldbminersmwc
2026-02-23 19:09:59 -05:00
parent eca6ab2297
commit 4eb222f5aa
11 changed files with 60 additions and 13 deletions

View File

@@ -222,10 +222,11 @@ volatile CustomizeTable C = {
{ 1683000, { 1168000, }, { 5100873, -279186, 4747, } }, { 1683000, { 1168000, }, { 5100873, -279186, 4747, } },
{ 1785000, { 1225000, }, { 5100873, -279186, 4747, } }, { 1785000, { 1225000, }, { 5100873, -279186, 4747, } },
{ 1887000, { 1225000, }, { 5100873, -279186, 4747, } }, { 1887000, { 1225000, }, { 5100873, -279186, 4747, } },
{ 1989000, { 1227500, }, { 5100873, -279186, 4747, } }, { 1963500, { 1227500, }, { 5100873, -279186, 4747, } },
{ 2091000, { 1256250, }, { 5100873, -279186, 4747, } }, { 2091000, { 1227500, }, { 5100873, -279186, 4747, } },
{ 2193000, { 1256250, }, { 5100873, -279186, 4747, } }, { 2193000, { 1227500, }, { 5100873, -279186, 4747, } },
{ 2295000, { 1256250, }, { 5100873, -279186, 4747, } }, { 2295000, { 1256250, }, { 5100873, -279186, 4747, } },
{ 2397000, { 1256250, }, { 5100873, -279186, 4747, } }, // Only for god speedo!
}, },
.marikoCpuDvfsTable = { .marikoCpuDvfsTable = {

View File

@@ -143,12 +143,12 @@ void SafetyCheck() {
{ C.eristaCpuBoostClock, 1020'000, 2295'000, true }, { C.eristaCpuBoostClock, 1020'000, 2295'000, true },
{ C.marikoCpuBoostClock, 1020'000, 2703'000, true }, { C.marikoCpuBoostClock, 1020'000, 2703'000, true },
{ C.commonEmcMemVolt, 912'500, 1350'000 }, // Official burst vmax for the RAMs is 1500mV { C.commonEmcMemVolt, 912'500, 1350'000 }, // Official burst vmax for the RAMs is 1500mV
{ C.eristaCpuMaxVolt, 1000, 1257 }, { C.eristaCpuMaxVolt, 1000, 1260 },
{ GET_MAX_OF_ARR(erista::maxEmcClocks), 1600'000, 2600'000 }, { GET_MAX_OF_ARR(erista::maxEmcClocks), 1600'000, 2600'000 },
{ C.marikoCpuMaxVolt, 1000, 1235 }, { C.marikoCpuMaxVolt, 1000, 1235 },
{ C.marikoEmcMaxClock, 1600'000, 3500'000 }, { C.marikoEmcMaxClock, 1600'000, 3500'000 },
{ C.marikoEmcVddqVolt, 250'000, 700'000 }, { C.marikoEmcVddqVolt, 250'000, 700'000 },
{ eristaCpuDvfsMaxFreq, 1785'000, 2295'000 }, { eristaCpuDvfsMaxFreq, 1785'000, 2397'000 },
{ marikoCpuDvfsMaxFreq, 1785'000, 2703'000 }, { marikoCpuDvfsMaxFreq, 1785'000, 2703'000 },
{ eristaGpuDvfsMaxFreq, 768'000, 1152'000 }, { eristaGpuDvfsMaxFreq, 768'000, 1152'000 },
{ marikoGpuDvfsMaxFreq, 768'000, 1536'000 }, { marikoGpuDvfsMaxFreq, 768'000, 1536'000 },

View File

@@ -218,6 +218,13 @@ namespace ams::ldr::hoc::pcv {
constexpr u32 GpuClkPllMax = 921'600'000; constexpr u32 GpuClkPllMax = 921'600'000;
constexpr u32 GpuVminOfficial = 810; constexpr u32 GpuVminOfficial = 810;
constexpr u16 CpuMinVolts[] = { 950, 850, 825, 810 };
inline bool CpuMaxVoltPatternFn(u32* ptr32) {
u32 val = *ptr32;
return (val == 1132 || val == 1170 || val == 1227);
}
static const u32 gpuVoltDvfsPattern[] = { 810, 1150, 1000, 100, 1000, 10, }; static const u32 gpuVoltDvfsPattern[] = { 810, 1150, 1000, 100, 1000, 10, };
static_assert(sizeof(gpuVoltDvfsPattern) == (sizeof(u32) * 6), "Invalid gpuVoltDvfsPattern"); static_assert(sizeof(gpuVoltDvfsPattern) == (sizeof(u32) * 6), "Invalid gpuVoltDvfsPattern");

View File

@@ -24,6 +24,21 @@
namespace ams::ldr::hoc::pcv::erista { namespace ams::ldr::hoc::pcv::erista {
Result CpuVoltRange(u32* ptr) {
u32 min_volt_got = *(ptr - 1);
for (const auto& mv : CpuMinVolts) {
if (min_volt_got != mv)
continue;
if (!C.eristaCpuMaxVolt)
R_SKIP();
PATCH_OFFSET(ptr, C.eristaCpuMaxVolt);
R_SUCCEED();
}
R_THROW(ldr::ResultInvalidCpuMinVolt());
}
Result CpuVoltDvfs(u32 *ptr) { Result CpuVoltDvfs(u32 *ptr) {
if (MatchesPattern(ptr, cpuVoltDvfsPattern, cpuVoltDvfsOffsets)) { if (MatchesPattern(ptr, cpuVoltDvfsPattern, cpuVoltDvfsOffsets)) {
if (C.eristaCpuVmin) { if (C.eristaCpuVmin) {
@@ -439,6 +454,7 @@ namespace ams::ldr::hoc::pcv::erista {
PatcherEntry<u32> patches[] = { PatcherEntry<u32> patches[] = {
{"CPU Freq Table", CpuFreqCvbTable<false>, 1, nullptr, static_cast<u32>(GetDvfsTableLastEntry(CpuCvbTableDefault)->freq)}, {"CPU Freq Table", CpuFreqCvbTable<false>, 1, nullptr, static_cast<u32>(GetDvfsTableLastEntry(CpuCvbTableDefault)->freq)},
{"CPU Volt DVFS", &CpuVoltDvfs, 1, nullptr, 825}, {"CPU Volt DVFS", &CpuVoltDvfs, 1, nullptr, 825},
{"CPU Volt Limit", &CpuVoltRange, 0, &CpuMaxVoltPatternFn},
{"CPU Volt Thermals", &CpuVoltThermals, 1, nullptr, 825}, {"CPU Volt Thermals", &CpuVoltThermals, 1, nullptr, 825},
{"CPU Volt Dfll", &CpuVoltDfll, 1, nullptr, 0xFFEAD0FF}, {"CPU Volt Dfll", &CpuVoltDfll, 1, nullptr, 0xFFEAD0FF},
{"GPU Volt DVFS", &GpuVoltDVFS, 1, nullptr, 810}, {"GPU Volt DVFS", &GpuVoltDVFS, 1, nullptr, 810},

View File

@@ -197,7 +197,7 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr
return pretty ? "Overwrite Boost Mode" : "ow_boost"; return pretty ? "Overwrite Boost Mode" : "ow_boost";
case HocClkConfigValue_EristaMaxCpuClock: case HocClkConfigValue_EristaMaxCpuClock:
return pretty ? "CPU Max Display Clock" : "cpu_max_e"; return pretty ? "CPU Max Clock" : "cpu_max_e";
case HocClkConfigValue_MarikoMaxCpuClock: case HocClkConfigValue_MarikoMaxCpuClock:
return pretty ? "CPU Max Display Clock" : "cpu_max_m"; return pretty ? "CPU Max Display Clock" : "cpu_max_m";

View File

@@ -131,10 +131,9 @@ void FreqChoiceGui::listUI()
// // this->configList->values[HocClkConfigValue_MarikoMaxMemClock] < mhz) // // this->configList->values[HocClkConfigValue_MarikoMaxMemClock] < mhz)
// // continue; // // continue;
// } else if (checkMax && IsErista()) { if (checkMax && IsErista())
// if (moduleName == "cpu" && if (moduleName == "cpu" && this->configList->values[HocClkConfigValue_EristaMaxCpuClock] < mhz)
// this->configList->values[HocClkConfigValue_EristaMaxCpuClock] < mhz) continue;
// continue;
// // if (moduleName == "gpu" && // // if (moduleName == "gpu" &&
// // this->configList->values[HocClkConfigValue_EristaMaxGpuClock] < mhz) // // this->configList->values[HocClkConfigValue_EristaMaxGpuClock] < mhz)

View File

@@ -35,7 +35,7 @@ std::map<uint32_t, std::string> cpu_freq_label_e = {
{1224000000, "Dev OC"}, {1224000000, "Dev OC"},
{1785000000, "Boost Mode & Safe Max"}, {1785000000, "Boost Mode & Safe Max"},
{2091000000, "Unsafe Max"}, {2091000000, "Unsafe Max"},
{2295000000, "Absolute Max"}, {2397000000, "Absolute Max"},
}; };
std::map<uint32_t, std::string> gpu_freq_label_e = { std::map<uint32_t, std::string> gpu_freq_label_e = {
{76800000, "Boost Mode"}, {76800000, "Boost Mode"},

View File

@@ -834,6 +834,7 @@ protected:
NamedValue("2091 MHz", 2091000), NamedValue("2091 MHz", 2091000),
NamedValue("2193 MHz", 2193000), NamedValue("2193 MHz", 2193000),
NamedValue("2295 MHz", 2295000), NamedValue("2295 MHz", 2295000),
NamedValue("2397 MHz", 2295000),
}; };
ValueThresholds eCpuClockThresholds(1785000, 2091000); ValueThresholds eCpuClockThresholds(1785000, 2091000);
addConfigButton( addConfigButton(
@@ -870,16 +871,39 @@ protected:
{}, {},
false false
); );
ValueThresholds eCpuVoltThresholds(1235, 1260);
addConfigButton( addConfigButton(
KipConfigValue_eristaCpuMaxVolt, KipConfigValue_eristaCpuMaxVolt,
"CPU Max Voltage", "CPU Max Voltage",
ValueRange(1120, 1235, 5, "mV", 1), ValueRange(1120, 1260, 5, "mV", 1),
"CPU Max Voltage", "CPU Max Voltage",
&thresholdsDisabled, &eCpuVoltThresholds,
{}, {},
{}, {},
false false
); );
std::vector<NamedValue> maxClkOptions = {
NamedValue("1785 MHz", 1785),
NamedValue("1887 MHz", 1887),
NamedValue("1963 MHz", 1963),
NamedValue("2091 MHz", 2091),
NamedValue("2193 MHz", 2193),
NamedValue("2295 MHz", 2295),
NamedValue("2397 MHz", 2397),
};
ValueThresholds eCpuMaxClockThresholds(1785, 2091);
addConfigButton(
HocClkConfigValue_EristaMaxCpuClock,
"CPU Max Clock",
ValueRange(0, 0, 1, "", 1),
"CPU Max Clock",
&eCpuMaxClockThresholds,
{},
maxClkOptions,
false
);
} else { } else {
std::vector<NamedValue> marikoTableConf = { std::vector<NamedValue> marikoTableConf = {
// NamedValue("Auto", 0), // NamedValue("Auto", 0),

Binary file not shown.

Binary file not shown.