64lut
This commit is contained in:
1 parent
e28d7d1206
commit
8403386f1a
14 files changed
+277
-68
No files matched your search
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user