diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/customize.hpp b/Source/Atmosphere/stratosphere/loader/source/oc/customize.hpp index bdbbe188..8823f88b 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/customize.hpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/customize.hpp @@ -54,6 +54,7 @@ typedef struct CustomizeTable { u32 marikoEmcVddqVolt; u32 marikoCpuUV; u32 marikoGpuUV; + u32 commonGpuVoltOffset; // advanced config u32 marikoEmcDvbShift; u32 ramTimingPresetOne; diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv.hpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv.hpp index b423ab35..d5fef376 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv.hpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv.hpp @@ -289,6 +289,13 @@ Result GpuFreqCvbTable(u32* ptr) { entry++; } } + else if (C.commonGpuVoltOffset) { + cvb_entry_t* entry = static_cast(gpu_cvb_table_head); + for (size_t i = 0; i < customize_entry_count; i++) { + PATCH_OFFSET(&(entry->cvb_pll_param.c0), (entry->cvb_pll_param.c0 - C.commonGpuVoltOffset*1000)); + entry++; + } + } R_SUCCEED(); }; diff --git a/pages/src/main.ts b/pages/src/main.ts index 470a8660..91837631 100644 --- a/pages/src/main.ts +++ b/pages/src/main.ts @@ -334,6 +334,18 @@ var CustTable: Array = [ [0,3], 1, ), + new CustEntry( + "commonGpuVoltOffset", + "GPU Volt Offset", + CustPlatform.All, + 4, + ["Negative Voltage offset value for gpu dynamic voltage calculation", + "For example, value of 10 will decrease 10mV gpu volt from all frequencies", + "Acceptable range: 0 ~ 100"], + 0, + [0,100], + 1, + ), ]; var AdvTable: Array = [