HOC 3.0.0 part 1
- version change to athena (3.0.0) - cust rev 7 - build script change - EMC 64LUT
This commit is contained in:
@@ -27,8 +27,8 @@ namespace ams::ldr::hoc::pcv {
|
||||
R_UNLESS(entry->freq == entry->vco_max, ldr::ResultInvalidMemPllmEntry());
|
||||
|
||||
// Double the max clk simply
|
||||
u32 max_clk = entry->freq * 2;
|
||||
entry->freq = max_clk;
|
||||
u32 max_clk = entry->freq * 2;
|
||||
entry->freq = max_clk;
|
||||
entry->vco_max = max_clk;
|
||||
R_SUCCEED();
|
||||
}
|
||||
@@ -41,14 +41,14 @@ namespace ams::ldr::hoc::pcv {
|
||||
};
|
||||
|
||||
constexpr u32 uv_step = 12'500;
|
||||
constexpr u32 uv_min = 600'000;
|
||||
constexpr u32 uv_min = 600'000;
|
||||
|
||||
auto validator = [](regulator* entry) {
|
||||
R_UNLESS(entry->id == 1, ldr::ResultInvalidRegulatorEntry());
|
||||
R_UNLESS(entry->type == 1, ldr::ResultInvalidRegulatorEntry());
|
||||
R_UNLESS(entry->type_1.volt_reg == 0x17, ldr::ResultInvalidRegulatorEntry());
|
||||
R_UNLESS(entry->type_1.step_uv == uv_step, ldr::ResultInvalidRegulatorEntry());
|
||||
R_UNLESS(entry->type_1.min_uv == uv_min, ldr::ResultInvalidRegulatorEntry());
|
||||
auto validator = [](regulator *entry) {
|
||||
R_UNLESS(entry->id == 1, ldr::ResultInvalidRegulatorEntry());
|
||||
R_UNLESS(entry->type == 1, ldr::ResultInvalidRegulatorEntry());
|
||||
R_UNLESS(entry->type_1.volt_reg == 0x17, ldr::ResultInvalidRegulatorEntry());
|
||||
R_UNLESS(entry->type_1.step_uv == uv_step, ldr::ResultInvalidRegulatorEntry());
|
||||
R_UNLESS(entry->type_1.min_uv == uv_min, ldr::ResultInvalidRegulatorEntry());
|
||||
R_SUCCEED();
|
||||
};
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace ams::ldr::hoc::pcv {
|
||||
}
|
||||
|
||||
if (emc_uv % uv_step) {
|
||||
emc_uv = emc_uv / uv_step * uv_step; // rounding
|
||||
emc_uv = emc_uv / uv_step * uv_step; // rounding
|
||||
}
|
||||
|
||||
PATCH_OFFSET(ptr, emc_uv);
|
||||
@@ -102,11 +102,11 @@ namespace ams::ldr::hoc::pcv {
|
||||
|
||||
u32 eristaCpuDvfsMaxFreq = static_cast<u32>(GetDvfsTableLastEntry(C.eristaCpuDvfsTable)->freq);
|
||||
u32 marikoCpuDvfsMaxFreq;
|
||||
if (C.marikoCpuUVHigh) {
|
||||
marikoCpuDvfsMaxFreq = static_cast<u32>(GetDvfsTableLastEntry(C.marikoCpuDvfsTableSLT)->freq);
|
||||
} else {
|
||||
marikoCpuDvfsMaxFreq = static_cast<u32>(GetDvfsTableLastEntry(C.marikoCpuDvfsTable)->freq);
|
||||
}
|
||||
if (C.marikoCpuUVHigh) {
|
||||
marikoCpuDvfsMaxFreq = static_cast<u32>(GetDvfsTableLastEntry(C.marikoCpuDvfsTableSLT)->freq);
|
||||
} else {
|
||||
marikoCpuDvfsMaxFreq = static_cast<u32>(GetDvfsTableLastEntry(C.marikoCpuDvfsTable)->freq);
|
||||
}
|
||||
u32 eristaGpuDvfsMaxFreq;
|
||||
switch (C.eristaGpuUV) {
|
||||
case 0:
|
||||
@@ -146,20 +146,80 @@ namespace ams::ldr::hoc::pcv {
|
||||
}
|
||||
|
||||
sValidator validators[] = {
|
||||
{ C.eristaCpuBoostClock, 1020'000, 2397'000, panic::Cpu, true },
|
||||
{ C.marikoCpuBoostClock, 1020'000, 2703'000, panic::Cpu, true },
|
||||
{ C.eristaCpuMaxVolt, 1000, 1260, panic::Cpu, },
|
||||
{ C.marikoCpuMaxVolt, 1000, 1200, panic::Cpu, },
|
||||
{ eristaCpuDvfsMaxFreq, 1785'000, 2397'000, panic::Cpu, },
|
||||
{ marikoCpuDvfsMaxFreq, 1785'000, 2703'000, panic::Cpu, },
|
||||
{ C.commonEmcMemVolt, 912'500, 1350'000, panic::Emc, }, /* Official vmax for the RAMs is 1400-1500mV */
|
||||
{ C.eristaEmcMaxClock, 1600'000, 2600'000, panic::Emc, },
|
||||
{ C.marikoEmcMaxClock, 1600'000, 3500'000, panic::Emc, },
|
||||
{ C.marikoEmcVddqVolt, 400'000, 750'000, panic::Emc, },
|
||||
{ C.marikoSocVmax, 1000, 1200, panic::Emc, },
|
||||
{ eristaGpuDvfsMaxFreq, 768'000, 1152'000, panic::Gpu, },
|
||||
{ marikoGpuDvfsMaxFreq, 768'000, 1536'000, panic::Gpu, },
|
||||
{ C.marikoGpuVmax, 800, 960, panic::Gpu, },
|
||||
{ C.eristaCpuBoostClock, 1020'000, 2397'000, panic::Cpu, true },
|
||||
{ C.marikoCpuBoostClock, 1020'000, 2703'000, panic::Cpu, true },
|
||||
{
|
||||
C.eristaCpuMaxVolt,
|
||||
1000,
|
||||
1260,
|
||||
panic::Cpu,
|
||||
},
|
||||
{
|
||||
C.marikoCpuMaxVolt,
|
||||
1000,
|
||||
1200,
|
||||
panic::Cpu,
|
||||
},
|
||||
{
|
||||
eristaCpuDvfsMaxFreq,
|
||||
1785'000,
|
||||
2397'000,
|
||||
panic::Cpu,
|
||||
},
|
||||
{
|
||||
marikoCpuDvfsMaxFreq,
|
||||
1785'000,
|
||||
2703'000,
|
||||
panic::Cpu,
|
||||
},
|
||||
{
|
||||
C.commonEmcMemVolt,
|
||||
912'500,
|
||||
1350'000,
|
||||
panic::Emc,
|
||||
}, /* Official vmax for the RAMs is 1400-1500mV */
|
||||
{
|
||||
C.eristaEmcMaxClock,
|
||||
1600'000,
|
||||
2600'000,
|
||||
panic::Emc,
|
||||
},
|
||||
{
|
||||
C.marikoEmcMaxClock,
|
||||
1600'000,
|
||||
3500'000,
|
||||
panic::Emc,
|
||||
},
|
||||
{
|
||||
C.marikoEmcVddqVolt,
|
||||
400'000,
|
||||
750'000,
|
||||
panic::Emc,
|
||||
},
|
||||
{
|
||||
C.marikoSocVmax,
|
||||
1000,
|
||||
1200,
|
||||
panic::Emc,
|
||||
},
|
||||
{
|
||||
eristaGpuDvfsMaxFreq,
|
||||
768'000,
|
||||
1152'000,
|
||||
panic::Gpu,
|
||||
},
|
||||
{
|
||||
marikoGpuDvfsMaxFreq,
|
||||
768'000,
|
||||
1536'000,
|
||||
panic::Gpu,
|
||||
},
|
||||
{
|
||||
C.marikoGpuVmax,
|
||||
800,
|
||||
960,
|
||||
panic::Gpu,
|
||||
},
|
||||
};
|
||||
|
||||
for (auto &v : validators) {
|
||||
@@ -171,7 +231,7 @@ namespace ams::ldr::hoc::pcv {
|
||||
}
|
||||
|
||||
void WriteKipLoadToIram() {
|
||||
const u32 hocMagic = 0x686F634D;
|
||||
const u32 hocMagic = 0x686F634D;
|
||||
constexpr uintptr_t LoadMagicAddress = 0x4003DC00; /* Should be a pretty safe address. */
|
||||
R_DISCARD(SmcCopyToIram(LoadMagicAddress, &hocMagic, sizeof(hocMagic)));
|
||||
}
|
||||
@@ -189,4 +249,4 @@ namespace ams::ldr::hoc::pcv {
|
||||
WriteKipLoadToIram();
|
||||
}
|
||||
|
||||
}
|
||||
} // namespace ams::ldr::hoc::pcv
|
||||
|
||||
Reference in New Issue
Block a user