This commit is contained in:
souldbminersmwc committed 2026-10-07 19:43:05 -04:00
1 parent e28d7d1206
commit 8403386f1a
14 files changed
+277 -68

No files matched your search

+3 -1
View File
@@ -53,6 +53,8 @@
#include "../i2c/max77620_wdt.hpp"
#include "../mgr/clock_manager.hpp"
#include "../file/config.hpp"
#include "../file/kip.hpp"
namespace board {
u64 clkVirtAddr, dsiVirtAddr, apbVirtAddr, fuseVirtAddr;
@@ -271,7 +273,7 @@ namespace board {
display::Initialize(&cfg);
CacheDfllData();
InitializeCpuLut();
InitializeCpuLut(file::kip::IsKipLoaded());
CacheGpuVoltTable();
rc = pscmInitialize();
@@ -121,7 +121,6 @@ namespace board {
svcSleepThread(300'000);
ClkrstSetHz(session, pcvHz);
}
clkrstCloseSession(&session);
} else {
PcvSetHz(GetPcvModule(module), pcvHz);
@@ -611,13 +611,14 @@ namespace board {
}
namespace {
constexpr size_t LutSize = 33;
constexpr size_t MaxPotentialLutSize = 64;
size_t LutSize = 33;
constexpr u32 PmicVmin = 250;
constexpr u32 PmicStep = 5;
struct {
volatile u32 *lut = nullptr;
u32 table[LutSize] = {};
u32 table[MaxPotentialLutSize] = {};
u32 lastVmin = 0;
u32 outputCfg = 0;
bool initialized = false;
@@ -742,11 +743,13 @@ namespace board {
}
}
void InitializeCpuLut() {
void InitializeCpuLut(bool kip) {
InitializeLutPtr();
CacheCpuLut();
cpuVoltData.outputCfg = *reinterpret_cast<volatile u32 *>(cldvfs + CL_DVFS_OUTPUT_CFG_0);
if(kip) {
LutSize = 63; /* Account for patched LUT by KIP */
}
cpuVoltData.initialized = true;
}
@@ -786,7 +789,6 @@ namespace board {
return baseVolt;
}
void ApplyCpuMinVolt(u32 vmin, bool force) {
if(!force) {
if (!cpuVoltData.initialized || (vmin == cpuVoltData.lastVmin)) {
@@ -830,5 +832,4 @@ namespace board {
cpuVoltData.lastVmin = vmin;
}
}
@@ -59,8 +59,10 @@ namespace board {
void PcvHijackGpuVolts(u32 vmin);
void PcvHijackGpuFrequency(u32 voltage, u32 hz);
u32 GetMinimumGpuVmin(u32 freqMhz, u32 bracket);
void InitializeCpuLut();
void ClDvfsSetOutputCfg(u8 safe, u8 max, u8 min);
void LogOutputCfg(const char *tag);
void SetSafeToMaxAndRelock();
void InitializeCpuLut(bool kip);
void ApplyCpuMinVolt(u32 vmin, bool force);
u32 GetMinimumCpuVmin(u32 freqMhz, u32 bracket);
+18 -11
View File
@@ -173,21 +173,28 @@ namespace file::kip {
}
bool IsKipLoaded() {
constexpr u32 ExpectedMagic = 0x686F634D;
constexpr uintptr_t LoadMagicAddress = 0x4003DC00;
u32 iramValue = {};
static bool ran = false;
static bool loaded = false;
if(!ran) {
constexpr u32 ExpectedMagic = 0x686F634D;
constexpr uintptr_t LoadMagicAddress = 0x4003DC00;
u32 iramValue = {};
SmcCopyFromIram(&iramValue, LoadMagicAddress, sizeof(iramValue));
SmcCopyFromIram(&iramValue, LoadMagicAddress, sizeof(iramValue));
if (iramValue == ExpectedMagic) {
iramValue = 0;
SmcCopyToIram(LoadMagicAddress, &iramValue, sizeof(iramValue));
return true;
if (iramValue == ExpectedMagic) {
iramValue = 0;
SmcCopyToIram(LoadMagicAddress, &iramValue, sizeof(iramValue));
loaded = true;
} else {
hos::WriteNotification("Kip is not loaded!");
file::utils::LogLine("Kip was not loaded!");
loaded = false;
}
ran = true;
}
hos::WriteNotification("Kip is not loaded!");
file::utils::LogLine("Kip was not loaded!");
return false;
return loaded;
}
// I know this is very hacky, but the config system in the sysmodule doesn't really support writing
@@ -825,4 +825,5 @@ namespace file::kip {
void MigrateKipData(u32 custRev, u32 version);
void SetKipData();
void GetKipData();
bool IsKipLoaded();
} // namespace file::kip