DVFS: Add offset
This commit is contained in:
@@ -59,6 +59,7 @@ typedef enum {
|
|||||||
HorizonOCConfigValue_EnableUnsafeDisplayFreqs,
|
HorizonOCConfigValue_EnableUnsafeDisplayFreqs,
|
||||||
|
|
||||||
HorizonOCConfigValue_DVFSMode,
|
HorizonOCConfigValue_DVFSMode,
|
||||||
|
HorizonOCConfigValue_DVFSOffset,
|
||||||
|
|
||||||
HocClkConfigValue_FixCpuVoltBug,
|
HocClkConfigValue_FixCpuVoltBug,
|
||||||
|
|
||||||
@@ -232,6 +233,9 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr
|
|||||||
case HorizonOCConfigValue_DVFSMode:
|
case HorizonOCConfigValue_DVFSMode:
|
||||||
return pretty ? "DVFS Mode" : "dvfs_mode";
|
return pretty ? "DVFS Mode" : "dvfs_mode";
|
||||||
|
|
||||||
|
case HorizonOCConfigValue_DVFSOffset:
|
||||||
|
return pretty ? "DVFS Offset" : "dvfs_offset";
|
||||||
|
|
||||||
// KIP config values
|
// KIP config values
|
||||||
case KipConfigValue_custRev:
|
case KipConfigValue_custRev:
|
||||||
return pretty ? "Custom Revision" : "kip_cust_rev";
|
return pretty ? "Custom Revision" : "kip_cust_rev";
|
||||||
@@ -550,6 +554,7 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
|
|||||||
case KipConfigValue_t7_tWTR_fine_tune:
|
case KipConfigValue_t7_tWTR_fine_tune:
|
||||||
case KipCrc32:
|
case KipCrc32:
|
||||||
case HorizonOCConfigValue_DVFSMode:
|
case HorizonOCConfigValue_DVFSMode:
|
||||||
|
case HorizonOCConfigValue_DVFSOffset:
|
||||||
return true;
|
return true;
|
||||||
case HorizonOCConfigValue_BatteryChargeCurrent:
|
case HorizonOCConfigValue_BatteryChargeCurrent:
|
||||||
return ((input >= 1024) && (input <= 3072)) || !input;
|
return ((input >= 1024) && (input <= 3072)) || !input;
|
||||||
|
|||||||
@@ -298,6 +298,45 @@ void MiscGui::listUI()
|
|||||||
addFreqButton(HocClkConfigValue_EristaMaxCpuClock, nullptr, SysClkModule_CPU, cpu_freq_label_e);
|
addFreqButton(HocClkConfigValue_EristaMaxCpuClock, nullptr, SysClkModule_CPU, cpu_freq_label_e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IsMariko()) {
|
||||||
|
std::vector<NamedValue> dvfsValues = {
|
||||||
|
NamedValue("Disabled", DVFSMode_Disabled),
|
||||||
|
NamedValue("PCV Hijack", DVFSMode_Hijack),
|
||||||
|
// NamedValue("Official Service", DVFSMode_OfficialService),
|
||||||
|
// NamedValue("Hack", DVFSMode_Hack),
|
||||||
|
};
|
||||||
|
|
||||||
|
addConfigButton(
|
||||||
|
HorizonOCConfigValue_DVFSMode,
|
||||||
|
"GPU DVFS Mode",
|
||||||
|
ValueRange(0, 0, 1, "", 0),
|
||||||
|
"GPU DVFS Mode",
|
||||||
|
&thresholdsDisabled,
|
||||||
|
{},
|
||||||
|
dvfsValues,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
std::vector<NamedValue> dvfsOffset = {
|
||||||
|
NamedValue("-50", 0xFFFFFFCE),
|
||||||
|
NamedValue("-45", 0xFFFFFFD3),
|
||||||
|
NamedValue("-40", 0xFFFFFFD8),
|
||||||
|
NamedValue("-30", 0xFFFFFFE2),
|
||||||
|
NamedValue("-25", 0xFFFFFFE7),
|
||||||
|
NamedValue("-20", 0xFFFFFFEC),
|
||||||
|
NamedValue("-10", 0xFFFFFFF6),
|
||||||
|
NamedValue(" -5", 0xFFFFFFFB),
|
||||||
|
NamedValue(" 0", 0),
|
||||||
|
NamedValue(" +5", 5),
|
||||||
|
NamedValue("+10", 10),
|
||||||
|
NamedValue("+15", 15),
|
||||||
|
NamedValue("+20", 20),
|
||||||
|
};
|
||||||
|
|
||||||
|
addConfigButton(HorizonOCConfigValue_DVFSOffset, "GPU DVFS Offset", ValueRange(0, 12, 1, "", 0), "GPU DVFS Offset", &thresholdsDisabled, {}, dvfsOffset, false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
this->listElement->addItem(new tsl::elm::CategoryHeader("KIP"));
|
this->listElement->addItem(new tsl::elm::CategoryHeader("KIP"));
|
||||||
|
|
||||||
tsl::elm::ListItem* saveBtn = new tsl::elm::ListItem("Save KIP Settings");
|
tsl::elm::ListItem* saveBtn = new tsl::elm::ListItem("Save KIP Settings");
|
||||||
@@ -345,23 +384,6 @@ void MiscGui::listUI()
|
|||||||
this->listElement->addItem(gpuSubmenu);
|
this->listElement->addItem(gpuSubmenu);
|
||||||
|
|
||||||
this->listElement->addItem(new tsl::elm::CategoryHeader("Experimental"));
|
this->listElement->addItem(new tsl::elm::CategoryHeader("Experimental"));
|
||||||
std::vector<NamedValue> dvfsValues = {
|
|
||||||
NamedValue("Disabled", DVFSMode_Disabled),
|
|
||||||
NamedValue("PCV Hijack", DVFSMode_Hijack),
|
|
||||||
// NamedValue("Official Service", DVFSMode_OfficialService),
|
|
||||||
// NamedValue("Hack", DVFSMode_Hack),
|
|
||||||
};
|
|
||||||
|
|
||||||
addConfigButton(
|
|
||||||
HorizonOCConfigValue_DVFSMode,
|
|
||||||
"GPU DVFS Mode",
|
|
||||||
ValueRange(0, 0, 1, "", 0),
|
|
||||||
"GPU DVFS Mode",
|
|
||||||
&thresholdsDisabled,
|
|
||||||
{},
|
|
||||||
dvfsValues,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
|
|
||||||
#if IS_MINIMAL == 0
|
#if IS_MINIMAL == 0
|
||||||
std::vector<NamedValue> chargerCurrents = {
|
std::vector<NamedValue> chargerCurrents = {
|
||||||
|
|||||||
@@ -566,7 +566,10 @@ 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) {
|
||||||
u32 vmin = Board::GetMinimumGpuVoltage(targetHz / 1000000);
|
s32 dvfsOffset = this->config->GetConfigValue(HorizonOCConfigValue_DVFSOffset);
|
||||||
|
dvfsOffset = std::max(dvfsOffset, -50);
|
||||||
|
u32 vmin = Board::GetMinimumGpuVoltage(targetHz / 1000000) + dvfsOffset;
|
||||||
|
|
||||||
Board::PcvHijackDvfs(vmin);
|
Board::PcvHijackDvfs(vmin);
|
||||||
|
|
||||||
/* Update the voltage. */
|
/* Update the voltage. */
|
||||||
@@ -586,7 +589,10 @@ 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));
|
s32 dvfsOffset = this->config->GetConfigValue(HorizonOCConfigValue_DVFSOffset);
|
||||||
|
dvfsOffset = std::max(dvfsOffset, -50);
|
||||||
|
u32 vmin = Board::GetMinimumGpuVoltage(targetHz / 1000000) + dvfsOffset;
|
||||||
|
Board::PcvHijackDvfs(vmin);
|
||||||
|
|
||||||
targetHz = this->context->overrideFreqs[SysClkModule_GPU];
|
targetHz = this->context->overrideFreqs[SysClkModule_GPU];
|
||||||
if (!targetHz)
|
if (!targetHz)
|
||||||
|
|||||||
Reference in New Issue
Block a user