diff --git a/Source/hoc-clk/sysmodule/src/board/board_fuse.cpp b/Source/hoc-clk/sysmodule/src/board/board_fuse.cpp index 212e9a69..4ca49579 100644 --- a/Source/hoc-clk/sysmodule/src/board/board_fuse.cpp +++ b/Source/hoc-clk/sysmodule/src/board/board_fuse.cpp @@ -43,7 +43,23 @@ namespace board { /* >= 1754 */ gpuBracket = 3; } else { - gpuBracket = speedo > 2050 ? 1 : 0; + switch(speedo) { + case 1850 ... 1925: + gpuBracket = 0; + break; + case 1926 ... 2025: + gpuBracket = 1; + break; + case 2026 ... 2100: + gpuBracket = 2; + break; + case 2100 ... 2200: + gpuBracket = 3; + break; + default: + gpuBracket = 0; + break; + } } } diff --git a/Source/hoc-clk/sysmodule/src/board/board_volt.cpp b/Source/hoc-clk/sysmodule/src/board/board_volt.cpp index 3f039222..b31f5755 100644 --- a/Source/hoc-clk/sysmodule/src/board/board_volt.cpp +++ b/Source/hoc-clk/sysmodule/src/board/board_volt.cpp @@ -459,20 +459,22 @@ namespace board { } } } else { - static const u32 ramTable[][17] = { - { 1733, 1800, 1866, 1920, 1958, 1996, 2035, 2073, 2112, 2131, 2150, 2169, 2188, 2227, 2265, 2304, 2342}, // Bracket 0 - { 1800, 1866, 1920, 1958, 1996, 2035, 2073, 2112, 2131, 2150, 2169, 2188, 2227, 2265, 2304, 2342, 2380}, // Bracket 1 + struct DvfsEntry { u32 freq; u32 volt; }; + static const DvfsEntry ramTable[][19] = { + { {1733,725}, {1800,730}, {1866,735}, {1920,740}, {1958,745}, {1996,750}, {2035,755}, {2073,760}, {2112,765}, {2131,770}, {2150,775}, {2169,780}, {2188,785}, {2227,790}, {2265,795}, {2304,800}, {2342,805}, {2380,810}, {2400,815} }, // Bracket 0 + { {1733,715}, {1800,720}, {1866,725}, {1920,730}, {1958,735}, {1996,740}, {2035,745}, {2073,750}, {2112,755}, {2131,760}, {2150,765}, {2169,770}, {2188,775}, {2227,780}, {2265,785}, {2304,790}, {2342,795}, {2380,800}, {2400,805} }, // Bracket 1 + { {1733,705}, {1800,710}, {1866,715}, {1920,720}, {1958,725}, {1996,730}, {2035,735}, {2073,740}, {2112,745}, {2131,750}, {2150,755}, {2169,760}, {2188,765}, {2227,770}, {2265,775}, {2304,780}, {2342,785}, {2380,790}, {2400,795} }, // Bracket 2 + { {1733,695}, {1800,700}, {1866,705}, {1920,710}, {1958,715}, {1996,720}, {2035,725}, {2073,730}, {2112,735}, {2131,740}, {2150,745}, {2169,750}, {2188,755}, {2227,760}, {2265,765}, {2304,770}, {2342,775}, {2380,780}, {2400,785} }, // Bracket 3 }; - static const u32 gpuVoltArray[17] = { 725, 730, 735, 740, 755, 760, 765, 770, 785, 790, 795, 800, 805, 810, 815, 820, 825}; - if (freqMhz <= 1600) return 0; // DVFS doesnt work below 1600MHz, it will just use vMin if (bracket >= std::size(ramTable)) bracket = 0; - baseVolt = gpuVoltArray[std::size(gpuVoltArray) - 1]; - for (u32 i = 0; i < std::size(gpuVoltArray); ++i) { - if (freqMhz <= ramTable[bracket][i]) { - baseVolt = gpuVoltArray[i]; + const auto& entries = ramTable[bracket]; + baseVolt = entries[std::size(entries) - 1].volt; + for (const auto& entry : entries) { + if (freqMhz <= entry.freq) { + baseVolt = entry.volt; break; } }