hocclk: dvfs logic refactor
make it a lot more stable
This commit is contained in:
@@ -271,13 +271,12 @@ namespace clockManager {
|
|||||||
board::PcvHijackGpuVolts(vmin);
|
board::PcvHijackGpuVolts(vmin);
|
||||||
|
|
||||||
// Voltage doesn't update properly unless you set gpu to max and set it to min
|
// Voltage doesn't update properly unless you set gpu to max and set it to min
|
||||||
|
board::ResetToStockGpu();
|
||||||
|
|
||||||
if (targetHz) {
|
if (targetHz) {
|
||||||
board::SetHz(HocClkModule_GPU, ~0); // This won't apply, it will set back to nearestHz before it can apply the higher freq
|
|
||||||
board::SetHz(HocClkModule_GPU, nearestHz);
|
board::SetHz(HocClkModule_GPU, nearestHz);
|
||||||
} else {
|
|
||||||
board::SetHz(HocClkModule_GPU, ~0);
|
|
||||||
board::ResetToStockGpu();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleCpuUv()
|
void HandleCpuUv()
|
||||||
@@ -303,42 +302,42 @@ namespace clockManager {
|
|||||||
u32 maxHz = GetMaxAllowedHz(HocClkModule_GPU, gContext.profile);
|
u32 maxHz = GetMaxAllowedHz(HocClkModule_GPU, gContext.profile);
|
||||||
u32 nearestHz = GetNearestHz(HocClkModule_GPU, targetHz, maxHz);
|
u32 nearestHz = GetNearestHz(HocClkModule_GPU, targetHz, maxHz);
|
||||||
|
|
||||||
board::SetHz(HocClkModule_GPU, ~0);
|
board::ResetToStockGpu();
|
||||||
if (targetHz) {
|
if (targetHz)
|
||||||
board::SetHz(HocClkModule_GPU, nearestHz);
|
board::SetHz(HocClkModule_GPU, nearestHz);
|
||||||
} else {
|
|
||||||
board::ResetToStockGpu();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleFreqReset(HocClkModule module, bool isBoost)
|
void HandleFreqReset(HocClkModule module, bool isBoost, bool didHijackPcv)
|
||||||
{
|
{
|
||||||
switch (module) {
|
switch (module) {
|
||||||
case HocClkModule_CPU:
|
case HocClkModule_CPU:
|
||||||
if (!(isBoost || (config::GetConfigValue(HocClkConfigValue_OverwriteBoostMode) && isBoost)))
|
if (!(isBoost || (config::GetConfigValue(HocClkConfigValue_OverwriteBoostMode) && isBoost)))
|
||||||
board::ResetToStockCpu();
|
board::ResetToStockCpu();
|
||||||
if (config::GetConfigValue(HocClkConfigValue_LiveCpuUv)) {
|
if (config::GetConfigValue(HocClkConfigValue_LiveCpuUv)) {
|
||||||
if (board::GetSocType() == HocClkSocType_Erista)
|
if (board::GetSocType() == HocClkSocType_Erista)
|
||||||
board::SetDfllTunings(config::GetConfigValue(KipConfigValue_eristaCpuUV), 0, 1581000000);
|
board::SetDfllTunings(config::GetConfigValue(KipConfigValue_eristaCpuUV), 0, 1581000000);
|
||||||
else
|
else
|
||||||
board::SetDfllTunings(config::GetConfigValue(KipConfigValue_marikoCpuUVLow), config::GetConfigValue(KipConfigValue_marikoCpuUVHigh), board::CalculateTbreak(config::GetConfigValue(KipConfigValue_tableConf)));
|
board::SetDfllTunings(config::GetConfigValue(KipConfigValue_marikoCpuUVLow), config::GetConfigValue(KipConfigValue_marikoCpuUVHigh), board::CalculateTbreak(config::GetConfigValue(KipConfigValue_tableConf)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HocClkModule_GPU:
|
case HocClkModule_GPU:
|
||||||
board::ResetToStockGpu();
|
board::ResetToStockGpu();
|
||||||
break;
|
break;
|
||||||
case HocClkModule_MEM:
|
case HocClkModule_MEM:
|
||||||
board::ResetToStockMem();
|
board::ResetToStockMem();
|
||||||
DVFSReset();
|
if(!didHijackPcv) {
|
||||||
break;
|
DVFSReset();
|
||||||
case HocClkModule_Display:
|
didHijackPcv = true;
|
||||||
if (config::GetConfigValue(HocClkConfigValue_OverwriteRefreshRate)) {
|
}
|
||||||
board::ResetToStockDisplay();
|
break;
|
||||||
}
|
case HocClkModule_Display:
|
||||||
break;
|
if (config::GetConfigValue(HocClkConfigValue_OverwriteRefreshRate)) {
|
||||||
default:
|
board::ResetToStockDisplay();
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,7 +346,7 @@ namespace clockManager {
|
|||||||
std::uint32_t targetHz = 0;
|
std::uint32_t targetHz = 0;
|
||||||
std::uint32_t maxHz = 0;
|
std::uint32_t maxHz = 0;
|
||||||
std::uint32_t nearestHz = 0;
|
std::uint32_t nearestHz = 0;
|
||||||
|
bool didHijackPcv = false;
|
||||||
bool skipCpuDueToBoost = isBoost && !config::GetConfigValue(HocClkConfigValue_OverwriteBoostMode);
|
bool skipCpuDueToBoost = isBoost && !config::GetConfigValue(HocClkConfigValue_OverwriteBoostMode);
|
||||||
if (skipCpuDueToBoost) {
|
if (skipCpuDueToBoost) {
|
||||||
u32 boostFreq = board::GetHz(HocClkModule_CPU);
|
u32 boostFreq = board::GetHz(HocClkModule_CPU);
|
||||||
@@ -388,7 +387,7 @@ namespace clockManager {
|
|||||||
gContext.freqs[HocClkModule_Display] = targetHz;
|
gContext.freqs[HocClkModule_Display] = targetHz;
|
||||||
gContext.realFreqs[HocClkModule_Display] = targetHz;
|
gContext.realFreqs[HocClkModule_Display] = targetHz;
|
||||||
} else {
|
} else {
|
||||||
HandleFreqReset(HocClkModule_Display, isBoost);
|
HandleFreqReset(HocClkModule_Display, isBoost, didHijackPcv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -429,9 +428,12 @@ namespace clockManager {
|
|||||||
if (module == HocClkModule_MEM && board::GetSocType() == HocClkSocType_Mariko && targetHz < oldHz && config::GetConfigValue(HocClkConfigValue_DVFSMode) == DVFSMode_Hijack) {
|
if (module == HocClkModule_MEM && board::GetSocType() == HocClkSocType_Mariko && targetHz < oldHz && config::GetConfigValue(HocClkConfigValue_DVFSMode) == DVFSMode_Hijack) {
|
||||||
DVFSAfterSet(targetHz);
|
DVFSAfterSet(targetHz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(module == HocClkModule_MEM && board::GetSocType() == HocClkSocType_Mariko && config::GetConfigValue(HocClkConfigValue_DVFSMode) == DVFSMode_Hijack)
|
||||||
|
didHijackPcv = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
HandleFreqReset((HocClkModule)module, isBoost);
|
HandleFreqReset((HocClkModule)module, isBoost, didHijackPcv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -463,7 +465,6 @@ namespace clockManager {
|
|||||||
board::ResetToStock();
|
board::ResetToStock();
|
||||||
if (board::GetSocType() == HocClkSocType_Mariko && config::GetConfigValue(HocClkConfigValue_DVFSMode) == DVFSMode_Hijack) {
|
if (board::GetSocType() == HocClkSocType_Mariko && config::GetConfigValue(HocClkConfigValue_DVFSMode) == DVFSMode_Hijack) {
|
||||||
board::PcvHijackGpuVolts(0);
|
board::PcvHijackGpuVolts(0);
|
||||||
board::SetHz(HocClkModule_GPU, ~0);
|
|
||||||
board::ResetToStockGpu();
|
board::ResetToStockGpu();
|
||||||
}
|
}
|
||||||
WaitForNextTick();
|
WaitForNextTick();
|
||||||
|
|||||||
Reference in New Issue
Block a user