DVFS: Add safety check
This commit is contained in:
@@ -566,14 +566,23 @@ void ClockManager::Tick()
|
|||||||
);
|
);
|
||||||
|
|
||||||
if(module == SysClkModule_MEM && Board::GetSocType() == SysClkSocType_Mariko && targetHz > oldHz && this->config->GetConfigValue(HorizonOCConfigValue_DVFSMode) == DVFSMode_Hijack) {
|
if(module == SysClkModule_MEM && Board::GetSocType() == SysClkSocType_Mariko && targetHz > oldHz && this->config->GetConfigValue(HorizonOCConfigValue_DVFSMode) == DVFSMode_Hijack) {
|
||||||
Board::PcvHijackDvfs(Board::GetMinimumGpuVoltage(targetHz / 1000000));
|
u32 vmin = Board::GetMinimumGpuVoltage(targetHz / 1000000);
|
||||||
I2c_BuckConverter_SetMvOut(&I2c_Mariko_GPU, Board::GetMinimumGpuVoltage(targetHz / 1000000));
|
Board::PcvHijackDvfs(vmin);
|
||||||
this->context->voltages[HocClkVoltage_GPU] = Board::GetMinimumGpuVoltage(targetHz / 1000000) * 1000;
|
|
||||||
|
/* Update the voltage. */
|
||||||
|
I2c_BuckConverter_SetMvOut(&I2c_Mariko_GPU, vmin);
|
||||||
|
|
||||||
|
/* Wait until it's safe to update clock. */
|
||||||
|
u32 gpuVolts;
|
||||||
|
while ((gpuVolts = I2c_BuckConverter_GetMvOut(&I2c_Mariko_GPU) != vmin)) {
|
||||||
|
svcSleepThread(50000);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->context->voltages[HocClkVoltage_GPU] = gpuVolts;
|
||||||
}
|
}
|
||||||
|
|
||||||
Board::SetHz((SysClkModule)module, nearestHz);
|
Board::SetHz((SysClkModule)module, nearestHz);
|
||||||
this->context->freqs[module] = nearestHz;
|
this->context->freqs[module] = nearestHz;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(module == SysClkModule_MEM && Board::GetSocType() == SysClkSocType_Mariko && targetHz < oldHz && this->config->GetConfigValue(HorizonOCConfigValue_DVFSMode) == DVFSMode_Hijack) {
|
if(module == SysClkModule_MEM && Board::GetSocType() == SysClkSocType_Mariko && targetHz < oldHz && this->config->GetConfigValue(HorizonOCConfigValue_DVFSMode) == DVFSMode_Hijack) {
|
||||||
@@ -599,12 +608,6 @@ void ClockManager::Tick()
|
|||||||
FixCpuBug();
|
FixCpuBug();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// else {
|
|
||||||
// if(module == SysClkModule_MEM && Board::GetSocType() == SysClkSocType_Mariko) {
|
|
||||||
// Board::PcvHijackDvfs(0);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user