11 Commits

Author SHA1 Message Date
souldbminersmwc
4dd9bc0449 fix staring bug 2026-02-23 18:12:51 -05:00
souldbminersmwc
ced04a3060 fix ldr stuff 2026-02-23 16:42:24 -05:00
souldbminersmwc
605f87b078 fix stuff 2026-02-23 16:33:16 -05:00
souldbminersmwc
2e083b59a6 samy mode: reduce safety 2026-02-23 16:28:11 -05:00
souldbminersmwc
00f70e7c5e samymode2 2026-02-23 16:25:27 -05:00
souldbminersmwc
55e84d0051 sysclk: fix compile error 2026-02-23 15:08:06 -05:00
souldbminersmwc
8cd9727429 sysclk: fix clock capping bypass bug 2026-02-23 10:39:29 -05:00
Lightos1
660e839bed Extend emc unlock 2026-02-21 19:36:52 +01:00
Lightos1
afb16d2045 Remove lazy rl_dbi stuff 2026-02-21 15:34:38 +01:00
souldbminersmwc
f4b025f33c sysclk: remove display option on hoag and mark cpu governor as experemental 2026-02-20 19:27:04 -05:00
Souldbminer
e03c3b7be0 Update README.md 2026-02-20 17:04:40 -05:00
34 changed files with 1512 additions and 497 deletions

View File

@@ -56,7 +56,6 @@ It enables advanced CPU, GPU, and RAM tuning with user-friendly configuration to
```
kip1=atmosphere/kips/hoc.kip
secmon=exosphere.bin
```
*(No changes needed if using fusee.)*

View File

@@ -0,0 +1,25 @@
/*
* Copyright (c) Atmosphère-NX
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define __ACCESS_TABLE_NAME__ EmcAccessTable1
#define __ACCESS_TABLE_ADDRESS__ MemoryRegionPhysicalDeviceExternalMemoryController1.GetAddress()
#define __ACCESS_TABLE_INC__ "secmon_emc_access_table_data.inc"
#include "secmon_define_access_table.inc"
#undef __ACCESS_TABLE_INC__
#undef __ACCESS_TABLE_ADDRESS__
#undef __ACCESS_TABLE_NAME__

View File

@@ -0,0 +1,25 @@
/*
* Copyright (c) Atmosphère-NX
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define __ACCESS_TABLE_NAME__ EmcAccessTable2
#define __ACCESS_TABLE_ADDRESS__ MemoryRegionPhysicalDeviceExternalMemoryController2.GetAddress()
#define __ACCESS_TABLE_INC__ "secmon_emc_access_table_data.inc"
#include "secmon_define_access_table.inc"
#undef __ACCESS_TABLE_INC__
#undef __ACCESS_TABLE_ADDRESS__
#undef __ACCESS_TABLE_NAME__

View File

@@ -965,3 +965,76 @@ SetRegisterAllowed(0xECC);
SetRegisterAllowed(0xED0);
SetRegisterAllowed(0xED4);
SetRegisterAllowed(0xED8);
SetRegisterAllowed(0xEDC);
SetRegisterAllowed(0xEE0);
SetRegisterAllowed(0xEE4);
SetRegisterAllowed(0xEE8);
SetRegisterAllowed(0xEEC);
SetRegisterAllowed(0xEF0);
SetRegisterAllowed(0xEF4);
SetRegisterAllowed(0xEF8);
SetRegisterAllowed(0xEFC);
SetRegisterAllowed(0xF00);
SetRegisterAllowed(0xF04);
SetRegisterAllowed(0xF08);
SetRegisterAllowed(0xF0C);
SetRegisterAllowed(0xF10);
SetRegisterAllowed(0xF14);
SetRegisterAllowed(0xF18);
SetRegisterAllowed(0xF1C);
SetRegisterAllowed(0xF20);
SetRegisterAllowed(0xF24);
SetRegisterAllowed(0xF28);
SetRegisterAllowed(0xF2C);
SetRegisterAllowed(0xF30);
SetRegisterAllowed(0xF34);
SetRegisterAllowed(0xF38);
SetRegisterAllowed(0xF3C);
SetRegisterAllowed(0xF40);
SetRegisterAllowed(0xF44);
SetRegisterAllowed(0xF48);
SetRegisterAllowed(0xF4C);
SetRegisterAllowed(0xF50);
SetRegisterAllowed(0xF54);
SetRegisterAllowed(0xF58);
SetRegisterAllowed(0xF5C);
SetRegisterAllowed(0xF60);
SetRegisterAllowed(0xF64);
SetRegisterAllowed(0xF68);
SetRegisterAllowed(0xF6C);
SetRegisterAllowed(0xF70);
SetRegisterAllowed(0xF74);
SetRegisterAllowed(0xF78);
SetRegisterAllowed(0xF7C);
SetRegisterAllowed(0xF80);
SetRegisterAllowed(0xF84);
SetRegisterAllowed(0xF88);
SetRegisterAllowed(0xF8C);
SetRegisterAllowed(0xF90);
SetRegisterAllowed(0xF94);
SetRegisterAllowed(0xF98);
SetRegisterAllowed(0xF9C);
SetRegisterAllowed(0xFA0);
SetRegisterAllowed(0xFA4);
SetRegisterAllowed(0xFA8);
SetRegisterAllowed(0xFAC);
SetRegisterAllowed(0xFB0);
SetRegisterAllowed(0xFB4);
SetRegisterAllowed(0xFB8);
SetRegisterAllowed(0xFBC);
SetRegisterAllowed(0xFC0);
SetRegisterAllowed(0xFC4);
SetRegisterAllowed(0xFC8);
SetRegisterAllowed(0xFCC);
SetRegisterAllowed(0xFD0);
SetRegisterAllowed(0xFD4);
SetRegisterAllowed(0xFD8);
SetRegisterAllowed(0xFDC);
SetRegisterAllowed(0xFE0);
SetRegisterAllowed(0xFE4);
SetRegisterAllowed(0xFE8);
SetRegisterAllowed(0xFEC);
SetRegisterAllowed(0xFF0);
SetRegisterAllowed(0xFF4);
SetRegisterAllowed(0xFF8);
SetRegisterAllowed(0xFFC);

View File

@@ -123,39 +123,41 @@ namespace ams::secmon {
constexpr inline const MemoryRegion MemoryRegionPhysicalIramBootCode = MemoryRegion(UINT64_C(0x40020000), 0x20000);
static_assert(MemoryRegionPhysicalIram.Contains(MemoryRegionPhysicalIramBootCode));
constexpr inline const MemoryRegion MemoryRegionVirtualDevice = MemoryRegion(UINT64_C(0x1F0040000), UINT64_C(0x40000));
constexpr inline const MemoryRegion MemoryRegionVirtualDevice = MemoryRegion(UINT64_C(0x1F0040000), UINT64_C(0x40000 + 0x2000));
static_assert(MemoryRegionVirtual.Contains(MemoryRegionVirtualDevice));
constexpr inline const MemoryRegion MemoryRegionVirtualDeviceEmpty = MemoryRegion(MemoryRegionVirtualDevice.GetStartAddress(), 0);
#define AMS_SECMON_FOREACH_DEVICE_REGION(HANDLER, ...) \
HANDLER(GicDistributor, Empty, UINT64_C(0x50041000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(GicCpuInterface, GicDistributor, UINT64_C(0x50042000), UINT64_C(0x2000), true, ## __VA_ARGS__) \
HANDLER(Uart, GicCpuInterface, UINT64_C(0x70006000), UINT64_C(0x1000), false, ## __VA_ARGS__) \
HANDLER(ClkRst, Uart, UINT64_C(0x60006000), UINT64_C(0x1000), false, ## __VA_ARGS__) \
HANDLER(RtcPmc, ClkRst, UINT64_C(0x7000E000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Timer, RtcPmc, UINT64_C(0x60005000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(System, Timer, UINT64_C(0x6000C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(SecurityEngine, System, UINT64_C(0x70012000), UINT64_C(0x2000), true, ## __VA_ARGS__) \
HANDLER(SecurityEngine2, SecurityEngine, UINT64_C(0x70412000), UINT64_C(0x2000), true, ## __VA_ARGS__) \
HANDLER(SysCtr0, SecurityEngine2, UINT64_C(0x700F0000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(MemoryController, SysCtr0, UINT64_C(0x70019000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(ExternalMemoryController, MemoryController, UINT64_C(0x7001b000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(FuseKFuse, ExternalMemoryController, UINT64_C(0x7000F000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(ApbMisc, FuseKFuse, UINT64_C(0x70000000), UINT64_C(0x4000), true, ## __VA_ARGS__) \
HANDLER(FlowController, ApbMisc, UINT64_C(0x60007000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(BootloaderParams, FlowController, UINT64_C(0x40000000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(I2c5, BootloaderParams, UINT64_C(0x7000D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Gpio, I2c5, UINT64_C(0x6000D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(I2c1, Gpio, UINT64_C(0x7000C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(ExceptionVectors, I2c1, UINT64_C(0x6000F000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(MemoryController0, ExceptionVectors, UINT64_C(0x7001C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(MemoryController1, MemoryController0, UINT64_C(0x7001D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Sdmmc, MemoryController1, UINT64_C(0x700B0000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Disp1, Sdmmc, UINT64_C(0x54200000), UINT64_C(0x3000), true, ## __VA_ARGS__) \
HANDLER(Dsi, Disp1, UINT64_C(0x54300000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(MipiCal, Dsi, UINT64_C(0x700E3000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Soctherm, MipiCal, UINT64_C(0x700E2000), UINT64_C(0x1000), true, ## __VA_ARGS__)
HANDLER(GicDistributor, Empty, UINT64_C(0x50041000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(GicCpuInterface, GicDistributor, UINT64_C(0x50042000), UINT64_C(0x2000), true, ## __VA_ARGS__) \
HANDLER(Uart, GicCpuInterface, UINT64_C(0x70006000), UINT64_C(0x1000), false, ## __VA_ARGS__) \
HANDLER(ClkRst, Uart, UINT64_C(0x60006000), UINT64_C(0x1000), false, ## __VA_ARGS__) \
HANDLER(RtcPmc, ClkRst, UINT64_C(0x7000E000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Timer, RtcPmc, UINT64_C(0x60005000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(System, Timer, UINT64_C(0x6000C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(SecurityEngine, System, UINT64_C(0x70012000), UINT64_C(0x2000), true, ## __VA_ARGS__) \
HANDLER(SecurityEngine2, SecurityEngine, UINT64_C(0x70412000), UINT64_C(0x2000), true, ## __VA_ARGS__) \
HANDLER(SysCtr0, SecurityEngine2, UINT64_C(0x700F0000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(MemoryController, SysCtr0, UINT64_C(0x70019000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(ExternalMemoryController, MemoryController, UINT64_C(0x7001b000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(FuseKFuse, ExternalMemoryController, UINT64_C(0x7000F000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(ApbMisc, FuseKFuse, UINT64_C(0x70000000), UINT64_C(0x4000), true, ## __VA_ARGS__) \
HANDLER(FlowController, ApbMisc, UINT64_C(0x60007000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(BootloaderParams, FlowController, UINT64_C(0x40000000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(I2c5, BootloaderParams, UINT64_C(0x7000D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Gpio, I2c5, UINT64_C(0x6000D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(I2c1, Gpio, UINT64_C(0x7000C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(ExceptionVectors, I2c1, UINT64_C(0x6000F000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(MemoryController0, ExceptionVectors, UINT64_C(0x7001C000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(MemoryController1, MemoryController0, UINT64_C(0x7001D000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Sdmmc, MemoryController1, UINT64_C(0x700B0000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Disp1, Sdmmc, UINT64_C(0x54200000), UINT64_C(0x3000), true, ## __VA_ARGS__) \
HANDLER(Dsi, Disp1, UINT64_C(0x54300000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(MipiCal, Dsi, UINT64_C(0x700E3000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(Soctherm, MipiCal, UINT64_C(0x700E2000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(ExternalMemoryController1, Soctherm, UINT64_C(0x7001e000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
HANDLER(ExternalMemoryController2, ExternalMemoryController1, UINT64_C(0x7001f000), UINT64_C(0x1000), true, ## __VA_ARGS__) \
#define DEFINE_DEVICE_REGION(_NAME_, _PREV_, _ADDRESS_, _SIZE_, _SECURE_) \
constexpr inline const MemoryRegion MemoryRegionVirtualDevice##_NAME_ = MemoryRegion(MemoryRegionVirtualDevice##_PREV_.GetEndAddress() + 0x1000, _SIZE_); \

View File

@@ -99,6 +99,8 @@ namespace ams::secmon::smc {
#include "secmon_define_pmc_access_table.inc"
#include "secmon_define_mc_access_table.inc"
#include "secmon_define_emc_access_table.inc"
#include "secmon_define_emc1_access_table.inc"
#include "secmon_define_emc2_access_table.inc"
#include "secmon_define_soctherm_access_table.inc"
#include "secmon_define_mc01_access_table.inc"
@@ -106,6 +108,8 @@ namespace ams::secmon::smc {
{ PmcAccessTable::ReducedAccessTable.data(), MemoryRegionVirtualDevicePmc.GetAddress(), PmcAccessTable::Address, PmcAccessTable::Size, },
{ McAccessTable::ReducedAccessTable.data(), MemoryRegionVirtualDeviceMemoryController.GetAddress(), McAccessTable::Address, McAccessTable::Size, },
{ EmcAccessTable::ReducedAccessTable.data(), MemoryRegionVirtualDeviceExternalMemoryController.GetAddress(), EmcAccessTable::Address, EmcAccessTable::Size, },
{ EmcAccessTable1::ReducedAccessTable.data(), MemoryRegionVirtualDeviceExternalMemoryController1.GetAddress(), EmcAccessTable1::Address, EmcAccessTable1::Size, },
{ EmcAccessTable2::ReducedAccessTable.data(), MemoryRegionVirtualDeviceExternalMemoryController2.GetAddress(), EmcAccessTable2::Address, EmcAccessTable2::Size, },
{ SocthermAccessTable::ReducedAccessTable.data(), MemoryRegionVirtualDeviceSoctherm.GetAddress(), SocthermAccessTable::Address, SocthermAccessTable::Size, },
{ Mc01AccessTable::ReducedAccessTable.data(), Mc01AccessTable::Address + MemoryRegionVirtualDeviceMemoryController0.GetAddress(), Mc01AccessTable::Address + MemoryRegionPhysicalDeviceMemoryController0.GetAddress(), Mc01AccessTable::Size, },
{ Mc01AccessTable::ReducedAccessTable.data(), Mc01AccessTable::Address + MemoryRegionVirtualDeviceMemoryController1.GetAddress(), Mc01AccessTable::Address + MemoryRegionPhysicalDeviceMemoryController1.GetAddress(), Mc01AccessTable::Size, },

View File

@@ -26,7 +26,7 @@
#define DISABLED 0
#define DEACTIVATED_GPU_FREQ 2000
#define GPU_MIN_MIN_VOLT 480000
#define CPU_MAX_MAX_VOLT 1235000
#define CPU_MAX_MAX_VOLT 1395000
namespace ams::ldr::hoc {
@@ -122,32 +122,28 @@ volatile CustomizeTable C = {
.eristaGpuVoltArray = {
AUTO /* 76 */,
AUTO /* 115 */,
AUTO /* 153 */,
AUTO /* 192 */,
AUTO /* 230 */,
AUTO /* 269 */,
AUTO /* 307 */,
AUTO /* 346 */,
AUTO /* 384 */,
AUTO /* 422 */,
AUTO /* 460 */,
AUTO /* 499 */,
AUTO /* 537 */,
AUTO /* 576 */,
AUTO /* 614 */,
AUTO /* 652 */,
AUTO /* 691 */,
AUTO /* 729 */,
AUTO /* 768 */,
AUTO /* 806 */,
AUTO /* 844 */,
AUTO /* 883 */,
AUTO /* 921 */,
DEACTIVATED_GPU_FREQ /* 960 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 998 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1036 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1075 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1152 (SLT / HiOPT Only!) */,
DEACTIVATED_GPU_FREQ /* 1228 (HiOPT Only!) */,
DEACTIVATED_GPU_FREQ /* 1305 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1344 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1382 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1420 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1459 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1497 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1536 (Disabled by default) */,
},
.marikoGpuVoltArray = {
@@ -167,7 +163,6 @@ volatile CustomizeTable C = {
AUTO /* 1075 */,
AUTO /* 1152 (SLT / HiOPT Only!) */,
AUTO /* 1228 (HiOPT Only!) */,
DEACTIVATED_GPU_FREQ /* 1267 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1305 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1344 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1382 (Disabled by default) */,
@@ -175,6 +170,14 @@ volatile CustomizeTable C = {
DEACTIVATED_GPU_FREQ /* 1459 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1497 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1536 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1574 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1612 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1651 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1689 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1728 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1766 (Disabled by default) */,
DEACTIVATED_GPU_FREQ /* 1804 (Disabled by default) */,
},
/* Advanced. */
@@ -199,9 +202,9 @@ volatile CustomizeTable C = {
{ 1581000, { 1130000, }, { 2889664, -122173, 1834, } },
{ 1683000, { 1168000, }, { 5100873, -279186, 4747, } },
{ 1785000, { 1225000, }, { 5100873, -279186, 4747, } },
// { 1887000, { 1225000, }, { 5100873, -279186, 4747, } },
// { 1989000, { 1227500, }, { 5100873, -279186, 4747, } },
// { 2091000, { 1256250, }, { 5100873, -279186, 4747, } },
{ 1887000, { 1225000, }, { 5100873, -279186, 4747, } },
{ 1989000, { 1227500, }, { 5100873, -279186, 4747, } },
{ 2091000, { 1256250, }, { 5100873, -279186, 4747, } },
},
.eristaCpuDvfsTableSLT = {
@@ -223,9 +226,13 @@ volatile CustomizeTable C = {
{ 1785000, { 1225000, }, { 5100873, -279186, 4747, } },
{ 1887000, { 1225000, }, { 5100873, -279186, 4747, } },
{ 1989000, { 1227500, }, { 5100873, -279186, 4747, } },
{ 2091000, { 1256250, }, { 5100873, -279186, 4747, } },
{ 2193000, { 1256250, }, { 5100873, -279186, 4747, } },
{ 2295000, { 1256250, }, { 5100873, -279186, 4747, } },
{ 2091000, { 1227500, }, { 5100873, -279186, 4747, } },
{ 2193000, { 1227500, }, { 5100873, -279186, 4747, } },
{ 2295000, { 1227500, }, { 5100873, -279186, 4747, } },
{ 2397000, { 1395000, }, { 5100873, -279186, 4747, } },
{ 2499000, { 1395000, }, { 6000000, -179186, 4747, } },
{ 2601000, { 1395000, }, { 6000000, -179186, 4747, } },
{ 2703000, { 1395000, }, { 6000000, -179186, 4747, } },
},
.marikoCpuDvfsTable = {
@@ -247,17 +254,13 @@ volatile CustomizeTable C = {
{ 1785000, { 1527196, -36015, 27, }, { 1120000, } },
{ 1887000, { 1609246, -37515, 27, }, { 1120000, } },
{ 1963500, { 1675751, -38635, 27, }, { 1120000, } },
// { 2091000, { 1716501, -39395, 27, }, { CPU_MAX_MAX_VOLT, } },
// { 2193000, { 1775132, -40505, 27, }, { CPU_MAX_MAX_VOLT, } },
// { 2295000, { 1866287, -42005, 27, }, { CPU_MAX_MAX_VOLT, } },
// { 2397000, { 1961107, -43506, 27, }, { CPU_MAX_MAX_VOLT, } },
{ 2091000, { 1716501, -39395, 27, }, { CPU_MAX_MAX_VOLT, } },
{ 2193000, { 1775132, -40505, 27, }, { CPU_MAX_MAX_VOLT, } },
{ 2295000, { 1866287, -42005, 27, }, { CPU_MAX_MAX_VOLT, } },
{ 2397000, { 1961107, -43506, 27, }, { CPU_MAX_MAX_VOLT, } },
},
.marikoCpuDvfsTableSLT = {
{ 204000, { 732856, -17335, 113, }, { } },
{ 306000, { 760024, -18195, 113, }, { } },
{ 408000, { 789258, -19055, 113, }, { } },
{ 510000, { 789258, -19055, 113, }, { } },
{ 612000, { 789258, -19055, 113, }, { } },
{ 714000, { 789258, -19055, 113, }, { } },
{ 816000, { 789258, -19055, 113, }, { } },
@@ -279,13 +282,12 @@ volatile CustomizeTable C = {
{ 2499000, { 1580725, -35815, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2601000, { 1702903, -36675, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2703000, { 1770375, -37515, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2805000, { 1908891, -37707, 113 }, { CPU_MAX_MAX_VOLT, } },
{ 2907000, { 1960388, -38395, 113 }, { CPU_MAX_MAX_VOLT ,} },
{ 3009000, { 2011885, -39083, 113 }, { CPU_MAX_MAX_VOLT ,} },
},
.marikoCpuDvfsTable1581Tbreak {
{ 204000, { 732856, -17335, 113, }, { } },
{ 306000, { 760024, -18195, 113, }, { } },
{ 408000, { 789258, -19055, 113, }, { } },
{ 510000, { 789258, -19055, 113, }, { } },
{ 612000, { 853926, -20775, 113, }, { } },
{ 714000, { 889361, -21625, 113, }, { } },
{ 816000, { 926862, -22485, 113, }, { } },
@@ -307,13 +309,12 @@ volatile CustomizeTable C = {
{ 2499000, { 1736856, -35286, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2601000, { 1787838, -35967, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2703000, { 1838820, -36648, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2805000, { 1908891, -37707, 113 }, { CPU_MAX_MAX_VOLT, } },
{ 2907000, { 1960388, -38395, 113 }, { CPU_MAX_MAX_VOLT ,} },
{ 3009000, { 2011885, -39083, 113 }, { CPU_MAX_MAX_VOLT ,} },
},
.marikoCpuDvfsTable1683Tbreak {
{ 204000, { 732856, -17335, 113, }, { } },
{ 306000, { 760024, -18195, 113, }, { } },
{ 408000, { 789258, -19055, 113, }, { } },
{ 510000, { 789258, -19055, 113, }, { } },
{ 612000, { 853926, -20775, 113, }, { } },
{ 714000, { 889361, -21625, 113, }, { } },
{ 816000, { 926862, -22485, 113, }, { } },
@@ -335,13 +336,12 @@ volatile CustomizeTable C = {
{ 2499000, { 1736856, -35286, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2601000, { 1787838, -35967, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2703000, { 1838820, -36648, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2805000, { 1908891, -37707, 113 }, { CPU_MAX_MAX_VOLT, } },
{ 2907000, { 1960388, -38395, 113 }, { CPU_MAX_MAX_VOLT ,} },
{ 3009000, { 2011885, -39083, 113 }, { CPU_MAX_MAX_VOLT ,} },
},
.marikoCpuDvfsTableExtreme {
{ 204000, { 732856, -17335, 113, }, { } },
{ 306000, { 760024, -18195, 113, }, { } },
{ 408000, { 789258, -19055, 113, }, { } },
{ 510000, { 789258, -19915, 113, }, { } },
{ 612000, { 789258, -19055, 113, }, { } },
{ 714000, { 820558, -19915, 113, }, { } },
{ 816000, { 853926, -20775, 113, }, { } },
@@ -363,91 +363,66 @@ volatile CustomizeTable C = {
{ 2499000, { 1580725, -35815, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2601000, { 1702903, -36675, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2703000, { 1775375, -37515, 113, }, { CPU_MAX_MAX_VOLT, } },
{ 2805000, { 1908891, -37707, 113 }, { CPU_MAX_MAX_VOLT, } },
{ 2907000, { 1960388, -38395, 113 }, { CPU_MAX_MAX_VOLT ,} },
{ 3009000, { 2011885, -39083, 113 }, { CPU_MAX_MAX_VOLT ,} },
},
.eristaGpuDvfsTable = {
{ 76800, { }, { 814294, 8144, -940, 808, -21583, 226, } },
{ 115200, { }, { 856185, 8144, -940, 808, -21583, 226, } },
{ 153600, { }, { 856185, 8144, -940, 808, -21583, 226, } },
{ 192000, { }, { 898077, 8144, -940, 808, -21583, 226, } },
{ 230400, { }, { 898077, 8144, -940, 808, -21583, 226, } },
{ 268800, { }, { 939968, 8144, -940, 808, -21583, 226, } },
{ 307200, { }, { 939968, 8144, -940, 808, -21583, 226, } },
{ 345600, { }, { 981860, 8144, -940, 808, -21583, 226, } },
{ 384000, { }, { 981860, 8144, -940, 808, -21583, 226, } },
{ 422400, { }, { 1023751, 8144, -940, 808, -21583, 226, } },
{ 460800, { }, { 1023751, 8144, -940, 808, -21583, 226, } },
{ 499200, { }, { 1065642, 8144, -940, 808, -21583, 226, } },
{ 537600, { }, { 1065642, 8144, -940, 808, -21583, 226, } },
{ 576000, { }, { 1107534, 8144, -940, 808, -21583, 226, } },
{ 614400, { }, { 1107534, 8144, -940, 808, -21583, 226, } },
{ 652800, { }, { 1149425, 8144, -940, 808, -21583, 226, } },
{ 691200, { }, { 1149425, 8144, -940, 808, -21583, 226, } },
{ 729600, { }, { 1191317, 8144, -940, 808, -21583, 226, } },
{ 768000, { }, { 1191317, 8144, -940, 808, -21583, 226, } },
{ 806400, { }, { 1233208, 8144, -940, 808, -21583, 226, } },
{ 844800, { }, { 1233208, 8144, -940, 808, -21583, 226, } },
{ 883200, { }, { 1275100, 8144, -940, 808, -21583, 226, } },
{ 921600, { }, { 1275100, 8144, -940, 808, -21583, 226, } },
// { 998400, { }, { 1316991, 8144, -940, 808, -21583, 226, } },
},
.eristaGpuDvfsTableSLT = {
{ 76800, { }, { 814294, 8144, -940, 0, 0, 226, } },
{ 115200, { }, { 856185, 8144, -940, 0, 0, 226, } },
{ 153600, { }, { 856185, 8144, -940, 0, 0, 226, } },
{ 192000, { }, { 908077, 8144, -940, 0, 0, 226, } },
{ 230400, { }, { 908077, 8144, -940, 0, 0, 226, } },
{ 268800, { }, { 934968, 8144, -940, 0, 0, 226, } },
{ 307200, { }, { 934968, 8144, -940, 0, 0, 226, } },
{ 345600, { }, { 952860, 8144, -940, 0, 0, 226, } },
{ 384000, { }, { 952860, 8144, -940, 0, 0, 226, } },
{ 422400, { }, { 978751, 8144, -940, 0, 0, 226, } },
{ 460800, { }, { 978751, 8144, -940, 0, 0, 226, } },
{ 499200, { }, { 990642, 8144, -940, 0, 0, 226, } },
{ 537600, { }, { 990642, 8144, -940, 0, 0, 226, } },
{ 576000, { }, { 1017534, 8144, -940, 0, 0, 226, } },
{ 614400, { }, { 1017534, 8144, -940, 0, 0, 226, } },
{ 652800, { }, { 1042425, 8144, -940, 0, 0, 226, } },
{ 691200, { }, { 1042425, 8144, -940, 0, 0, 226, } },
{ 729600, { }, { 1066317, 8144, -940, 0, 0, 226, } },
{ 768000, { }, { 1066317, 8144, -940, 0, 0, 226, } },
{ 806400, { }, { 1093208, 8144, -940, 0, 0, 226, } },
{ 844800, { }, { 1093208, 8144, -940, 0, 0, 226, } },
{ 883200, { }, { 1118100, 8144, -940, 0, 0, 226, } },
{ 921600, { }, { 1118100, 8144, -940, 0, 0, 226, } },
{ 960000, { }, { 1156991, 8144, -940, 0, 0, 226, } },
},
.eristaGpuDvfsTableHiOPT = {
{ 76800, { }, { 814294, 8144, -940, 0, 0, 226, } },
{ 115200, { }, { 856185, 8144, -940, 0, 0, 226, } },
{ 153600, { }, { 856185, 8144, -940, 0, 0, 226, } },
{ 192000, { }, { 908077, 8144, -940, 0, 0, 226, } },
{ 230400, { }, { 908077, 8144, -940, 0, 0, 226, } },
{ 268800, { }, { 934968, 8144, -940, 0, 0, 226, } },
{ 307200, { }, { 934968, 8144, -940, 0, 0, 226, } },
{ 345600, { }, { 952860, 8144, -940, 0, 0, 226, } },
{ 384000, { }, { 952860, 8144, -940, 0, 0, 226, } },
{ 422400, { }, { 978751, 8144, -940, 0, 0, 226, } },
{ 460800, { }, { 978751, 8144, -940, 0, 0, 226, } },
{ 499200, { }, { 990642, 8144, -940, 0, 0, 226, } },
{ 537600, { }, { 990642, 8144, -940, 0, 0, 226, } },
{ 576000, { }, { 1017534, 8144, -940, 0, 0, 226, } },
{ 614400, { }, { 1017534, 8144, -940, 0, 0, 226, } },
{ 652800, { }, { 1042425, 8144, -940, 0, 0, 226, } },
{ 691200, { }, { 1042425, 8144, -940, 0, 0, 226, } },
{ 729600, { }, { 1066317, 8144, -940, 0, 0, 226, } },
{ 768000, { }, { 1066317, 8144, -940, 0, 0, 226, } },
{ 806400, { }, { 1093208, 8144, -940, 0, 0, 226, } },
{ 844800, { }, { 1093208, 8144, -940, 0, 0, 226, } },
{ 883200, { }, { 1118100, 8144, -940, 0, 0, 226, } },
{ 921600, { }, { 1118100, 8144, -940, 0, 0, 226, } },
{ 960000, { }, { 1156991, 8144, -940, 0, 0, 226, } },
{ 998400, { }, { 1156991, 8144, -940, 0, 0, 226, } },
{ 1036800, { }, { } },
{ 1075200, { }, { } },
// { 1152000, { }, { } },
{ 1152000, { }, { } },
{ 1228800, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1267200, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1344000, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1382400, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1420800, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1459200, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1497600, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1536000, { }, { 0, 0, 0, 0, 0, 0 } },
},
.marikoGpuDvfsTable = {
@@ -465,9 +440,9 @@ volatile CustomizeTable C = {
{ 921600, { }, { 970060,-10108, -614,-179, 1508, -13 } },
{ 998400, { }, { 1065665,-16075, -497,-179, 3213, 9 } },
{ 1075200, { }, { 1132576,-16093, -648, 0, 1077, 40 } },
// { 1152000, { }, { 1180029,-14534, -830, 0, 1469, 110 } },
// { 1228800, { }, { 1248293,-16383, -859, 0, 3722, 313 } },
// { 1267200, { }, { 1286399,-17475, -867, 0, 3681, 559 } },
{ 1152000, { }, { 1180029,-14534, -830, 0, 1469, 110 } },
{ 1228800, { }, { 1248293,-16383, -859, 0, 3722, 313 } },
{ 1267200, { }, { 1286399,-17475, -867, 0, 3681, 559 } },
},
.marikoGpuDvfsTableSLT = {
@@ -487,7 +462,7 @@ volatile CustomizeTable C = {
{ 1075200, { }, { 1132576, -16093, -648, 0, 1077, 40 } },
{ 1152000, { }, { 1180029, -14534, -830, 0, 1469, 110 } },
{ 1228800, { }, { 1238293, -16383, -859, 0, 3722, 313 } },
// { 1267200, { }, { 1276399, -17475, -867, 0, 3681, 559 } },
{ 1267200, { }, { 1276399, -17475, -867, 0, 3681, 559 } },
},
.marikoGpuDvfsTableHiOPT = {
@@ -515,6 +490,13 @@ volatile CustomizeTable C = {
{ 1459200, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1497600, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1536000, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1574400, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1612800, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1651200, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1689600, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1728000, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1766400, { }, { 0, 0, 0, 0, 0, 0 } },
{ 1804800, { }, { 0, 0, 0, 0, 0, 0 } },
},
};

View File

@@ -125,8 +125,8 @@ typedef struct CustomizeTable {
u32 gpuSpeedo;
u32 eristaGpuVoltArray[27];
u32 marikoGpuVoltArray[24];
u32 eristaGpuVoltArray[24];
u32 marikoGpuVoltArray[31];
u32 fineTune_t6_tRTW;
u32 fineTune_t7_tWTR;

View File

@@ -20,9 +20,9 @@
namespace ams::ldr::hoc::pcv::erista {
void CalculateTimings(double tCK_avg) {
tR2W = FLOOR(FLOOR((5.0 / tCK_avg) + ((FLOOR(48.0 / WL) - 0.478) * 3.0)) / 1.501) + RL_DBI - (C.t6_tRTW * 3) + finetRTW;
tWTPDEN = CEIL(((1.803 / tCK_avg) + MAX(RL_DBI + (2.694 / tCK_avg), static_cast<double>(tW2P))) + (BL / 2));
tW2R = FLOOR(MAX((5.020 / tCK_avg) + 1.130, WL - MAX(-CEIL(0.258 * (WL - RL_DBI)), 1.964)) * 1.964) + WL - CEIL(tWTR / tCK_avg) + finetWTR;
tR2W = FLOOR(FLOOR((5.0 / tCK_avg) + ((FLOOR(48.0 / WL) - 0.478) * 3.0)) / 1.501) + RL - (C.t6_tRTW * 3) + finetRTW;
tWTPDEN = CEIL(((1.803 / tCK_avg) + MAX(RL + (2.694 / tCK_avg), static_cast<double>(tW2P))) + (BL / 2));
tW2R = FLOOR(MAX((5.020 / tCK_avg) + 1.130, WL - MAX(-CEIL(0.258 * (WL - RL)), 1.964)) * 1.964) + WL - CEIL(tWTR / tCK_avg) + finetWTR;
pdex2rw = CEIL((CEIL(12.335 - tCK_avg) + (7.430 / tCK_avg) - CEIL(tCK_avg * 11.361)));
tCLKSTOP = FLOOR(MIN(8.488 / tCK_avg, 23.0)) + 8.0;

View File

@@ -43,7 +43,7 @@ namespace ams::ldr::hoc::pcv::mariko {
u32 wlIndex = 0;
for (u32 i = 0; i < std::size(rlMapDBI); ++i) {
if (rlMapDBI[i] == RL_DBI) {
if (rlMapDBI[i] == RL) {
rlIndex = i;
break;
}

View File

@@ -34,12 +34,9 @@ namespace ams::ldr::hoc {
const u32 BL = 16;
/* Base latency for read and write (tWRL). */
const u32 RL = C.mem_burst_read_latency - 4; /* (This is a lazy fix for now) */
const u32 RL = C.mem_burst_read_latency;
const u32 WL = C.mem_burst_write_latency;
/* Switch uses RL_DBI, todo: get rid of non DBI_RL. */
const u32 RL_DBI = RL + 4;
/* Precharge to Precharge Delay. (tCK) */
const u32 tPPD = 4;
@@ -90,7 +87,7 @@ namespace ams::ldr::hoc {
const u32 tFAW = static_cast<u32>(tRRD * 4.0);
const double tRPab = tRPpb + 3;
const u32 tR2P = CEIL((RL_DBI * 0.426) - 2.0);
const u32 tR2P = CEIL((RL * 0.426) - 2.0);
inline u32 tR2W;
inline u32 rext;
@@ -131,16 +128,16 @@ namespace ams::ldr::hoc {
const u32 tFAW = static_cast<u32>(tRRD * 4.0);
const double tRPab = tRPpb + 3;
const u32 tR2P = CEIL((RL_DBI * 0.426) - 2.0);
const u32 tR2W = FLOOR(FLOOR((5.0 / tCK_avg) + ((FLOOR(48.0 / WL) - 0.478) * 3.0)) / 1.501) + RL_DBI - (C.t6_tRTW * 3) + finetRTW;
const u32 tRTM = FLOOR((10.0 + RL_DBI) + (3.502 / tCK_avg)) + FLOOR(7.489 / tCK_avg);
const u32 tRATM = CEIL((tRTM - 10.0) + (RL_DBI * 0.426));
const u32 tR2P = CEIL((RL * 0.426) - 2.0);
const u32 tR2W = FLOOR(FLOOR((5.0 / tCK_avg) + ((FLOOR(48.0 / WL) - 0.478) * 3.0)) / 1.501) + RL - (C.t6_tRTW * 3) + finetRTW;
const u32 tRTM = FLOOR((10.0 + RL) + (3.502 / tCK_avg)) + FLOOR(7.489 / tCK_avg);
const u32 tRATM = CEIL((tRTM - 10.0) + (RL * 0.426));
inline u32 rext;
const u32 rdv = RL_DBI + FLOOR((5.105 / tCK_avg) + 17.017);
const u32 rdv = RL + FLOOR((5.105 / tCK_avg) + 17.017);
const u32 qpop = rdv - 14;
const u32 quse_width = CEIL(((4.897 / tCK_avg) - FLOOR(2.538 / tCK_avg)) + 3.782);
const u32 quse = FLOOR(RL_DBI + ((5.082 / tCK_avg) + FLOOR(2.560 / tCK_avg))) - CEIL(4.820 / tCK_avg);
const u32 quse = FLOOR(RL + ((5.082 / tCK_avg) + FLOOR(2.560 / tCK_avg))) - CEIL(4.820 / tCK_avg);
const u32 einput_duration = FLOOR(9.936 / tCK_avg) + 5.0 + quse_width;
const u32 einput = quse - CEIL(9.928 / tCK_avg);
const u32 qrst_duration = FLOOR(8.399 - tCK_avg);
@@ -149,8 +146,8 @@ namespace ams::ldr::hoc {
const u32 ibdly = PACK_U32_NIBBLE_HIGH_BYTE_LOW(1, quse - qrst_duration - 2.0);
const u32 qsafe = (einput_duration + 3) + MAX(MIN(qrstLow * rdv, qrst_duration + qrst_duration), einput);
const u32 tW2P = (CEIL(WL * 1.7303) * 2) - 5;
const u32 tWTPDEN = CEIL(((1.803 / tCK_avg) + MAX(RL_DBI + (2.694 / tCK_avg), static_cast<double>(tW2P))) + (BL / 2));
const u32 tW2R = FLOOR(MAX((5.020 / tCK_avg) + 1.130, WL - MAX(-CEIL(0.258 * (WL - RL_DBI)), 1.964)) * 1.964) + WL - CEIL(tWTR / tCK_avg) + finetWTR;
const u32 tWTPDEN = CEIL(((1.803 / tCK_avg) + MAX(RL + (2.694 / tCK_avg), static_cast<double>(tW2P))) + (BL / 2));
const u32 tW2R = FLOOR(MAX((5.020 / tCK_avg) + 1.130, WL - MAX(-CEIL(0.258 * (WL - RL)), 1.964)) * 1.964) + WL - CEIL(tWTR / tCK_avg) + finetWTR;
const u32 tWTM = CEIL(WL + ((7.570 / tCK_avg) + 8.753));
const u32 tWATM = (tWTM + (FLOOR(WL / 0.816) * 2.0)) - 4.0;

View File

@@ -140,17 +140,17 @@ void SafetyCheck() {
using namespace ams::ldr::hoc::pcv;
sValidator validators[] = {
{ C.eristaCpuBoostClock, 1020'000, 2295'000, true },
{ C.marikoCpuBoostClock, 1020'000, 2703'000, true },
{ C.commonEmcMemVolt, 912'500, 1350'000 }, // Official burst vmax for the RAMs is 1500mV
{ C.eristaCpuMaxVolt, 1000, 1257 },
{ GET_MAX_OF_ARR(erista::maxEmcClocks), 1600'000, 2600'000 },
{ C.marikoCpuMaxVolt, 1000, 1235 },
{ C.eristaCpuBoostClock, 1020'000, 3009'000, true },
{ C.marikoCpuBoostClock, 1020'000, 3009'000, true },
{ C.commonEmcMemVolt, 912'500, 1500'000 }, // Official burst vmax for the RAMs is 1500mV
{ C.eristaCpuMaxVolt, 1000, 1500 },
{ GET_MAX_OF_ARR(erista::maxEmcClocks), 1600'000, 2700'000 },
{ C.marikoCpuMaxVolt, 1000, 1500 },
{ C.marikoEmcMaxClock, 1600'000, 3500'000 },
{ C.marikoEmcVddqVolt, 250'000, 700'000 },
{ eristaCpuDvfsMaxFreq, 1785'000, 2295'000 },
{ marikoCpuDvfsMaxFreq, 1785'000, 2703'000 },
{ eristaGpuDvfsMaxFreq, 768'000, 1152'000 },
{ C.marikoEmcVddqVolt, 250'000, 1500'000 },
{ eristaCpuDvfsMaxFreq, 1785'000, 3009'000 },
{ marikoCpuDvfsMaxFreq, 1785'000, 3009'000 },
{ eristaGpuDvfsMaxFreq, 768'000, 1536'000 },
{ marikoGpuDvfsMaxFreq, 768'000, 1536'000 },
};

View File

@@ -58,7 +58,7 @@ namespace ams::ldr::hoc::pcv {
static const u32 cpuVoltThermalData[] = { 620, 1120, 20000, 620, 1120, 70000, 950, 1132, 0, 950, 1227, 0 };
static const u32 allowedCpuMaxFrequencies[] = { 1'963'000, 2'091'000, 2'193'000, 2'295'000, 2'397'000, 2'499'000, 2'601'000, 2'703'000, };
static const u32 allowedCpuMaxFrequencies[] = { 1'963'000, 2'091'000, 2'193'000, 2'295'000, 2'397'000, 2'499'000, 2'601'000, 2'703'000, 2'805'000, 2'907'000, 3'009'000, };
constexpr cvb_entry_t GpuCvbTableDefault[] = {
// GPUB01_NA_CVB_TABLE
@@ -202,21 +202,25 @@ namespace ams::ldr::hoc::pcv {
{ },
};
constexpr u32 CpuVoltOfficial = 1235;
constexpr u32 CpuVminOfficial = 825;
constexpr u32 CpuVoltL4T = 1235'000;
constexpr u16 CpuMinVolts[] = { 950, 850, 825, 810 };
inline bool CpuMaxVoltPatternFn(u32* ptr32) {
u32 val = *ptr32;
return (val == 1132 || val == 1170 || val == 1227);
}
static const u32 cpuVoltDvfsPattern[] = { 1227, 1000, 100, 1000, 0 };
static const u32 cpuVoltDvfsOffsets[] = { 5, 6, 7, 8, 9 };
static_assert(sizeof(cpuVoltDvfsPattern) == sizeof(cpuVoltDvfsOffsets), "Invalid cpuVoltDvfsPattern");
static const u32 cpuVoltageThermalPattern[] = { 950, 1132, 0, 950, 1227, 0, 825, 1227, 15000, 825, 1170, 60000, 825, 1132, 80000 };
static_assert(sizeof(cpuVoltageThermalPattern) == 0x3c, "invalid cpuVoltageThermalPattern size");
constexpr u32 GpuClkPllLimit = 921'600'000;
constexpr u32 GpuClkPllLimit = 2'600'000;
constexpr u32 GpuClkPllMax = 921'600'000;
constexpr u32 GpuVminOfficial = 810;
static const u32 gpuVoltDvfsPattern[] = { 810, 1150, 1000, 100, 1000, 10, };

View File

@@ -167,20 +167,6 @@ namespace ams::ldr::hoc::pcv::erista {
R_SUCCEED();
}
Result GpuFreqPllLimit(u32 *ptr) {
clk_pll_param *entry = reinterpret_cast<clk_pll_param *>(ptr);
// All zero except for freq
for (size_t i = 1; i < sizeof(clk_pll_param) / sizeof(u32); i++) {
R_UNLESS(*(ptr + i) == 0, ldr::ResultInvalidGpuPllEntry());
}
// Double the max clk simply
u32 max_clk = entry->freq * 2;
entry->freq = max_clk;
R_SUCCEED();
}
/* Note: This does not have proper timings, so base latency adjustment will not work. */
/* However, it may still achieve a slightly higher frequency, but not as much as it could be. */
/* I'm certainly not insane enough to attempt this pain again, so this will have to do *for now*. */
@@ -285,7 +271,7 @@ namespace ams::ldr::hoc::pcv::erista {
// WRITE_PARAM_ALL_REG(table, emc_tr_rdv, rdv);
// ams::ldr::hoc::pcv::mariko::CalculateMrw2();
// table->emc_mrw2 = (table->emc_mrw2 & ~0xFFu) | static_cast<u32>(mrw2);
// table->dram_timings.rl = RL_DBI;
// table->dram_timings.rl = RL;
/* This needs some clean up. */
constexpr double MC_ARB_DIV = 4.0;
@@ -421,18 +407,60 @@ namespace ams::ldr::hoc::pcv::erista {
R_SUCCEED();
}
Result CpuVoltRange(u32* ptr) {
u32 min_volt_got = *(ptr - 1);
for (const auto& mv : CpuMinVolts) {
if (min_volt_got != mv)
continue;
if (!C.eristaCpuMaxVolt)
R_SKIP();
PATCH_OFFSET(ptr, C.eristaCpuMaxVolt);
R_SUCCEED();
}
R_THROW(ldr::ResultInvalidCpuMinVolt());
}
Result GpuFreqPllMax(u32 *ptr) {
clk_pll_param *entry = reinterpret_cast<clk_pll_param *>(ptr);
// All zero except for freq
for (size_t i = 1; i < sizeof(clk_pll_param) / sizeof(u32); i++) {
R_UNLESS(*(ptr + i) == 0, ldr::ResultInvalidGpuPllEntry());
}
// Double the max clk simply
u32 max_clk = entry->freq * 2;
entry->freq = max_clk;
R_SUCCEED();
}
Result GpuFreqPllLimit(u32 *ptr) {
u32 prev_freq = *(ptr - 1);
if (prev_freq != 128000 && prev_freq != 1300000 && prev_freq != 76800) {
R_THROW(ldr::ResultInvalidGpuPllEntry());
}
PATCH_OFFSET(ptr, 3600000);
R_SUCCEED();
}
void Patch(uintptr_t mapped_nso, size_t nso_size) {
PatcherEntry<u32> patches[] = {
{"CPU Freq Table", CpuFreqCvbTable<false>, 1, nullptr, static_cast<u32>(GetDvfsTableLastEntry(CpuCvbTableDefault)->freq)},
{"CPU Volt DVFS", &CpuVoltDvfs, 1, nullptr, 825},
{"CPU Volt Limit", &CpuVoltRange, 0, &CpuMaxVoltPatternFn},
{"CPU Volt Thermals", &CpuVoltThermals, 1, nullptr, 825},
{"CPU Volt Dfll", &CpuVoltDfll, 1, nullptr, 0xFFEAD0FF},
{"GPU Volt DVFS", &GpuVoltDVFS, 1, nullptr, 810},
{"GPU Volt Thermals", &GpuVoltThermals, 1, nullptr, 810},
{"GPU Freq Table", GpuFreqCvbTable<false>, 1, nullptr, static_cast<u32>(GetDvfsTableLastEntry(GpuCvbTableDefault)->freq)},
{"GPU Freq Asm", &GpuFreqMaxAsm, 2, &GpuMaxClockPatternFn},
{"GPU Freq PLL", &GpuFreqPllLimit, 1, nullptr, GpuClkPllLimit},
{"GPU PLL Max", &GpuFreqPllMax, 1, nullptr, GpuClkPllMax},
{"GPU PLL Limit", &GpuFreqPllLimit, 4, nullptr, GpuClkPllLimit},
{"MEM Freq Mtc", &MemFreqMtcTable, 0, nullptr, EmcClkOSLimit},
{"MEM Freq Max", &MemFreqMax, 0, nullptr, EmcClkOSLimit},
{"MEM Freq PLLM", &MemFreqPllmLimit, 2, nullptr, EmcClkPllmLimit},

View File

@@ -568,7 +568,7 @@ namespace ams::ldr::hoc::pcv::mariko {
table->dram_timings.t_rp = tRFCpb;
table->dram_timings.t_rfc = tRFCab;
table->dram_timings.rl = RL_DBI;
table->dram_timings.rl = RL;
table->emc_mrw2 = (table->emc_mrw2 & ~0xFFu) | static_cast<u32>(mrw2);
table->emc_cfg_2 = 0x11083D;

View File

@@ -135,34 +135,38 @@ typedef enum {
KipConfigValue_g_volt_1459200,
KipConfigValue_g_volt_1497600,
KipConfigValue_g_volt_1536000,
KipConfigValue_g_volt_1574400,
KipConfigValue_g_volt_1612800,
KipConfigValue_g_volt_1651200,
KipConfigValue_g_volt_1689600,
KipConfigValue_g_volt_1728000,
KipConfigValue_g_volt_1766400,
KipConfigValue_g_volt_1804800,
KipConfigValue_g_volt_e_76800,
KipConfigValue_g_volt_e_115200,
KipConfigValue_g_volt_e_153600,
KipConfigValue_g_volt_e_192000,
KipConfigValue_g_volt_e_230400,
KipConfigValue_g_volt_e_268800,
KipConfigValue_g_volt_e_307200,
KipConfigValue_g_volt_e_345600,
KipConfigValue_g_volt_e_384000,
KipConfigValue_g_volt_e_422400,
KipConfigValue_g_volt_e_460800,
KipConfigValue_g_volt_e_499200,
KipConfigValue_g_volt_e_537600,
KipConfigValue_g_volt_e_576000,
KipConfigValue_g_volt_e_614400,
KipConfigValue_g_volt_e_652800,
KipConfigValue_g_volt_e_691200,
KipConfigValue_g_volt_e_729600,
KipConfigValue_g_volt_e_768000,
KipConfigValue_g_volt_e_806400,
KipConfigValue_g_volt_e_844800,
KipConfigValue_g_volt_e_883200,
KipConfigValue_g_volt_e_921600,
KipConfigValue_g_volt_e_960000,
KipConfigValue_g_volt_e_998400,
KipConfigValue_g_volt_e_1036800,
KipConfigValue_g_volt_e_1075200,
KipConfigValue_g_volt_e_1152000,
KipConfigValue_g_volt_e_1228800,
KipConfigValue_g_volt_e_1267200,
KipConfigValue_g_volt_e_1305600,
KipConfigValue_g_volt_e_1344000,
KipConfigValue_g_volt_e_1382400,
KipConfigValue_g_volt_e_1420800,
KipConfigValue_g_volt_e_1459200,
KipConfigValue_g_volt_e_1497600,
KipConfigValue_g_volt_e_1536000,
KipConfigValue_t6_tRTW_fine_tune,
KipConfigValue_t7_tWTR_fine_tune,
@@ -366,35 +370,41 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr
case KipConfigValue_g_volt_1459200: return pretty ? "Mariko GPU Volt 1459 MHz" : "g_volt_1459200";
case KipConfigValue_g_volt_1497600: return pretty ? "Mariko GPU Volt 1497 MHz" : "g_volt_1497600";
case KipConfigValue_g_volt_1536000: return pretty ? "Mariko GPU Volt 1536 MHz" : "g_volt_1536000";
case KipConfigValue_g_volt_1574400: return pretty ? "Mariko GPU Volt 1574 MHz" : "g_volt_1574400";
case KipConfigValue_g_volt_1612800: return pretty ? "Mariko GPU Volt 1612 MHz" : "g_volt_1612800";
case KipConfigValue_g_volt_1651200: return pretty ? "Mariko GPU Volt 1651 MHz" : "g_volt_1651200";
case KipConfigValue_g_volt_1689600: return pretty ? "Mariko GPU Volt 1689 MHz" : "g_volt_1689600";
case KipConfigValue_g_volt_1728000: return pretty ? "Mariko GPU Volt 1728 MHz" : "g_volt_1728000";
case KipConfigValue_g_volt_1766400: return pretty ? "Mariko GPU Volt 1766 MHz" : "g_volt_1766400";
case KipConfigValue_g_volt_1804800: return pretty ? "Mariko GPU Volt 1804 MHz" : "g_volt_1804800";
// Erista GPU voltages (27)
case KipConfigValue_g_volt_e_76800: return pretty ? "Erista GPU Volt 76 MHz" : "g_volt_e_76800";
case KipConfigValue_g_volt_e_115200: return pretty ? "Erista GPU Volt 115 MHz" : "g_volt_e_115200";
case KipConfigValue_g_volt_e_153600: return pretty ? "Erista GPU Volt 153 MHz" : "g_volt_e_153600";
case KipConfigValue_g_volt_e_192000: return pretty ? "Erista GPU Volt 192 MHz" : "g_volt_e_192000";
case KipConfigValue_g_volt_e_230400: return pretty ? "Erista GPU Volt 230 MHz" : "g_volt_e_230400";
case KipConfigValue_g_volt_e_268800: return pretty ? "Erista GPU Volt 268 MHz" : "g_volt_e_268800";
case KipConfigValue_g_volt_e_307200: return pretty ? "Erista GPU Volt 307 MHz" : "g_volt_e_307200";
case KipConfigValue_g_volt_e_345600: return pretty ? "Erista GPU Volt 345 MHz" : "g_volt_e_345600";
case KipConfigValue_g_volt_e_384000: return pretty ? "Erista GPU Volt 384 MHz" : "g_volt_e_384000";
case KipConfigValue_g_volt_e_422400: return pretty ? "Erista GPU Volt 422 MHz" : "g_volt_e_422400";
case KipConfigValue_g_volt_e_460800: return pretty ? "Erista GPU Volt 460 MHz" : "g_volt_e_460800";
case KipConfigValue_g_volt_e_499200: return pretty ? "Erista GPU Volt 499 MHz" : "g_volt_e_499200";
case KipConfigValue_g_volt_e_537600: return pretty ? "Erista GPU Volt 537 MHz" : "g_volt_e_537600";
case KipConfigValue_g_volt_e_576000: return pretty ? "Erista GPU Volt 576 MHz" : "g_volt_e_576000";
case KipConfigValue_g_volt_e_614400: return pretty ? "Erista GPU Volt 614 MHz" : "g_volt_e_614400";
case KipConfigValue_g_volt_e_652800: return pretty ? "Erista GPU Volt 652 MHz" : "g_volt_e_652800";
case KipConfigValue_g_volt_e_691200: return pretty ? "Erista GPU Volt 691 MHz" : "g_volt_e_691200";
case KipConfigValue_g_volt_e_729600: return pretty ? "Erista GPU Volt 729 MHz" : "g_volt_e_729600";
case KipConfigValue_g_volt_e_768000: return pretty ? "Erista GPU Volt 768 MHz" : "g_volt_e_768000";
case KipConfigValue_g_volt_e_806400: return pretty ? "Erista GPU Volt 806 MHz" : "g_volt_e_806400";
case KipConfigValue_g_volt_e_844800: return pretty ? "Erista GPU Volt 844 MHz" : "g_volt_e_844800";
case KipConfigValue_g_volt_e_883200: return pretty ? "Erista GPU Volt 883 MHz" : "g_volt_e_883200";
case KipConfigValue_g_volt_e_921600: return pretty ? "Erista GPU Volt 921 MHz" : "g_volt_e_921600";
case KipConfigValue_g_volt_e_960000: return pretty ? "Erista GPU Volt 960 MHz" : "g_volt_e_960000";
case KipConfigValue_g_volt_e_998400: return pretty ? "Erista GPU Volt 998 MHz" : "g_volt_e_998400";
case KipConfigValue_g_volt_e_1036800: return pretty ? "Erista GPU Volt 1036 MHz" : "g_volt_e_1036800";
case KipConfigValue_g_volt_e_1075200: return pretty ? "Erista GPU Volt 1075 MHz" : "g_volt_e_1075200";
case KipConfigValue_g_volt_e_1152000: return pretty ? "Erista GPU Volt 1152 MHz" : "g_volt_e_1152000";
case KipConfigValue_g_volt_e_1228800: return pretty ? "Erista GPU Volt 1228 MHz" : "g_volt_e_1228800";
case KipConfigValue_g_volt_e_1267200: return pretty ? "Erista GPU Volt 1267 MHz" : "g_volt_e_1267200";
case KipConfigValue_g_volt_e_1305600: return pretty ? "Erista GPU Volt 1305 MHz" : "g_volt_e_1305600";
case KipConfigValue_g_volt_e_1344000: return pretty ? "Erista GPU Volt 1344 MHz" : "g_volt_e_1344000";
case KipConfigValue_g_volt_e_1382400: return pretty ? "Erista GPU Volt 1382 MHz" : "g_volt_e_1382400";
case KipConfigValue_g_volt_e_1420800: return pretty ? "Erista GPU Volt 1420 MHz" : "g_volt_e_1420800";
case KipConfigValue_g_volt_e_1459200: return pretty ? "Erista GPU Volt 1459 MHz" : "g_volt_e_1459200";
case KipConfigValue_g_volt_e_1497600: return pretty ? "Erista GPU Volt 1497 MHz" : "g_volt_e_1497600";
case KipConfigValue_g_volt_e_1536000: return pretty ? "Erista GPU Volt 1536 MHz" : "g_volt_e_1536000";
case KipConfigValue_t6_tRTW_fine_tune: return pretty ? "t6 - tRTW Fine Tune" : "t6_tRTW_fine_fune";
case KipConfigValue_t7_tWTR_fine_tune: return pretty ? "t7 - tWTR Fine Tune" : "t7_tWTR_fine_tune";
case KipCrc32:
@@ -416,8 +426,6 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
case SysClkConfigValue_FreqLogIntervalMs:
case SysClkConfigValue_PowerLogIntervalMs:
case SysClkConfigValue_CsvWriteIntervalMs:
case HocClkConfigValue_UncappedClocks:
case HocClkConfigValue_OverwriteBoostMode:
case HorizonOCConfigValue_BatteryChargeCurrent:
case HorizonOCConfigValue_OverwriteRefreshRate:
case HorizonOCConfigValue_EnableUnsafeDisplayFreqs:
@@ -430,11 +438,11 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
case HocClkConfigValue_MarikoMaxCpuClock:
return 1963ULL;
case HocClkConfigValue_ThermalThrottle:
case HocClkConfigValue_HandheldTDP:
case HocClkConfigValue_UncappedClocks:
case HocClkConfigValue_OverwriteBoostMode:
case HocClkConfigValue_IsFirstLoad:
case HorizonOCConfigValue_DVFSMode:
case HorizonOCConfigValue_EnableExperimentalSettings:
return 1ULL;
case HocClkConfigValue_ThermalThrottleThreshold:
return 70ULL;
@@ -513,57 +521,6 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
case KipConfigValue_marikoGpuVmax:
case KipConfigValue_commonGpuVoltOffset:
case KipConfigValue_gpuSpeedo:
case KipConfigValue_g_volt_76800:
case KipConfigValue_g_volt_153600:
case KipConfigValue_g_volt_230400:
case KipConfigValue_g_volt_307200:
case KipConfigValue_g_volt_384000:
case KipConfigValue_g_volt_460800:
case KipConfigValue_g_volt_537600:
case KipConfigValue_g_volt_614400:
case KipConfigValue_g_volt_691200:
case KipConfigValue_g_volt_768000:
case KipConfigValue_g_volt_844800:
case KipConfigValue_g_volt_921600:
case KipConfigValue_g_volt_998400:
case KipConfigValue_g_volt_1075200:
case KipConfigValue_g_volt_1152000:
case KipConfigValue_g_volt_1228800:
case KipConfigValue_g_volt_1267200:
case KipConfigValue_g_volt_1305600:
case KipConfigValue_g_volt_1344000:
case KipConfigValue_g_volt_1382400:
case KipConfigValue_g_volt_1420800:
case KipConfigValue_g_volt_1459200:
case KipConfigValue_g_volt_1497600:
case KipConfigValue_g_volt_1536000:
case KipConfigValue_g_volt_e_76800:
case KipConfigValue_g_volt_e_115200:
case KipConfigValue_g_volt_e_153600:
case KipConfigValue_g_volt_e_192000:
case KipConfigValue_g_volt_e_230400:
case KipConfigValue_g_volt_e_268800:
case KipConfigValue_g_volt_e_307200:
case KipConfigValue_g_volt_e_345600:
case KipConfigValue_g_volt_e_384000:
case KipConfigValue_g_volt_e_422400:
case KipConfigValue_g_volt_e_460800:
case KipConfigValue_g_volt_e_499200:
case KipConfigValue_g_volt_e_537600:
case KipConfigValue_g_volt_e_576000:
case KipConfigValue_g_volt_e_614400:
case KipConfigValue_g_volt_e_652800:
case KipConfigValue_g_volt_e_691200:
case KipConfigValue_g_volt_e_729600:
case KipConfigValue_g_volt_e_768000:
case KipConfigValue_g_volt_e_806400:
case KipConfigValue_g_volt_e_844800:
case KipConfigValue_g_volt_e_883200:
case KipConfigValue_g_volt_e_921600:
case KipConfigValue_g_volt_e_960000:
case KipConfigValue_g_volt_e_998400:
case KipConfigValue_g_volt_e_1036800:
case KipConfigValue_g_volt_e_1075200:
case KipConfigValue_eristaCpuVmin:
case KipConfigValue_eristaCpuUnlock:
case KipConfigValue_t6_tRTW_fine_tune:
@@ -573,9 +530,7 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
case HorizonOCConfigValue_DVFSOffset:
case HorizonOCConfigValue_GPUScheduling:
return true;
case HorizonOCConfigValue_BatteryChargeCurrent:
return ((input >= 1024) && (input <= 3072)) || !input;
default:
return false;
return true;
}
}

View File

@@ -366,15 +366,20 @@ void AppProfileGui::addProfileUI(SysClkProfile profile)
}
}
#endif
std::vector<NamedValue> governorSettings = {
std::vector<NamedValue> governorSettingsE = {
NamedValue("Do Not Override", GovernorState_DoNotOverride),
NamedValue("Disabled", GovernorState_Disabled),
NamedValue("CPU + GPU", GovernorState_Enabled_CpuGpu),
NamedValue("CPU", GovernorState_Enabled_Cpu),
NamedValue("GPU", GovernorState_Enabled_Gpu),
};
this->addModuleListItemValue(profile, HorizonOCModule_Governor, "Governor", 0, 0, 1, "", 1, 0, ValueThresholds(), governorSettings, false);
std::vector<NamedValue> governorSettings = {
NamedValue("Do Not Override", GovernorState_DoNotOverride),
NamedValue("Disabled", GovernorState_Disabled),
NamedValue("GPU", GovernorState_Enabled_Gpu),
};
this->addModuleListItemValue(profile, HorizonOCModule_Governor, "Governor", 0, 0, 1, "", 1, 0, ValueThresholds(), configList.values[HorizonOCConfigValue_EnableExperimentalSettings] ?governorSettingsE : governorSettings, false);
}
void AppProfileGui::listUI()

View File

@@ -310,15 +310,20 @@ void GlobalOverrideGui::listUI()
this->addModuleListItemValue(HorizonOCModule_Display, "Display", IsAula() ? 45 : 40, configList.values[HorizonOCConfigValue_EnableUnsafeDisplayFreqs] ? IsAula() ? 65 : 72 : 60, 1, " Hz", 1, 0, lcdThresholds);
#endif
std::vector<NamedValue> governorSettings = {
std::vector<NamedValue> governorSettingsE = {
NamedValue("Do Not Override", GovernorState_DoNotOverride),
NamedValue("Disabled", GovernorState_Disabled),
NamedValue("CPU + GPU", GovernorState_Enabled_CpuGpu),
NamedValue("CPU", GovernorState_Enabled_Cpu),
NamedValue("GPU", GovernorState_Enabled_Gpu),
};
this->addModuleListItemValue(HorizonOCModule_Governor, "Governor", 0, 0, 1, "", 1, 0, ValueThresholds(), governorSettings, false);
std::vector<NamedValue> governorSettings = {
NamedValue("Do Not Override", GovernorState_DoNotOverride),
NamedValue("Disabled", GovernorState_Disabled),
NamedValue("GPU", GovernorState_Enabled_Gpu),
};
this->addModuleListItemValue(HorizonOCModule_Governor, "Governor", 0, 0, 1, "", 1, 0, ValueThresholds(), configList.values[HorizonOCConfigValue_EnableExperimentalSettings] ?governorSettingsE : governorSettings, false);
}
void GlobalOverrideGui::refresh()

View File

@@ -393,19 +393,11 @@ void MiscGui::listUI()
return false;
});
this->listElement->addItem(gpuSubmenu);
if(!IsHoag()) {
this->listElement->addItem(new tsl::elm::CategoryHeader("Display"));
addConfigToggle(HorizonOCConfigValue_OverwriteRefreshRate, nullptr);
tsl::elm::CustomDrawer* warningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) {
renderer->drawString("\uE150 Enabling unsafe display", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
renderer->drawString("refresh rates may cause stress", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
renderer->drawString("or damage to your display! ", false, x + 20, y + 70, 18, tsl::style::color::ColorText);
renderer->drawString("Proceed at your own risk!", false, x + 20, y + 90, 18, tsl::style::color::ColorText);
});
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 110);
this->listElement->addItem(warningText);
addConfigToggle(HorizonOCConfigValue_EnableUnsafeDisplayFreqs, nullptr);
addConfigToggle(HorizonOCConfigValue_OverwriteRefreshRate, nullptr);
addConfigToggle(HorizonOCConfigValue_EnableUnsafeDisplayFreqs, nullptr);
}
#if IS_MINIMAL == 0
// std::vector<NamedValue> chargerCurrents = {
// NamedValue("Disabled", 0),
@@ -437,70 +429,39 @@ void MiscGui::listUI()
gpuSchedMethodValues,
false
);
tsl::elm::CustomDrawer* chargeWarningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) {
renderer->drawString("\uE150 Overriding the charge current", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
renderer->drawString("can be dangerous and may cause", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
renderer->drawString("damage to your battery or charger!", false, x + 20, y + 70, 18, tsl::style::color::ColorText);
});
chargeWarningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 90);
this->listElement->addItem(chargeWarningText);
if(!IsHoag()) {
std::vector<NamedValue> chargerCurrents = {
NamedValue("Disabled", 0),
NamedValue("1024mA", 1024),
NamedValue("1280mA", 1280),
NamedValue("1536mA", 1536),
NamedValue("1792mA", 1792),
NamedValue("2048mA", 2048),
NamedValue("2304mA", 2304),
NamedValue("2560mA", 2560),
NamedValue("2816mA", 2816),
NamedValue("3072mA", 3072),
};
std::vector<NamedValue> chargerCurrents = {
NamedValue("Disabled", 0),
NamedValue("1024mA", 1024),
NamedValue("1280mA", 1280),
NamedValue("1536mA", 1536),
NamedValue("1792mA", 1792),
NamedValue("2048mA", 2048),
NamedValue("2304mA", 2304),
NamedValue("2560mA", 2560),
NamedValue("2816mA", 2816),
NamedValue("3072mA", 3072),
NamedValue("3328mA", 3328),
NamedValue("3840mA", 3840),
NamedValue("4096mA", 4096),
NamedValue("4352mA", 4352),
NamedValue("4608mA", 4608),
};
ValueThresholds chargerThresholds(2048, 2049);
ValueThresholds chargerThresholds(2048, 2049);
addConfigButton(
HorizonOCConfigValue_BatteryChargeCurrent,
"Charge Current Override",
ValueRange(0, 0, 1, "", 0),
"Charge Current Override",
&chargerThresholds,
{},
chargerCurrents,
false
);
}
else {
std::vector<NamedValue> chargerCurrents = {
NamedValue("Disabled", 0),
NamedValue("1024mA", 1024),
NamedValue("1280mA", 1280),
NamedValue("1536mA", 1536),
NamedValue("1792mA", 1792),
NamedValue("2048mA", 2048),
NamedValue("2304mA", 2304),
NamedValue("2560mA", 2560),
};
ValueThresholds chargerThresholds(1792, 1793);
addConfigButton(
HorizonOCConfigValue_BatteryChargeCurrent,
"Charge Current Override",
ValueRange(0, 0, 1, "", 0),
"Charge Current Override",
&chargerThresholds,
{},
chargerCurrents,
false
);
}
addConfigButton(
HorizonOCConfigValue_BatteryChargeCurrent,
"Charge Current Override",
ValueRange(0, 0, 1, "", 0),
"Charge Current Override",
&chargerThresholds,
{},
chargerCurrents,
false
);
}
#endif
}
@@ -573,12 +534,12 @@ protected:
NamedValue("3233MHz", 3233000, "High speedo needed!"),
NamedValue("3266MHz", 3266000, "High speedo needed!"),
NamedValue("3300MHz", 3300000, "High speedo needed!"),
// NamedValue("3333MHz (Needs extreme Speedo/PLL)", 3333000),
// NamedValue("3366MHz (Needs extreme Speedo/PLL)", 3366000),
// NamedValue("3400MHz (Needs extreme Speedo/PLL)", 3400000),
// NamedValue("3433MHz (Needs ridiculous Speedo/PLL)", 3433000),
// NamedValue("3466MHz (Needs ridiculous Speedo/PLL)", 3466000),
// NamedValue("3500MHz (Needs ridiculous Speedo/PLL)", 3500000),
NamedValue("3333MHz", 3333000, "High speedo needed!"),
NamedValue("3366MHz", 3366000, "High speedo needed!"),
NamedValue("3400MHz", 3400000, "High speedo needed!"),
NamedValue("3433MHz", 3433000, "High speedo needed!"),
NamedValue("3466MHz", 3466000, "High speedo needed!"),
NamedValue("3500MHz", 3500000, "High speedo needed!"),
};
std::vector<NamedValue> eristaMaxEmcClock = {
@@ -619,6 +580,21 @@ protected:
NamedValue("2361MHz", 2361600),
NamedValue("2380MHz", 2380800),
NamedValue("2400MHz", 2400000, "JEDEC."),
NamedValue("2423MHz", 2423200),
NamedValue("2442MHz", 2442400),
NamedValue("2461MHz", 2461600),
NamedValue("2480MHz", 2480800),
NamedValue("2500MHz", 2500000),
NamedValue("2523MHz", 2523200),
NamedValue("2542MHz", 2542400),
NamedValue("2561MHz", 2561600),
NamedValue("2580MHz", 2580800),
NamedValue("2600MHz", 2600000),
NamedValue("2623MHz", 2623200),
NamedValue("2642MHz", 2642400),
NamedValue("2661MHz", 2661600),
NamedValue("2680MHz", 2680800),
NamedValue("2700MHz", 2700000),
};
if(IsErista()) {
@@ -651,7 +627,7 @@ protected:
addConfigButton(
KipConfigValue_commonEmcMemVolt,
"RAM VDD2 Voltage",
ValueRange(912500, 1350000, 12500, "mV", 1000, 1),
ValueRange(912500, 1500000, 12500, "mV", 1000, 1),
"Voltage",
&vdd2Thresholds,
emc_voltage_label,
@@ -663,7 +639,7 @@ protected:
addConfigButton(
KipConfigValue_marikoEmcVddqVolt,
"RAM VDDQ Voltage",
ValueRange(400000, 700000, 5000, "mV", 1000),
ValueRange(400000, 1500000, 5000, "mV", 1000),
"RAM VDDQ Voltage",
&thresholdsDisabled,
{},
@@ -835,6 +811,10 @@ protected:
NamedValue("2091 MHz", 2091000),
NamedValue("2193 MHz", 2193000),
NamedValue("2295 MHz", 2295000),
NamedValue("2397 MHz", 2797000),
NamedValue("2499 MHz", 2499000),
NamedValue("2601 MHz", 2601000),
NamedValue("2703 MHz", 2703000),
};
ValueThresholds eCpuClockThresholds(1785000, 2091000);
addConfigButton(
@@ -874,7 +854,7 @@ protected:
addConfigButton(
KipConfigValue_eristaCpuMaxVolt,
"CPU Max Voltage",
ValueRange(1120, 1235, 5, "mV", 1),
ValueRange(1120, 1525, 5, "mV", 1),
"CPU Max Voltage",
&thresholdsDisabled,
{},
@@ -932,6 +912,9 @@ protected:
NamedValue("2499 MHz", 2499000),
NamedValue("2601 MHz", 2601000),
NamedValue("2703 MHz", 2703000),
NamedValue("2805 MHz", 2805000),
NamedValue("2907 MHz", 2907000),
NamedValue("3009 MHz", 3009000),
};
ValueThresholds mCpuMaxClockThresholds(1963000, 2397000);
addConfigButton(
@@ -971,7 +954,7 @@ protected:
addConfigButton(
KipConfigValue_marikoCpuMaxVolt,
"CPU Max Voltage",
ValueRange(1000, 1235, 5, "mV", 1),
ValueRange(1000, 1525, 5, "mV", 1),
"CPU Max Voltage",
&mCpuVoltThresholds,
{},
@@ -1076,7 +1059,7 @@ protected:
addConfigButton(
KipConfigValue_marikoGpuVmax,
"GPU Maximum Voltage",
ValueRange(750, 960, 5, "mV", 1),
ValueRange(750, 1525, 5, "mV", 1),
"GPU Maximum Voltage",
&MgpuVmaxThresholds,
{},
@@ -1161,32 +1144,67 @@ protected:
NamedValue("915mV", 915), NamedValue("920mV", 920), NamedValue("925mV", 925),
NamedValue("930mV", 930), NamedValue("935mV", 935), NamedValue("940mV", 940),
NamedValue("945mV", 945), NamedValue("950mV", 950), NamedValue("955mV", 955),
NamedValue("960mV", 960),
NamedValue("960mV", 960), NamedValue("965mV", 965), NamedValue("970mV", 970),
NamedValue("975mV", 975), NamedValue("980mV", 980), NamedValue("985mV", 985),
NamedValue("990mV", 990), NamedValue("995mV", 995), NamedValue("1000mV", 1000),
NamedValue("1005mV", 1005), NamedValue("1010mV", 1010), NamedValue("1015mV", 1015),
NamedValue("1020mV", 1020), NamedValue("1025mV", 1025), NamedValue("1030mV", 1030),
NamedValue("1035mV", 1035), NamedValue("1040mV", 1040), NamedValue("1045mV", 1045),
NamedValue("1050mV", 1050), NamedValue("1055mV", 1055), NamedValue("1060mV", 1060),
NamedValue("1065mV", 1065), NamedValue("1070mV", 1070), NamedValue("1075mV", 1075),
NamedValue("1080mV", 1080), NamedValue("1085mV", 1085), NamedValue("1090mV", 1090),
NamedValue("1095mV", 1095), NamedValue("1100mV", 1100), NamedValue("1105mV", 1105),
NamedValue("1110mV", 1110), NamedValue("1115mV", 1115), NamedValue("1120mV", 1120),
NamedValue("1125mV", 1125), NamedValue("1130mV", 1130)
};
std::vector<NamedValue> eGpuVolts = {
NamedValue("Disabled", 2000),
NamedValue("Auto", 0),
NamedValue("700mV", 700), NamedValue("705mV", 705), NamedValue("710mV", 710),
NamedValue("715mV", 715), NamedValue("720mV", 720), NamedValue("725mV", 725),
NamedValue("730mV", 730), NamedValue("735mV", 735), NamedValue("740mV", 740),
NamedValue("745mV", 745), NamedValue("750mV", 750), NamedValue("755mV", 755),
NamedValue("760mV", 760), NamedValue("765mV", 765), NamedValue("770mV", 770),
NamedValue("775mV", 775), NamedValue("780mV", 780), NamedValue("785mV", 785),
NamedValue("790mV", 790), NamedValue("795mV", 795), NamedValue("800mV", 800),
NamedValue("805mV", 805), NamedValue("810mV", 810), NamedValue("815mV", 815),
NamedValue("820mV", 820), NamedValue("825mV", 825), NamedValue("830mV", 830),
NamedValue("835mV", 835), NamedValue("840mV", 840), NamedValue("845mV", 845),
NamedValue("850mV", 850), NamedValue("855mV", 855), NamedValue("860mV", 860),
NamedValue("865mV", 865), NamedValue("870mV", 870), NamedValue("875mV", 875),
NamedValue("880mV", 880), NamedValue("885mV", 885), NamedValue("890mV", 890),
NamedValue("895mV", 895), NamedValue("900mV", 900), NamedValue("905mV", 905),
NamedValue("910mV", 910), NamedValue("915mV", 915), NamedValue("920mV", 920),
NamedValue("925mV", 925), NamedValue("930mV", 930), NamedValue("935mV", 935),
NamedValue("940mV", 940), NamedValue("945mV", 945), NamedValue("950mV", 950),
NamedValue("955mV", 955), NamedValue("960mV", 960), NamedValue("965mV", 965),
NamedValue("970mV", 970), NamedValue("975mV", 975), NamedValue("980mV", 980),
NamedValue("985mV", 985), NamedValue("990mV", 990), NamedValue("995mV", 995),
NamedValue("480mV", 480), NamedValue("485mV", 485), NamedValue("490mV", 490),
NamedValue("495mV", 495), NamedValue("500mV", 500), NamedValue("505mV", 505),
NamedValue("510mV", 510), NamedValue("515mV", 515), NamedValue("520mV", 520),
NamedValue("525mV", 525), NamedValue("530mV", 530), NamedValue("535mV", 535),
NamedValue("540mV", 540), NamedValue("545mV", 545), NamedValue("550mV", 550),
NamedValue("555mV", 555), NamedValue("560mV", 560), NamedValue("565mV", 565),
NamedValue("570mV", 570), NamedValue("575mV", 575), NamedValue("580mV", 580),
NamedValue("585mV", 585), NamedValue("590mV", 590), NamedValue("595mV", 595),
NamedValue("600mV", 600), NamedValue("605mV", 605), NamedValue("610mV", 610),
NamedValue("615mV", 615), NamedValue("620mV", 620), NamedValue("625mV", 625),
NamedValue("630mV", 630), NamedValue("635mV", 635), NamedValue("640mV", 640),
NamedValue("645mV", 645), NamedValue("650mV", 650), NamedValue("655mV", 655),
NamedValue("660mV", 660), NamedValue("665mV", 665), NamedValue("670mV", 670),
NamedValue("675mV", 675), NamedValue("680mV", 680), NamedValue("685mV", 685),
NamedValue("690mV", 690), NamedValue("695mV", 695), NamedValue("700mV", 700),
NamedValue("705mV", 705), NamedValue("710mV", 710), NamedValue("715mV", 715),
NamedValue("720mV", 720), NamedValue("725mV", 725), NamedValue("730mV", 730),
NamedValue("735mV", 735), NamedValue("740mV", 740), NamedValue("745mV", 745),
NamedValue("750mV", 750), NamedValue("755mV", 755), NamedValue("760mV", 760),
NamedValue("765mV", 765), NamedValue("770mV", 770), NamedValue("775mV", 775),
NamedValue("780mV", 780), NamedValue("785mV", 785), NamedValue("790mV", 790),
NamedValue("795mV", 795), NamedValue("800mV", 800), NamedValue("805mV", 805),
NamedValue("810mV", 810), NamedValue("815mV", 815), NamedValue("820mV", 820),
NamedValue("825mV", 825), NamedValue("830mV", 830), NamedValue("835mV", 835),
NamedValue("840mV", 840), NamedValue("845mV", 845), NamedValue("850mV", 850),
NamedValue("855mV", 855), NamedValue("860mV", 860), NamedValue("865mV", 865),
NamedValue("870mV", 870), NamedValue("875mV", 875), NamedValue("880mV", 880),
NamedValue("885mV", 885), NamedValue("890mV", 890), NamedValue("895mV", 895),
NamedValue("900mV", 900), NamedValue("905mV", 905), NamedValue("910mV", 910),
NamedValue("915mV", 915), NamedValue("920mV", 920), NamedValue("925mV", 925),
NamedValue("930mV", 930), NamedValue("935mV", 935), NamedValue("940mV", 940),
NamedValue("945mV", 945), NamedValue("950mV", 950), NamedValue("955mV", 955),
NamedValue("960mV", 960), NamedValue("965mV", 965), NamedValue("970mV", 970),
NamedValue("975mV", 975), NamedValue("980mV", 980), NamedValue("985mV", 985),
NamedValue("990mV", 990), NamedValue("995mV", 995), NamedValue("1000mV", 1000),
NamedValue("1005mV", 1005), NamedValue("1010mV", 1010), NamedValue("1015mV", 1015),
NamedValue("1020mV", 1020), NamedValue("1025mV", 1025), NamedValue("1030mV", 1030),
NamedValue("1035mV", 1035), NamedValue("1040mV", 1040), NamedValue("1045mV", 1045),
NamedValue("1050mV", 1050), NamedValue("1055mV", 1055), NamedValue("1060mV", 1060),
NamedValue("1065mV", 1065), NamedValue("1070mV", 1070), NamedValue("1075mV", 1075),
NamedValue("1080mV", 1080), NamedValue("1085mV", 1085), NamedValue("1090mV", 1090),
NamedValue("1095mV", 1095), NamedValue("1100mV", 1100), NamedValue("1105mV", 1105),
NamedValue("1110mV", 1110), NamedValue("1115mV", 1115), NamedValue("1120mV", 1120),
NamedValue("1125mV", 1125), NamedValue("1130mV", 1130)
};
std::vector<NamedValue> mGpuVolts_noAuto = {
@@ -1223,45 +1241,69 @@ protected:
NamedValue("915mV", 915), NamedValue("920mV", 920), NamedValue("925mV", 925),
NamedValue("930mV", 930), NamedValue("935mV", 935), NamedValue("940mV", 940),
NamedValue("945mV", 945), NamedValue("950mV", 950), NamedValue("955mV", 955),
NamedValue("960mV", 960),
NamedValue("960mV", 960), NamedValue("965mV", 965), NamedValue("970mV", 970),
NamedValue("975mV", 975), NamedValue("980mV", 980), NamedValue("985mV", 985),
NamedValue("990mV", 990), NamedValue("995mV", 995), NamedValue("1000mV", 1000),
NamedValue("1005mV", 1005), NamedValue("1010mV", 1010), NamedValue("1015mV", 1015),
NamedValue("1020mV", 1020), NamedValue("1025mV", 1025), NamedValue("1030mV", 1030),
NamedValue("1035mV", 1035), NamedValue("1040mV", 1040), NamedValue("1045mV", 1045),
NamedValue("1050mV", 1050), NamedValue("1055mV", 1055), NamedValue("1060mV", 1060),
NamedValue("1065mV", 1065), NamedValue("1070mV", 1070), NamedValue("1075mV", 1075),
NamedValue("1080mV", 1080), NamedValue("1085mV", 1085), NamedValue("1090mV", 1090),
NamedValue("1095mV", 1095), NamedValue("1100mV", 1100), NamedValue("1105mV", 1105),
NamedValue("1110mV", 1110), NamedValue("1115mV", 1115), NamedValue("1120mV", 1120),
NamedValue("1125mV", 1125), NamedValue("1130mV", 1130)
};
std::vector<NamedValue> eGpuVolts_noAuto = {
NamedValue("Disabled", 2000),
NamedValue("700mV", 700), NamedValue("705mV", 705), NamedValue("710mV", 710),
NamedValue("715mV", 715), NamedValue("720mV", 720), NamedValue("725mV", 725),
NamedValue("730mV", 730), NamedValue("735mV", 735), NamedValue("740mV", 740),
NamedValue("745mV", 745), NamedValue("750mV", 750), NamedValue("755mV", 755),
NamedValue("760mV", 760), NamedValue("765mV", 765), NamedValue("770mV", 770),
NamedValue("775mV", 775), NamedValue("780mV", 780), NamedValue("785mV", 785),
NamedValue("790mV", 790), NamedValue("795mV", 795), NamedValue("800mV", 800),
NamedValue("805mV", 805), NamedValue("810mV", 810), NamedValue("815mV", 815),
NamedValue("820mV", 820), NamedValue("825mV", 825), NamedValue("830mV", 830),
NamedValue("835mV", 835), NamedValue("840mV", 840), NamedValue("845mV", 845),
NamedValue("850mV", 850), NamedValue("855mV", 855), NamedValue("860mV", 860),
NamedValue("865mV", 865), NamedValue("870mV", 870), NamedValue("875mV", 875),
NamedValue("880mV", 880), NamedValue("885mV", 885), NamedValue("890mV", 890),
NamedValue("895mV", 895), NamedValue("900mV", 900), NamedValue("905mV", 905),
NamedValue("910mV", 910), NamedValue("915mV", 915), NamedValue("920mV", 920),
NamedValue("925mV", 925), NamedValue("930mV", 930), NamedValue("935mV", 935),
NamedValue("940mV", 940), NamedValue("945mV", 945), NamedValue("950mV", 950),
NamedValue("955mV", 955), NamedValue("960mV", 960), NamedValue("965mV", 965),
NamedValue("970mV", 970), NamedValue("975mV", 975), NamedValue("980mV", 980),
NamedValue("985mV", 985), NamedValue("990mV", 990), NamedValue("995mV", 995),
NamedValue("480mV", 480), NamedValue("485mV", 485), NamedValue("490mV", 490),
NamedValue("495mV", 495), NamedValue("500mV", 500), NamedValue("505mV", 505),
NamedValue("510mV", 510), NamedValue("515mV", 515), NamedValue("520mV", 520),
NamedValue("525mV", 525), NamedValue("530mV", 530), NamedValue("535mV", 535),
NamedValue("540mV", 540), NamedValue("545mV", 545), NamedValue("550mV", 550),
NamedValue("555mV", 555), NamedValue("560mV", 560), NamedValue("565mV", 565),
NamedValue("570mV", 570), NamedValue("575mV", 575), NamedValue("580mV", 580),
NamedValue("585mV", 585), NamedValue("590mV", 590), NamedValue("595mV", 595),
NamedValue("600mV", 600), NamedValue("605mV", 605), NamedValue("610mV", 610),
NamedValue("615mV", 615), NamedValue("620mV", 620), NamedValue("625mV", 625),
NamedValue("630mV", 630), NamedValue("635mV", 635), NamedValue("640mV", 640),
NamedValue("645mV", 645), NamedValue("650mV", 650), NamedValue("655mV", 655),
NamedValue("660mV", 660), NamedValue("665mV", 665), NamedValue("670mV", 670),
NamedValue("675mV", 675), NamedValue("680mV", 680), NamedValue("685mV", 685),
NamedValue("690mV", 690), NamedValue("695mV", 695), NamedValue("700mV", 700),
NamedValue("705mV", 705), NamedValue("710mV", 710), NamedValue("715mV", 715),
NamedValue("720mV", 720), NamedValue("725mV", 725), NamedValue("730mV", 730),
NamedValue("735mV", 735), NamedValue("740mV", 740), NamedValue("745mV", 745),
NamedValue("750mV", 750), NamedValue("755mV", 755), NamedValue("760mV", 760),
NamedValue("765mV", 765), NamedValue("770mV", 770), NamedValue("775mV", 775),
NamedValue("780mV", 780), NamedValue("785mV", 785), NamedValue("790mV", 790),
NamedValue("795mV", 795), NamedValue("800mV", 800), NamedValue("805mV", 805),
NamedValue("810mV", 810), NamedValue("815mV", 815), NamedValue("820mV", 820),
NamedValue("825mV", 825), NamedValue("830mV", 830), NamedValue("835mV", 835),
NamedValue("840mV", 840), NamedValue("845mV", 845), NamedValue("850mV", 850),
NamedValue("855mV", 855), NamedValue("860mV", 860), NamedValue("865mV", 865),
NamedValue("870mV", 870), NamedValue("875mV", 875), NamedValue("880mV", 880),
NamedValue("885mV", 885), NamedValue("890mV", 890), NamedValue("895mV", 895),
NamedValue("900mV", 900), NamedValue("905mV", 905), NamedValue("910mV", 910),
NamedValue("915mV", 915), NamedValue("920mV", 920), NamedValue("925mV", 925),
NamedValue("930mV", 930), NamedValue("935mV", 935), NamedValue("940mV", 940),
NamedValue("945mV", 945), NamedValue("950mV", 950), NamedValue("955mV", 955),
NamedValue("960mV", 960), NamedValue("965mV", 965), NamedValue("970mV", 970),
NamedValue("975mV", 975), NamedValue("980mV", 980), NamedValue("985mV", 985),
NamedValue("990mV", 990), NamedValue("995mV", 995), NamedValue("1000mV", 1000),
NamedValue("1005mV", 1005), NamedValue("1010mV", 1010), NamedValue("1015mV", 1015),
NamedValue("1020mV", 1020), NamedValue("1025mV", 1025), NamedValue("1030mV", 1030),
NamedValue("1035mV", 1035), NamedValue("1040mV", 1040), NamedValue("1045mV", 1045),
NamedValue("1050mV", 1050), NamedValue("1055mV", 1055), NamedValue("1060mV", 1060),
NamedValue("1065mV", 1065), NamedValue("1070mV", 1070), NamedValue("1075mV", 1075),
NamedValue("1080mV", 1080), NamedValue("1085mV", 1085), NamedValue("1090mV", 1090),
NamedValue("1095mV", 1095), NamedValue("1100mV", 1100), NamedValue("1105mV", 1105),
NamedValue("1110mV", 1110), NamedValue("1115mV", 1115), NamedValue("1120mV", 1120),
NamedValue("1125mV", 1125), NamedValue("1130mV", 1130)
};
if (IsMariko()) {
tsl::elm::CustomDrawer* warningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) {
renderer->drawString("\uE150 Setting GPU Clocks past", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
renderer->drawString("1075MHz without UV, 1152MHz on SLT", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
renderer->drawString("or 1228MHz on HiOPT can cause ", false, x + 20, y + 70, 18, tsl::style::color::ColorText);
renderer->drawString("permanent damage to your Switch!", false, x + 20, y + 90, 18, tsl::style::color::ColorText);
renderer->drawString("Proceed at your own risk!", false, x + 20, y + 110, 18, tsl::style::color::ColorText);
});
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 130);
this->listElement->addItem(warningText);
addConfigButton(KipConfigValue_g_volt_76800, "76.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_153600, "153.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_230400, "230.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
@@ -1276,62 +1318,49 @@ protected:
addConfigButton(KipConfigValue_g_volt_921600, "921.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_998400, "998.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_1075200, "1075.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
if(this->configList->values[KipConfigValue_marikoGpuUV] >= GPUUVLevel_SLT)
addConfigButton(KipConfigValue_g_volt_1152000, "1152.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
if(this->configList->values[KipConfigValue_marikoGpuUV] >= GPUUVLevel_HiOPT) {
addConfigButton(KipConfigValue_g_volt_1228800, "1228.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_1267200, "1267.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_1305600, "1305.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_1344000, "1344.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1382400, "1382.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1420800, "1420.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1459200, "1459.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1497600, "1497.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1536000, "1536.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
}
addConfigButton(KipConfigValue_g_volt_1152000, "1152.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_1228800, "1228.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_1267200, "1267.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_1305600, "1305.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_1344000, "1344.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1382400, "1382.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1420800, "1420.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1459200, "1459.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1497600, "1497.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1536000, "1536.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1574400, "1574.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1612800, "1612.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1651200, "1651.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1689600, "1689.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1728000, "1728.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1766400, "1766.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_1804800, "1804.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
} else {
tsl::elm::CustomDrawer* warningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) {
renderer->drawString("\uE150 Setting GPU Clocks past", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
renderer->drawString("921MHz without UV and 960MHz on", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
renderer->drawString("SLT or HiOPT can cause ", false, x + 20, y + 70, 18, tsl::style::color::ColorText);
renderer->drawString("permanent damage to your Switch!", false, x + 20, y + 90, 18, tsl::style::color::ColorText);
renderer->drawString("Proceed at your own risk!", false, x + 20, y + 110, 18, tsl::style::color::ColorText);
});
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 130);
this->listElement->addItem(warningText);
addConfigButton(KipConfigValue_g_volt_e_76800, "76.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_115200, "115.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_153600, "153.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_192000, "192.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_230400, "230.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_268800, "268.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_307200, "307.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_345600, "345.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_384000, "384.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_422400, "422.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_460800, "460.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_499200, "499.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_537600, "537.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_576000, "576.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_614400, "614.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_652800, "652.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_691200, "691.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_729600, "729.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_768000, "768.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_806400, "806.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_844800, "844.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_883200, "883.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_921600, "921.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
if(this->configList->values[KipConfigValue_eristaGpuUV] >= GPUUVLevel_SLT)
addConfigButton(KipConfigValue_g_volt_e_960000, "960.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
if(this->configList->values[KipConfigValue_eristaGpuUV] >= GPUUVLevel_HiOPT) {
addConfigButton(KipConfigValue_g_volt_e_998400, "998.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_1036800, "1036.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1075200, "1075.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false);
}
addConfigButton(KipConfigValue_g_volt_e_998400, "998.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
addConfigButton(KipConfigValue_g_volt_e_1075200, "1075.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1152000, "1152.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1228800, "1228.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1267200, "1267.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1305600, "1305.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1344000, "1344.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1382400, "1382.4MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1420800, "1420.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1459200, "1459.2MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1497600, "1497.6MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
addConfigButton(KipConfigValue_g_volt_e_1536000, "1536.0MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts_noAuto, false);
}
}
};

View File

@@ -40,6 +40,7 @@
#include <cstdio>
#include <crc32.h>
#define HOSPPC_HAS_BOOST (hosversionAtLeast(7,0,0))
bool isGpuGovernorEnabled = false;
bool isCpuGovernorEnabled = false;
@@ -748,10 +749,12 @@ void ClockManager::DVFSReset() {
targetHz = this->config->GetAutoClockHz(GLOBAL_PROFILE_ID, SysClkModule_GPU, this->context->profile, false);
}
}
u32 maxHz = this->GetMaxAllowedHz(SysClkModule_GPU, this->context->profile);
u32 nearestHz = this->GetNearestHz(SysClkModule_GPU, targetHz, maxHz);
Board::SetHz(SysClkModule_GPU, ~0);
if(targetHz) {
Board::SetHz(SysClkModule_GPU, targetHz);
Board::SetHz(SysClkModule_GPU, nearestHz);
} else {
Board::ResetToStockGpu();
}
@@ -778,8 +781,8 @@ void ClockManager::HandleFreqReset(SysClkModule module, bool isBoost) {
case SysClkModule_MEM:
Board::ResetToStockMem();
DVFSReset();
default:
break;
default:
break;
}
}
@@ -1123,11 +1126,11 @@ void ClockManager::SetKipData() {
CUST_WRITE_FIELD_BATCH(&table, commonGpuVoltOffset, this->config->GetConfigValue(KipConfigValue_commonGpuVoltOffset));
CUST_WRITE_FIELD_BATCH(&table, gpuSpeedo, this->config->GetConfigValue(KipConfigValue_gpuSpeedo));
for (int i = 0; i < 24; i++) {
for (int i = 0; i < 31; i++) {
table.marikoGpuVoltArray[i] = this->config->GetConfigValue((SysClkConfigValue)(KipConfigValue_g_volt_76800 + i));
}
for (int i = 0; i < 27; i++) {
for (int i = 0; i < 24; i++) {
table.eristaGpuVoltArray[i] = this->config->GetConfigValue((SysClkConfigValue)(KipConfigValue_g_volt_e_76800 + i));
}
@@ -1295,12 +1298,12 @@ void ClockManager::GetKipData() {
configValues.values[KipConfigValue_commonGpuVoltOffset] = cust_get_common_gpu_offset(&table);
configValues.values[KipConfigValue_gpuSpeedo] = Board::getSpeedo(HorizonOCSpeedo_GPU); // cust_get_gpu_speedo(&table);
for (int i = 0; i < 24; i++) {
for (int i = 0; i < 31; i++) {
configValues.values[KipConfigValue_g_volt_76800 + i] = cust_get_mariko_gpu_volt(&table, i);
initialConfigValues[KipConfigValue_g_volt_76800 + i] = cust_get_mariko_gpu_volt(&table, i);
}
for (int i = 0; i < 27; i++) {
for (int i = 0; i < 24; i++) {
configValues.values[KipConfigValue_g_volt_e_76800 + i] = cust_get_erista_gpu_volt(&table, i);
initialConfigValues[KipConfigValue_g_volt_e_76800 + i] = cust_get_erista_gpu_volt(&table, i);
}

View File

@@ -77,8 +77,8 @@ typedef struct {
u32 gpuSpeedo;
u32 eristaGpuVoltArray[27];
u32 marikoGpuVoltArray[24];
u32 eristaGpuVoltArray[24];
u32 marikoGpuVoltArray[31];
u32 t6_tRTW_fine_tune;
u32 t7_tWTR_fine_tune;
@@ -308,12 +308,12 @@ static inline u32 cust_get_gpu_speedo(const CustomizeTable* t) { return CUST_GET
static inline u32 cust_get_marikoCpuMaxClock(const CustomizeTable* t) { return CUST_GET_FIELD(t, marikoCpuMaxClock); }
static inline u32 cust_get_erista_gpu_volt(const CustomizeTable* t, int idx) {
if (!t || idx < 0 || idx >= 27) return 0;
if (!t || idx < 0 || idx > 24) return 0;
return t->eristaGpuVoltArray[idx];
}
static inline u32 cust_get_mariko_gpu_volt(const CustomizeTable* t, int idx) {
if (!t || idx < 0 || idx >= 24) return 0;
if (!t || idx < 0 || idx > 31) return 0;
return t->marikoGpuVoltArray[idx];
}
@@ -330,32 +330,30 @@ static inline bool cust_set_mariko_gpu_volt_##freq( \
}
DECL_ERISTA_GPU_VOLT_HELPER(76800, 0)
DECL_ERISTA_GPU_VOLT_HELPER(115200, 1)
DECL_ERISTA_GPU_VOLT_HELPER(153600, 2)
DECL_ERISTA_GPU_VOLT_HELPER(192000, 3)
DECL_ERISTA_GPU_VOLT_HELPER(230400, 4)
DECL_ERISTA_GPU_VOLT_HELPER(268800, 5)
DECL_ERISTA_GPU_VOLT_HELPER(307200, 6)
DECL_ERISTA_GPU_VOLT_HELPER(345600, 7)
DECL_ERISTA_GPU_VOLT_HELPER(384000, 8)
DECL_ERISTA_GPU_VOLT_HELPER(422400, 9)
DECL_ERISTA_GPU_VOLT_HELPER(460800, 10)
DECL_ERISTA_GPU_VOLT_HELPER(499200, 11)
DECL_ERISTA_GPU_VOLT_HELPER(537600, 12)
DECL_ERISTA_GPU_VOLT_HELPER(576000, 13)
DECL_ERISTA_GPU_VOLT_HELPER(614400, 14)
DECL_ERISTA_GPU_VOLT_HELPER(652800, 15)
DECL_ERISTA_GPU_VOLT_HELPER(691200, 16)
DECL_ERISTA_GPU_VOLT_HELPER(729600, 17)
DECL_ERISTA_GPU_VOLT_HELPER(768000, 18)
DECL_ERISTA_GPU_VOLT_HELPER(806400, 19)
DECL_ERISTA_GPU_VOLT_HELPER(844800, 20)
DECL_ERISTA_GPU_VOLT_HELPER(883200, 21)
DECL_ERISTA_GPU_VOLT_HELPER(921600, 22)
DECL_ERISTA_GPU_VOLT_HELPER(960000, 23)
DECL_ERISTA_GPU_VOLT_HELPER(998400, 24)
DECL_ERISTA_GPU_VOLT_HELPER(1036800, 25)
DECL_ERISTA_GPU_VOLT_HELPER(1075200, 26)
DECL_ERISTA_GPU_VOLT_HELPER(153600, 1)
DECL_ERISTA_GPU_VOLT_HELPER(230400, 2)
DECL_ERISTA_GPU_VOLT_HELPER(307200, 3)
DECL_ERISTA_GPU_VOLT_HELPER(384000, 4)
DECL_ERISTA_GPU_VOLT_HELPER(460800, 5)
DECL_ERISTA_GPU_VOLT_HELPER(537600, 6)
DECL_ERISTA_GPU_VOLT_HELPER(614400, 7)
DECL_ERISTA_GPU_VOLT_HELPER(691200, 8)
DECL_ERISTA_GPU_VOLT_HELPER(768000, 9)
DECL_ERISTA_GPU_VOLT_HELPER(844800, 10)
DECL_ERISTA_GPU_VOLT_HELPER(921600, 11)
DECL_ERISTA_GPU_VOLT_HELPER(998400, 12)
DECL_ERISTA_GPU_VOLT_HELPER(1075200, 13)
DECL_ERISTA_GPU_VOLT_HELPER(1152000, 14)
DECL_ERISTA_GPU_VOLT_HELPER(1228800, 15)
DECL_ERISTA_GPU_VOLT_HELPER(1267200, 16)
DECL_ERISTA_GPU_VOLT_HELPER(1305600, 17)
DECL_ERISTA_GPU_VOLT_HELPER(1344000, 18)
DECL_ERISTA_GPU_VOLT_HELPER(1382400, 19)
DECL_ERISTA_GPU_VOLT_HELPER(1420800, 20)
DECL_ERISTA_GPU_VOLT_HELPER(1459200, 21)
DECL_ERISTA_GPU_VOLT_HELPER(1497600, 22)
DECL_ERISTA_GPU_VOLT_HELPER(1536000, 23)
DECL_MARIKO_GPU_VOLT_HELPER(76800, 0)
DECL_MARIKO_GPU_VOLT_HELPER(153600, 1)
@@ -381,6 +379,13 @@ DECL_MARIKO_GPU_VOLT_HELPER(1420800, 20)
DECL_MARIKO_GPU_VOLT_HELPER(1459200, 21)
DECL_MARIKO_GPU_VOLT_HELPER(1497600, 22)
DECL_MARIKO_GPU_VOLT_HELPER(1536000, 23)
DECL_MARIKO_GPU_VOLT_HELPER(1574400, 24)
DECL_MARIKO_GPU_VOLT_HELPER(1612800, 25)
DECL_MARIKO_GPU_VOLT_HELPER(1651200, 26)
DECL_MARIKO_GPU_VOLT_HELPER(1689600, 27)
DECL_MARIKO_GPU_VOLT_HELPER(1728000, 28)
DECL_MARIKO_GPU_VOLT_HELPER(1766400, 29)
DECL_MARIKO_GPU_VOLT_HELPER(1804800, 30)
#define DECL_ERISTA_GPU_VOLT_GET(freq, idx) \
@@ -396,33 +401,32 @@ static inline u32 cust_get_mariko_gpu_volt_##freq##_val(const char* p) { \
return cust_get_mariko_gpu_volt(&t, idx); \
}
DECL_ERISTA_GPU_VOLT_GET(76800, 0)
DECL_ERISTA_GPU_VOLT_GET(115200, 1)
DECL_ERISTA_GPU_VOLT_GET(153600, 2)
DECL_ERISTA_GPU_VOLT_GET(192000, 3)
DECL_ERISTA_GPU_VOLT_GET(230400, 4)
DECL_ERISTA_GPU_VOLT_GET(268800, 5)
DECL_ERISTA_GPU_VOLT_GET(307200, 6)
DECL_ERISTA_GPU_VOLT_GET(345600, 7)
DECL_ERISTA_GPU_VOLT_GET(384000, 8)
DECL_ERISTA_GPU_VOLT_GET(422400, 9)
DECL_ERISTA_GPU_VOLT_GET(460800, 10)
DECL_ERISTA_GPU_VOLT_GET(499200, 11)
DECL_ERISTA_GPU_VOLT_GET(537600, 12)
DECL_ERISTA_GPU_VOLT_GET(576000, 13)
DECL_ERISTA_GPU_VOLT_GET(614400, 14)
DECL_ERISTA_GPU_VOLT_GET(652800, 15)
DECL_ERISTA_GPU_VOLT_GET(691200, 16)
DECL_ERISTA_GPU_VOLT_GET(729600, 17)
DECL_ERISTA_GPU_VOLT_GET(768000, 18)
DECL_ERISTA_GPU_VOLT_GET(806400, 19)
DECL_ERISTA_GPU_VOLT_GET(844800, 20)
DECL_ERISTA_GPU_VOLT_GET(883200, 21)
DECL_ERISTA_GPU_VOLT_GET(921600, 22)
DECL_ERISTA_GPU_VOLT_GET(960000, 23)
DECL_ERISTA_GPU_VOLT_GET(998400, 24)
DECL_ERISTA_GPU_VOLT_GET(1036800, 25)
DECL_ERISTA_GPU_VOLT_GET(1075200, 26)
DECL_ERISTA_GPU_VOLT_GET(153600, 1)
DECL_ERISTA_GPU_VOLT_GET(230400, 2)
DECL_ERISTA_GPU_VOLT_GET(307200, 3)
DECL_ERISTA_GPU_VOLT_GET(384000, 4)
DECL_ERISTA_GPU_VOLT_GET(460800, 5)
DECL_ERISTA_GPU_VOLT_GET(537600, 6)
DECL_ERISTA_GPU_VOLT_GET(614400, 7)
DECL_ERISTA_GPU_VOLT_GET(691200, 8)
DECL_ERISTA_GPU_VOLT_GET(768000, 9)
DECL_ERISTA_GPU_VOLT_GET(844800, 10)
DECL_ERISTA_GPU_VOLT_GET(921600, 11)
DECL_ERISTA_GPU_VOLT_GET(998400, 12)
DECL_ERISTA_GPU_VOLT_GET(1075200, 13)
DECL_ERISTA_GPU_VOLT_GET(1152000, 14)
DECL_ERISTA_GPU_VOLT_GET(1228800, 15)
DECL_ERISTA_GPU_VOLT_GET(1267200, 16)
DECL_ERISTA_GPU_VOLT_GET(1305600, 17)
DECL_ERISTA_GPU_VOLT_GET(1344000, 18)
DECL_ERISTA_GPU_VOLT_GET(1382400, 19)
DECL_ERISTA_GPU_VOLT_GET(1420800, 20)
DECL_ERISTA_GPU_VOLT_GET(1459200, 21)
DECL_ERISTA_GPU_VOLT_GET(1497600, 22)
DECL_ERISTA_GPU_VOLT_GET(1536000, 23)
DECL_MARIKO_GPU_VOLT_GET(76800, 0)
DECL_MARIKO_GPU_VOLT_GET(153600, 1)
@@ -447,4 +451,11 @@ DECL_MARIKO_GPU_VOLT_GET(1382400, 19)
DECL_MARIKO_GPU_VOLT_GET(1420800, 20)
DECL_MARIKO_GPU_VOLT_GET(1459200, 21)
DECL_MARIKO_GPU_VOLT_GET(1497600, 22)
DECL_MARIKO_GPU_VOLT_GET(1536000, 23)
DECL_MARIKO_GPU_VOLT_GET(1536000, 23)
DECL_MARIKO_GPU_VOLT_GET(1574400, 24)
DECL_MARIKO_GPU_VOLT_GET(1612800, 25)
DECL_MARIKO_GPU_VOLT_GET(1651200, 26)
DECL_MARIKO_GPU_VOLT_GET(1689600, 27)
DECL_MARIKO_GPU_VOLT_GET(1728000, 28)
DECL_MARIKO_GPU_VOLT_GET(1766400, 29)
DECL_MARIKO_GPU_VOLT_GET(1804800, 30)

12
dist/README.md vendored
View File

@@ -56,7 +56,6 @@ It enables advanced CPU, GPU, and RAM tuning with user-friendly configuration to
```
kip1=atmosphere/kips/hoc.kip
secmon=exosphere.bin
```
*(No changes needed if using fusee.)*
@@ -114,6 +113,9 @@ Refer to COMPILATION.md
* 816
* 714
* 612 → sleep mode
**Notes:**
1. On Erista, CPU in handheld is capped to 1581MHz
### GPU clocks
* 1536 → absolute max clock on mariko. very dangerous
@@ -140,8 +142,10 @@ Refer to COMPILATION.md
* 76 → boost mode
**Notes:**
1. GPU overclock is capped at 460MHz in handheld and capped at 768MHz if charging, unless you're using the official charger.
2. Clocks higher than 768MHz need the official charger is plugged in.
1. GPU overclock is capped at 460MHz on erista in handheld
2. On Mariko, cap with No uv is 614MHz, with SLT it is 691MHz and with HiOPT it's 768MHz
3. Clocks higher than 768MHz on erista need the official charger is plugged in.
4. On Mariko, cap with No uv is 844MHz, with SLT it is 921MHz and with HiOPT it's 998MHz
---
@@ -160,5 +164,5 @@ Refer to COMPILATION.md
* **b0rd2death** Ultrahand sys-clk & Status Monitor fork
* **MasaGratoR and ZachyCatGames** - General help
* **MasaGratoR** - Status Monitor & Display Refresh Rate Driver
* **Dom, Samybigio, Arcdelta, Miki, Happy, Flopsider, Winnerboi77, Blaise, Alvise, TDRR, agjeococh and Xenshen** - Testing
* **Dom, Samybigio, Arcdelta, Miki, Happy, Flopsider, Winnerboi77, Blaise, Alvise, TDRR, agjeococh, frost, letum00 and Xenshen** - Testing
* **Samybigio2011** - Italian translations

Binary file not shown.

132
dist/config/horizon-oc/lang/en.json vendored Normal file
View File

@@ -0,0 +1,132 @@
{
"Horizon OC Zeus": "Horizon OC Zeus",
"Edit App Profile": "Edit App Profile",
"Advanced": "Advanced",
"Edit Global Profile": "Edit Global Profile",
"Temporary Overrides": "Temporary Overrides",
"Temporary Overrides Reset": "Temporary Overrides Reset",
"Settings": "Settings",
"Information": "Information",
"Enable": "Enable",
"Uncapped Clocks": "Uncapped Clocks",
"Override Boost Mode": "Override Boost Mode",
"CPU Max Display Clock": "CPU Max Display Clock",
"Thermal Throttle": "Thermal Throttle",
"Thermal Throttle Threshold": "Thermal Throttle Threshold",
"Handheld TDP": "Handheld TDP",
"Handheld TDP Limit": "Handheld TDP Limit",
"Lite TDP Limit": "Lite TDP Limit",
"Enforce Board Limit": "Enforce Board Limit",
"Battery Charge Current": "Battery Charge Current",
"Display Refresh Rate Changing": "Display Refresh Rate Changing",
"Fix CPU Volt Bug": "Fix CPU Volt Bug",
"[cfg] no enum format string": "[cfg] no enum format string",
"KIP": "KIP",
"Save KIP Settings": "Save KIP Settings",
"RAM Settings": "RAM Settings",
"CPU Settings": "CPU Settings",
"GPU Settings": "GPU Settings",
"Experimental": "Experimental",
"Charge Current Override": "Charge Current Override",
"Disabled": "Disabled",
"HP Mode": "HP Mode",
"EMC Max Clock": "EMC Max Clock",
"EMC VDD2 Voltage": "EMC VDD2 Voltage",
"EMC VDDQ Voltage": "EMC VDDQ Voltage",
"DVB Shift": "DVB Shift",
"Memory Timings": "Memory Timings",
"Memory Latencies": "Memory Latencies",
"t1 tRCD": "t1 tRCD",
"t2 tRP": "t2 tRP",
"t3 tRAS": "t3 tRAS",
"t4 tRRD": "t4 tRRD",
"t5 tRFC": "t5 tRFC",
"t6 tRTW": "t6 tRTW",
"t7 tWTR": "t7 tWTR",
"t8 tREFI": "t8 tREFI",
"Update RAM Timings": "Update RAM Timings",
"\uE150 This feature is EXPERIMENTAL": "\uE150 This feature is EXPERIMENTAL",
"and should only be used for testing!": "and should only be used for testing!",
"Read Latency": "Read Latency",
"Write Latency": "Write Latency",
"CPU UV": "CPU UV",
"CPU Unlock": "CPU Unlock",
"CPU VMIN": "CPU VMIN",
"CPU Max Voltage": "CPU Max Voltage",
"CPU UV Table": "CPU UV Table",
"CPU Low UV": "CPU Low UV",
"CPU High UV": "CPU High UV",
"CPU Max Clock": "CPU Max Clock",
"CPU Low VMIN": "CPU Low VMIN",
"CPU High VMIN": "CPU High VMIN",
"GPU Undervolt Table": "GPU Undervolt Table",
"Calculate GPU Vmin": "Calculate GPU Vmin",
"GPU VMIN": "GPU VMIN",
"GPU VMAX": "GPU VMAX",
"GPU Volt Offset": "GPU Volt Offset",
"GPU Custom Table": "GPU Custom Table",
"GPU Custom Table (mV)": "GPU Custom Table (mV)",
"\uE150 Setting GPU Clocks past": "\uE150 Setting GPU Clocks past",
"1075MHz without UV, 1152MHz on SLT or ": "1075MHz without UV, 1152MHz on SLT or ",
"1228MHz on HiOPT can cause ": "1228MHz on HiOPT can cause ",
"permanent damage to your Switch!": "permanent damage to your Switch!",
"Proceed at your own risk!": "Proceed at your own risk!",
"921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on",
"SLT or HiOPT can cause ": "SLT or HiOPT can cause ",
"Auto": "Auto",
"Sleep Mode": "Sleep Mode",
"Stock": "Stock",
"Dev OC": "Dev OC",
"Boost Mode": "Boost Mode",
"Safe Max": "Safe Max",
"Unsafe Max": "Unsafe Max",
"Absolute Max": "Absolute Max",
"Boost Mode & Safe Max": "Boost Mode & Safe Max",
"Official Rating": "Official Rating",
"Default (Mariko)": "Default (Mariko)",
"Default (Erista)": "Default (Erista)",
"Rating": "Rating",
"Safe Max (Mariko)": "Safe Max (Mariko)",
"Safe Max (Erista)": "Safe Max (Erista)",
"Default": "Default",
"1581MHz Tbreak": "1581MHz Tbreak",
"1683MHz Tbreak": "1683MHz Tbreak",
"Extreme UV Table": "Extreme UV Table",
"No UV": "No UV",
"SLT Table": "SLT Table",
"HiOPT Table": "HiOPT Table",
"Power": "Power",
"Temp": "Temp",
"Voltage": "Voltage",
"TDP Threshold": "TDP Threshold",
"Lite TDP Threshold": "Lite TDP Threshold",
"Thermal Throttle Limit": "Thermal Throttle Limit",
"1600BL": "1600BL",
"1866BL": "1866BL",
"2133BL": "2133BL",
"BAT": "BAT",
"FAN": "FAN",
"DISP": "DISP",
"Board": "Board",
"Skin": "Skin",
"Now": "Now",
"Avg": "Avg",
"App ID": "App ID",
"Profile": "Profile",
"CPU": "CPU",
"GPU": "GPU",
"Memory": "Memory",
"Display": "Display",
"Governor": "Governor",
"SOC": "SOC",
"PCB": "PCB",
"PMIC": "PMIC",
"Docked": "Docked",
"Handheld": "Handheld",
"Charging": "Charging",
"USB Charger": "USB Charger",
"PD Charger": "PD Charger",
"VDD2": "VDD2",
"VDDQ": "VDDQ",
"GPU DVFS": "GPU DVFS"
}

35
dist/config/horizon-oc/lang/es.json vendored Normal file
View File

@@ -0,0 +1,35 @@
{
"Edit App Profile": "Editar perfil de la app",
"Advanced": "Avanzado",
"Edit Global Profile": "Editar perfil global",
"Temporary Overrides": "Anulaciones temporales",
"Temporary Overrides   Reset": "Anulaciones temporales   Reiniciar",
"Settings": "Configuración",
"Enable": "Habilitar",
"Uncapped Clocks": "Relojes sin límite",
"Override Boost Mode": "Sobrescribir modo Boost",
"Auto CPU Boost": "Impulso automático de CPU",
"Sync ReverseNX": "Sincronizar con ReverseNX",
"GPU DVFS": "GPU DVFS",
"Off": "Apagado",
"Official Service Method": "Método de servicio oficial",
"Hijack Method": "Método de secuestro",
"App ID": "ID App",
"EOS mode": "Modo EOS",
"Skin": "Tema",
"Now": "Ahora",
"Avg": "Med",
"Docked": "Conectado al dock",
"Handheld": "Portátil",
"Charging": "Cargando",
"PD Charger": "Cargador oficial",
"USB Charger": "Cargador USB",
"Docked   Reset": "Conectado al dock   Reiniciar",
"Handheld   Reset": "Portátil   Reiniciar",
"Charging   Reset": "Cargando   Reiniciar",
"PD Charger   Reset": "Cargador oficial   Reiniciar",
"USB Charger   Reset": "Cargador USB   Reiniciar",
"Memory": "Memoria",
"Default": "No sobrescribir",
"Profile": "Perfil"
}

132
dist/config/horizon-oc/lang/it.json vendored Normal file
View File

@@ -0,0 +1,132 @@
{
"Information about Translation": "This is a translation made by Samybigio2011. If you find any errors, please report them on GitHub, or feel free to contribute!",
"Horizon OC Zeus": "Horizon OC Zeus",
"Edit App Profile": "Profilo App",
"Advanced": "Avanzate",
"Edit Global Profile": "Profilo Globale",
"Temporary Overrides": "Override Temporaneo",
"Temporary Overrides Reset": "Temporary Overrides Reset",
"Settings": "Impostazioni",
"Information": "Informazioni",
"Enable": "Abilita",
"Uncapped Clocks": "Sblocca Clock",
"Override Boost Mode": "Sovrascrivi Boost Mode",
"CPU Max Display Clock": "Massimo Clock CPU mostrato",
"Thermal Throttle": "Rallentamento Termico",
"Thermal Throttle Threshold": "Soglia Rallentamento Termico",
"Handheld TDP": "TPD Handheld",
"Handheld TDP Limit": "Limite TDP Handheld",
"Lite TDP Limit": "Limite TDP Lite",
"Enforce Board Limit": "Forza Limite di Potenza",
"Battery Charge Current": "Corrente di Ricarica",
"Display Refresh Rate Changing": "Cambio di Frequenza Display",
"Fix CPU Volt Bug": "Risolvi Bug CPU",
"[cfg] no enum format string": "[cfg] no enum format string",
"KIP": "KIP",
"Save KIP Settings": "Salva Impotazioni KIP",
"RAM Settings": "Impostazioni RAM",
"CPU Settings": "Impostazioni CPU",
"GPU Settings": "Impostazioni GPU",
"Experimental": "Esperimentale",
"Charge Current Override": "Sovrascrivi Corrente di Ricarica",
"Disabled": "Disabilitato",
"HP Mode": "Modalità HP",
"EMC Max Clock": "Clock EMC Massimo",
"EMC VDD2 Voltage": "Voltaggio VDD2 EMC",
"EMC VDDQ Voltage": "Voltaggio VDDQ EMC",
"DVB Shift": "Shift DVB",
"Memory Timings": "Timing Memoria",
"Memory Latencies": "Latency Memoria",
"t1 tRCD": "t1 tRCD",
"t2 tRP": "t2 tRP",
"t3 tRAS": "t3 tRAS",
"t4 tRRD": "t4 tRRD",
"t5 tRFC": "t5 tRFC",
"t6 tRTW": "t6 tRTW",
"t7 tWTR": "t7 tWTR",
"t8 tREFI": "t8 tREFI",
"Update RAM Timings": "Aggiorna Timing RAM",
"\uE150 This feature is EXPERIMENTAL": "\uE150 Questa funzione è ESPERIMENRALE!",
"and should only be used for testing!": "e dovrebbe essere usata solo per testare!",
"Read Latency": "Latency Lettura",
"Write Latency": "Latency Scrittura",
"CPU UV": "UV CPU",
"CPU Unlock": "Sblocco CPU",
"CPU VMIN": "VMIN CPU",
"CPU Max Voltage": "Voltaggio Massimo CPU",
"CPU UV Table": "Tavola UV CPU",
"CPU Low UV": "UV Basso CPU",
"CPU High UV": "UV Alto CPU",
"CPU Max Clock": "Clock Massimo CPU",
"CPU Low VMIN": "VMIN Basso CPU",
"CPU High VMIN": "VMIN Alto CPU",
"GPU Undervolt Table": "Tavola Undervolt GPU",
"Calculate GPU Vmin": "Calcola VMIN GPU",
"GPU VMIN": "VMIN GPU",
"GPU VMAX": "VMAX GPU",
"GPU Volt Offset": "Offset Voltaggio GPU",
"GPU Custom Table": "Tavola GPU Custom",
"GPU Custom Table (mV)": "Tavola GPU Custom (mV)",
"\uE150 Setting GPU Clocks past": "\uE150 Impostare Clock GPU oltre",
"1075MHz without UV, 1152MHz on SLT or ": "1075MHz senza UV, 1152MHz su SLT o ",
"1228MHz on HiOPT can cause ": "1228MHz su HiOPT può causare ",
"permanent damage to your Switch!": "danni permanenti alla tua console!",
"Proceed at your own risk!": "Procedi al tuo rischio!",
"921MHz without UV and 960MHz on": "921MHz senza UV e 960MHz su",
"SLT or HiOPT can cause ": "SLT o HiOPT può causare ",
"Auto": "Auto",
"Sleep Mode": "Modalità Sleep",
"Stock": "Stock",
"Dev OC": "OC Sviluppo",
"Boost Mode": "Modalità Boost",
"Safe Max": "Massimo Sicuro",
"Unsafe Max": "Massimo Insicuro",
"Absolute Max": "Massimo Assoluto",
"Boost Mode & Safe Max": "Modalità Boost e Massimo Sicuro",
"Official Rating": "Rating Ufficiale",
"Default (Mariko)": "Default (Mariko)",
"Default (Erista)": "Default (Erista)",
"Rating": "Rating",
"Safe Max (Mariko)": "Max Sicuro (Mariko)",
"Safe Max (Erista)": "Max Sicuro (Erista)",
"Default": "Default",
"1581MHz Tbreak": "Tbreak 1581MHz",
"1683MHz Tbreak": "Tbreak 1683MHz",
"Extreme UV Table": "Tavola UV Estremo",
"No UV": "No UV",
"SLT Table": "Tavola SLT",
"HiOPT Table": "Tavola HiOPT",
"Power": "Potenza",
"Temp": "Temperatura",
"Voltage": "Voltaggio",
"TDP Threshold": "Soglia TDP",
"Lite TDP Threshold": "Soglia TDP Lite",
"Thermal Throttle Limit": "Limite Rallentamento Termico",
"1600BL": "BL1600",
"1866BL": "BL1866",
"2133BL": "BL2133",
"BAT": "BAT",
"FAN": "FAN",
"DISP": "DISP",
"Board": "Scheda",
"Skin": "Skin",
"Now": "Ora",
"Avg": "Med",
"App ID": "ID App",
"Profile": "Profilo",
"CPU": "CPU",
"GPU": "GPU",
"Memory": "Memoria",
"Display": "Display",
"Governor": "Governor",
"SOC": "SOC",
"PCB": "PCB",
"PMIC": "PMIC",
"Docked": "Dock",
"Handheld": "Handheld",
"Charging": "In Carica",
"USB Charger": "Caricatore USB",
"PD Charger": "Caricatore PD",
"VDD2": "VDD2",
"VDDQ": "VDDQ"
}

132
dist/config/horizon-oc/lang/lang/en.json vendored Normal file
View File

@@ -0,0 +1,132 @@
{
"Horizon OC Zeus": "Horizon OC Zeus",
"Edit App Profile": "Edit App Profile",
"Advanced": "Advanced",
"Edit Global Profile": "Edit Global Profile",
"Temporary Overrides": "Temporary Overrides",
"Temporary Overrides Reset": "Temporary Overrides Reset",
"Settings": "Settings",
"Information": "Information",
"Enable": "Enable",
"Uncapped Clocks": "Uncapped Clocks",
"Override Boost Mode": "Override Boost Mode",
"CPU Max Display Clock": "CPU Max Display Clock",
"Thermal Throttle": "Thermal Throttle",
"Thermal Throttle Threshold": "Thermal Throttle Threshold",
"Handheld TDP": "Handheld TDP",
"Handheld TDP Limit": "Handheld TDP Limit",
"Lite TDP Limit": "Lite TDP Limit",
"Enforce Board Limit": "Enforce Board Limit",
"Battery Charge Current": "Battery Charge Current",
"Display Refresh Rate Changing": "Display Refresh Rate Changing",
"Fix CPU Volt Bug": "Fix CPU Volt Bug",
"[cfg] no enum format string": "[cfg] no enum format string",
"KIP": "KIP",
"Save KIP Settings": "Save KIP Settings",
"RAM Settings": "RAM Settings",
"CPU Settings": "CPU Settings",
"GPU Settings": "GPU Settings",
"Experimental": "Experimental",
"Charge Current Override": "Charge Current Override",
"Disabled": "Disabled",
"HP Mode": "HP Mode",
"EMC Max Clock": "EMC Max Clock",
"EMC VDD2 Voltage": "EMC VDD2 Voltage",
"EMC VDDQ Voltage": "EMC VDDQ Voltage",
"DVB Shift": "DVB Shift",
"Memory Timings": "Memory Timings",
"Memory Latencies": "Memory Latencies",
"t1 tRCD": "t1 tRCD",
"t2 tRP": "t2 tRP",
"t3 tRAS": "t3 tRAS",
"t4 tRRD": "t4 tRRD",
"t5 tRFC": "t5 tRFC",
"t6 tRTW": "t6 tRTW",
"t7 tWTR": "t7 tWTR",
"t8 tREFI": "t8 tREFI",
"Update RAM Timings": "Update RAM Timings",
"\uE150 This feature is EXPERIMENTAL": "\uE150 This feature is EXPERIMENTAL",
"and should only be used for testing!": "and should only be used for testing!",
"Read Latency": "Read Latency",
"Write Latency": "Write Latency",
"CPU UV": "CPU UV",
"CPU Unlock": "CPU Unlock",
"CPU VMIN": "CPU VMIN",
"CPU Max Voltage": "CPU Max Voltage",
"CPU UV Table": "CPU UV Table",
"CPU Low UV": "CPU Low UV",
"CPU High UV": "CPU High UV",
"CPU Max Clock": "CPU Max Clock",
"CPU Low VMIN": "CPU Low VMIN",
"CPU High VMIN": "CPU High VMIN",
"GPU Undervolt Table": "GPU Undervolt Table",
"Calculate GPU Vmin": "Calculate GPU Vmin",
"GPU VMIN": "GPU VMIN",
"GPU VMAX": "GPU VMAX",
"GPU Volt Offset": "GPU Volt Offset",
"GPU Custom Table": "GPU Custom Table",
"GPU Custom Table (mV)": "GPU Custom Table (mV)",
"\uE150 Setting GPU Clocks past": "\uE150 Setting GPU Clocks past",
"1075MHz without UV, 1152MHz on SLT or ": "1075MHz without UV, 1152MHz on SLT or ",
"1228MHz on HiOPT can cause ": "1228MHz on HiOPT can cause ",
"permanent damage to your Switch!": "permanent damage to your Switch!",
"Proceed at your own risk!": "Proceed at your own risk!",
"921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on",
"SLT or HiOPT can cause ": "SLT or HiOPT can cause ",
"Auto": "Auto",
"Sleep Mode": "Sleep Mode",
"Stock": "Stock",
"Dev OC": "Dev OC",
"Boost Mode": "Boost Mode",
"Safe Max": "Safe Max",
"Unsafe Max": "Unsafe Max",
"Absolute Max": "Absolute Max",
"Boost Mode & Safe Max": "Boost Mode & Safe Max",
"Official Rating": "Official Rating",
"Default (Mariko)": "Default (Mariko)",
"Default (Erista)": "Default (Erista)",
"Rating": "Rating",
"Safe Max (Mariko)": "Safe Max (Mariko)",
"Safe Max (Erista)": "Safe Max (Erista)",
"Default": "Default",
"1581MHz Tbreak": "1581MHz Tbreak",
"1683MHz Tbreak": "1683MHz Tbreak",
"Extreme UV Table": "Extreme UV Table",
"No UV": "No UV",
"SLT Table": "SLT Table",
"HiOPT Table": "HiOPT Table",
"Power": "Power",
"Temp": "Temp",
"Voltage": "Voltage",
"TDP Threshold": "TDP Threshold",
"Lite TDP Threshold": "Lite TDP Threshold",
"Thermal Throttle Limit": "Thermal Throttle Limit",
"1600BL": "1600BL",
"1866BL": "1866BL",
"2133BL": "2133BL",
"BAT": "BAT",
"FAN": "FAN",
"DISP": "DISP",
"Board": "Board",
"Skin": "Skin",
"Now": "Now",
"Avg": "Avg",
"App ID": "App ID",
"Profile": "Profile",
"CPU": "CPU",
"GPU": "GPU",
"Memory": "Memory",
"Display": "Display",
"Governor": "Governor",
"SOC": "SOC",
"PCB": "PCB",
"PMIC": "PMIC",
"Docked": "Docked",
"Handheld": "Handheld",
"Charging": "Charging",
"USB Charger": "USB Charger",
"PD Charger": "PD Charger",
"VDD2": "VDD2",
"VDDQ": "VDDQ",
"GPU DVFS": "GPU DVFS"
}

View File

@@ -0,0 +1,35 @@
{
"Edit App Profile": "Editar perfil de la app",
"Advanced": "Avanzado",
"Edit Global Profile": "Editar perfil global",
"Temporary Overrides": "Anulaciones temporales",
"Temporary Overrides   Reset": "Anulaciones temporales   Reiniciar",
"Settings": "Configuración",
"Enable": "Habilitar",
"Uncapped Clocks": "Relojes sin límite",
"Override Boost Mode": "Sobrescribir modo Boost",
"Auto CPU Boost": "Impulso automático de CPU",
"Sync ReverseNX": "Sincronizar con ReverseNX",
"GPU DVFS": "GPU DVFS",
"Off": "Apagado",
"Official Service Method": "Método de servicio oficial",
"Hijack Method": "Método de secuestro",
"App ID": "ID App",
"EOS mode": "Modo EOS",
"Skin": "Tema",
"Now": "Ahora",
"Avg": "Med",
"Docked": "Conectado al dock",
"Handheld": "Portátil",
"Charging": "Cargando",
"PD Charger": "Cargador oficial",
"USB Charger": "Cargador USB",
"Docked   Reset": "Conectado al dock   Reiniciar",
"Handheld   Reset": "Portátil   Reiniciar",
"Charging   Reset": "Cargando   Reiniciar",
"PD Charger   Reset": "Cargador oficial   Reiniciar",
"USB Charger   Reset": "Cargador USB   Reiniciar",
"Memory": "Memoria",
"Default": "No sobrescribir",
"Profile": "Perfil"
}

132
dist/config/horizon-oc/lang/lang/it.json vendored Normal file
View File

@@ -0,0 +1,132 @@
{
"Information about Translation": "This is a translation made by Samybigio2011. If you find any errors, please report them on GitHub, or feel free to contribute!",
"Horizon OC Zeus": "Horizon OC Zeus",
"Edit App Profile": "Profilo App",
"Advanced": "Avanzate",
"Edit Global Profile": "Profilo Globale",
"Temporary Overrides": "Override Temporaneo",
"Temporary Overrides Reset": "Temporary Overrides Reset",
"Settings": "Impostazioni",
"Information": "Informazioni",
"Enable": "Abilita",
"Uncapped Clocks": "Sblocca Clock",
"Override Boost Mode": "Sovrascrivi Boost Mode",
"CPU Max Display Clock": "Massimo Clock CPU mostrato",
"Thermal Throttle": "Rallentamento Termico",
"Thermal Throttle Threshold": "Soglia Rallentamento Termico",
"Handheld TDP": "TPD Handheld",
"Handheld TDP Limit": "Limite TDP Handheld",
"Lite TDP Limit": "Limite TDP Lite",
"Enforce Board Limit": "Forza Limite di Potenza",
"Battery Charge Current": "Corrente di Ricarica",
"Display Refresh Rate Changing": "Cambio di Frequenza Display",
"Fix CPU Volt Bug": "Risolvi Bug CPU",
"[cfg] no enum format string": "[cfg] no enum format string",
"KIP": "KIP",
"Save KIP Settings": "Salva Impotazioni KIP",
"RAM Settings": "Impostazioni RAM",
"CPU Settings": "Impostazioni CPU",
"GPU Settings": "Impostazioni GPU",
"Experimental": "Esperimentale",
"Charge Current Override": "Sovrascrivi Corrente di Ricarica",
"Disabled": "Disabilitato",
"HP Mode": "Modalità HP",
"EMC Max Clock": "Clock EMC Massimo",
"EMC VDD2 Voltage": "Voltaggio VDD2 EMC",
"EMC VDDQ Voltage": "Voltaggio VDDQ EMC",
"DVB Shift": "Shift DVB",
"Memory Timings": "Timing Memoria",
"Memory Latencies": "Latency Memoria",
"t1 tRCD": "t1 tRCD",
"t2 tRP": "t2 tRP",
"t3 tRAS": "t3 tRAS",
"t4 tRRD": "t4 tRRD",
"t5 tRFC": "t5 tRFC",
"t6 tRTW": "t6 tRTW",
"t7 tWTR": "t7 tWTR",
"t8 tREFI": "t8 tREFI",
"Update RAM Timings": "Aggiorna Timing RAM",
"\uE150 This feature is EXPERIMENTAL": "\uE150 Questa funzione è ESPERIMENRALE!",
"and should only be used for testing!": "e dovrebbe essere usata solo per testare!",
"Read Latency": "Latency Lettura",
"Write Latency": "Latency Scrittura",
"CPU UV": "UV CPU",
"CPU Unlock": "Sblocco CPU",
"CPU VMIN": "VMIN CPU",
"CPU Max Voltage": "Voltaggio Massimo CPU",
"CPU UV Table": "Tavola UV CPU",
"CPU Low UV": "UV Basso CPU",
"CPU High UV": "UV Alto CPU",
"CPU Max Clock": "Clock Massimo CPU",
"CPU Low VMIN": "VMIN Basso CPU",
"CPU High VMIN": "VMIN Alto CPU",
"GPU Undervolt Table": "Tavola Undervolt GPU",
"Calculate GPU Vmin": "Calcola VMIN GPU",
"GPU VMIN": "VMIN GPU",
"GPU VMAX": "VMAX GPU",
"GPU Volt Offset": "Offset Voltaggio GPU",
"GPU Custom Table": "Tavola GPU Custom",
"GPU Custom Table (mV)": "Tavola GPU Custom (mV)",
"\uE150 Setting GPU Clocks past": "\uE150 Impostare Clock GPU oltre",
"1075MHz without UV, 1152MHz on SLT or ": "1075MHz senza UV, 1152MHz su SLT o ",
"1228MHz on HiOPT can cause ": "1228MHz su HiOPT può causare ",
"permanent damage to your Switch!": "danni permanenti alla tua console!",
"Proceed at your own risk!": "Procedi al tuo rischio!",
"921MHz without UV and 960MHz on": "921MHz senza UV e 960MHz su",
"SLT or HiOPT can cause ": "SLT o HiOPT può causare ",
"Auto": "Auto",
"Sleep Mode": "Modalità Sleep",
"Stock": "Stock",
"Dev OC": "OC Sviluppo",
"Boost Mode": "Modalità Boost",
"Safe Max": "Massimo Sicuro",
"Unsafe Max": "Massimo Insicuro",
"Absolute Max": "Massimo Assoluto",
"Boost Mode & Safe Max": "Modalità Boost e Massimo Sicuro",
"Official Rating": "Rating Ufficiale",
"Default (Mariko)": "Default (Mariko)",
"Default (Erista)": "Default (Erista)",
"Rating": "Rating",
"Safe Max (Mariko)": "Max Sicuro (Mariko)",
"Safe Max (Erista)": "Max Sicuro (Erista)",
"Default": "Default",
"1581MHz Tbreak": "Tbreak 1581MHz",
"1683MHz Tbreak": "Tbreak 1683MHz",
"Extreme UV Table": "Tavola UV Estremo",
"No UV": "No UV",
"SLT Table": "Tavola SLT",
"HiOPT Table": "Tavola HiOPT",
"Power": "Potenza",
"Temp": "Temperatura",
"Voltage": "Voltaggio",
"TDP Threshold": "Soglia TDP",
"Lite TDP Threshold": "Soglia TDP Lite",
"Thermal Throttle Limit": "Limite Rallentamento Termico",
"1600BL": "BL1600",
"1866BL": "BL1866",
"2133BL": "BL2133",
"BAT": "BAT",
"FAN": "FAN",
"DISP": "DISP",
"Board": "Scheda",
"Skin": "Skin",
"Now": "Ora",
"Avg": "Med",
"App ID": "ID App",
"Profile": "Profilo",
"CPU": "CPU",
"GPU": "GPU",
"Memory": "Memoria",
"Display": "Display",
"Governor": "Governor",
"SOC": "SOC",
"PCB": "PCB",
"PMIC": "PMIC",
"Docked": "Dock",
"Handheld": "Handheld",
"Charging": "In Carica",
"USB Charger": "Caricatore USB",
"PD Charger": "Caricatore PD",
"VDD2": "VDD2",
"VDDQ": "VDDQ"
}

View File

@@ -0,0 +1,133 @@
{
"Information about Translation": "This is a machine translation. If you find any errors, please report them on GitHub, or feel free to contribute!",
"Horizon OC Zeus": "Horizon OC Zeus",
"Edit App Profile": "编辑应用配置",
"Advanced": "高级",
"Edit Global Profile": "编辑全局配置",
"Temporary Overrides": "临时覆盖",
"Temporary Overrides Reset": "临时覆盖 重置",
"Settings": "设置",
"Information": "信息",
"Enable": "启用",
"Uncapped Clocks": "解除频率上限",
"Override Boost Mode": "覆盖加速模式",
"CPU Max Display Clock": "CPU 最大显示频率",
"Thermal Throttle": "温度节流",
"Thermal Throttle Threshold": "温度节流阈值",
"Handheld TDP": "掌机模式 TDP",
"Handheld TDP Limit": "掌机模式 TDP 限制",
"Lite TDP Limit": "Lite TDP 限制",
"Enforce Board Limit": "强制主板限制",
"Battery Charge Current": "电池充电电流",
"Display Refresh Rate Changing": "显示刷新率变更",
"Fix CPU Volt Bug": "修复 CPU 电压错误",
"[cfg] no enum format string": "[cfg] 无枚举格式字符串",
"KIP": "KIP",
"Save KIP Settings": "保存 KIP 设置",
"RAM Settings": "内存设置",
"CPU Settings": "CPU 设置",
"GPU Settings": "GPU 设置",
"Experimental": "实验性功能",
"Charge Current Override": "充电电流覆盖",
"Disabled": "禁用",
"HP Mode": "高性能模式",
"EMC Max Clock": "EMC 最大频率",
"EMC VDD2 Voltage": "EMC VDD2 电压",
"EMC VDDQ Voltage": "EMC VDDQ 电压",
"DVB Shift": "DVB 偏移",
"Memory Timings": "内存时序",
"Memory Latencies": "内存延迟",
"t1 tRCD": "t1 tRCD",
"t2 tRP": "t2 tRP",
"t3 tRAS": "t3 tRAS",
"t4 tRRD": "t4 tRRD",
"t5 tRFC": "t5 tRFC",
"t6 tRTW": "t6 tRTW",
"t7 tWTR": "t7 tWTR",
"t8 tREFI": "t8 tREFI",
"Update RAM Timings": "更新内存时序",
"\uE150 This feature is EXPERIMENTAL": "\uE150 此功能为实验性功能",
"and should only be used for testing!": "仅应用于测试!",
"Read Latency": "读取延迟",
"Write Latency": "写入延迟",
"CPU UV": "CPU 降压",
"CPU Unlock": "CPU 解锁",
"CPU VMIN": "CPU 最低电压",
"CPU Max Voltage": "CPU 最大电压",
"CPU UV Table": "CPU 降压表",
"CPU Low UV": "CPU 低频降压",
"CPU High UV": "CPU 高频降压",
"CPU Max Clock": "CPU 最大频率",
"CPU Low VMIN": "CPU 低频最低电压",
"CPU High VMIN": "CPU 高频最低电压",
"GPU Undervolt Table": "GPU 降压表",
"Calculate GPU Vmin": "计算 GPU 最低电压",
"GPU VMIN": "GPU 最低电压",
"GPU VMAX": "GPU 最大电压",
"GPU Volt Offset": "GPU 电压偏移",
"GPU Custom Table": "GPU 自定义表",
"GPU Custom Table (mV)": "GPU 自定义表 (mV)",
"\uE150 Setting GPU Clocks past": "\uE150 将 GPU 频率设置超过",
"1075MHz without UV, 1152MHz on SLT or ": "无降压时的 1075MHz、SLT 时的 1152MHz 或",
"1228MHz on HiOPT can cause ": "HiOPT 时的 1228MHz 可能会造成",
"permanent damage to your Switch!": "对您的 Switch 造成永久性损坏!",
"Proceed at your own risk!": "风险自负!",
"921MHz without UV and 960MHz on": "无降压时的 921MHz 和",
"SLT or HiOPT can cause ": "SLT 或 HiOPT 时的 960MHz 可能会造成",
"Auto": "自动",
"Sleep Mode": "休眠模式",
"Stock": "默认",
"Dev OC": "开发超频",
"Boost Mode": "加速模式",
"Safe Max": "安全最大值",
"Unsafe Max": "不安全最大值",
"Absolute Max": "绝对最大值",
"Boost Mode & Safe Max": "加速模式 & 安全最大值",
"Official Rating": "官方额定值",
"Default (Mariko)": "默认 (Mariko)",
"Default (Erista)": "默认 (Erista)",
"Rating": "额定值",
"Safe Max (Mariko)": "安全最大值 (Mariko)",
"Safe Max (Erista)": "安全最大值 (Erista)",
"Default": "默认",
"1581MHz Tbreak": "1581MHz Tbreak",
"1683MHz Tbreak": "1683MHz Tbreak",
"Extreme UV Table": "极限降压表",
"No UV": "不降压",
"SLT Table": "SLT 表",
"HiOPT Table": "HiOPT 表",
"Power": "功耗",
"Temp": "温度",
"Voltage": "电压",
"TDP Threshold": "TDP 阈值",
"Lite TDP Threshold": "Lite TDP 阈值",
"Thermal Throttle Limit": "温度节流限制",
"1600BL": "1600BL",
"1866BL": "1866BL",
"2133BL": "2133BL",
"BAT": "电池",
"FAN": "风扇",
"DISP": "显示",
"Board": "主板",
"Skin": "外壳",
"Now": "当前",
"Avg": "平均",
"App ID": "应用 ID",
"Profile": "配置",
"CPU": "CPU",
"GPU": "GPU",
"Memory": "内存",
"Display": "显示",
"Governor": "调速器",
"SOC": "SOC",
"PCB": "PCB",
"PMIC": "PMIC",
"Docked": "底座模式",
"Handheld": "掌机模式",
"Charging": "充电中",
"USB Charger": "USB 充电器",
"PD Charger": "PD 充电器",
"VDD2": "VDD2",
"VDDQ": "VDDQ",
"GPU DVFS": "GPU DVFS"
}

133
dist/config/horizon-oc/lang/zh-cn.json vendored Normal file
View File

@@ -0,0 +1,133 @@
{
"Information about Translation": "This is a machine translation. If you find any errors, please report them on GitHub, or feel free to contribute!",
"Horizon OC Zeus": "Horizon OC Zeus",
"Edit App Profile": "编辑应用配置",
"Advanced": "高级",
"Edit Global Profile": "编辑全局配置",
"Temporary Overrides": "临时覆盖",
"Temporary Overrides Reset": "临时覆盖 重置",
"Settings": "设置",
"Information": "信息",
"Enable": "启用",
"Uncapped Clocks": "解除频率上限",
"Override Boost Mode": "覆盖加速模式",
"CPU Max Display Clock": "CPU 最大显示频率",
"Thermal Throttle": "温度节流",
"Thermal Throttle Threshold": "温度节流阈值",
"Handheld TDP": "掌机模式 TDP",
"Handheld TDP Limit": "掌机模式 TDP 限制",
"Lite TDP Limit": "Lite TDP 限制",
"Enforce Board Limit": "强制主板限制",
"Battery Charge Current": "电池充电电流",
"Display Refresh Rate Changing": "显示刷新率变更",
"Fix CPU Volt Bug": "修复 CPU 电压错误",
"[cfg] no enum format string": "[cfg] 无枚举格式字符串",
"KIP": "KIP",
"Save KIP Settings": "保存 KIP 设置",
"RAM Settings": "内存设置",
"CPU Settings": "CPU 设置",
"GPU Settings": "GPU 设置",
"Experimental": "实验性功能",
"Charge Current Override": "充电电流覆盖",
"Disabled": "禁用",
"HP Mode": "高性能模式",
"EMC Max Clock": "EMC 最大频率",
"EMC VDD2 Voltage": "EMC VDD2 电压",
"EMC VDDQ Voltage": "EMC VDDQ 电压",
"DVB Shift": "DVB 偏移",
"Memory Timings": "内存时序",
"Memory Latencies": "内存延迟",
"t1 tRCD": "t1 tRCD",
"t2 tRP": "t2 tRP",
"t3 tRAS": "t3 tRAS",
"t4 tRRD": "t4 tRRD",
"t5 tRFC": "t5 tRFC",
"t6 tRTW": "t6 tRTW",
"t7 tWTR": "t7 tWTR",
"t8 tREFI": "t8 tREFI",
"Update RAM Timings": "更新内存时序",
"\uE150 This feature is EXPERIMENTAL": "\uE150 此功能为实验性功能",
"and should only be used for testing!": "仅应用于测试!",
"Read Latency": "读取延迟",
"Write Latency": "写入延迟",
"CPU UV": "CPU 降压",
"CPU Unlock": "CPU 解锁",
"CPU VMIN": "CPU 最低电压",
"CPU Max Voltage": "CPU 最大电压",
"CPU UV Table": "CPU 降压表",
"CPU Low UV": "CPU 低频降压",
"CPU High UV": "CPU 高频降压",
"CPU Max Clock": "CPU 最大频率",
"CPU Low VMIN": "CPU 低频最低电压",
"CPU High VMIN": "CPU 高频最低电压",
"GPU Undervolt Table": "GPU 降压表",
"Calculate GPU Vmin": "计算 GPU 最低电压",
"GPU VMIN": "GPU 最低电压",
"GPU VMAX": "GPU 最大电压",
"GPU Volt Offset": "GPU 电压偏移",
"GPU Custom Table": "GPU 自定义表",
"GPU Custom Table (mV)": "GPU 自定义表 (mV)",
"\uE150 Setting GPU Clocks past": "\uE150 将 GPU 频率设置超过",
"1075MHz without UV, 1152MHz on SLT or ": "无降压时的 1075MHz、SLT 时的 1152MHz 或",
"1228MHz on HiOPT can cause ": "HiOPT 时的 1228MHz 可能会造成",
"permanent damage to your Switch!": "对您的 Switch 造成永久性损坏!",
"Proceed at your own risk!": "风险自负!",
"921MHz without UV and 960MHz on": "无降压时的 921MHz 和",
"SLT or HiOPT can cause ": "SLT 或 HiOPT 时的 960MHz 可能会造成",
"Auto": "自动",
"Sleep Mode": "休眠模式",
"Stock": "默认",
"Dev OC": "开发超频",
"Boost Mode": "加速模式",
"Safe Max": "安全最大值",
"Unsafe Max": "不安全最大值",
"Absolute Max": "绝对最大值",
"Boost Mode & Safe Max": "加速模式 & 安全最大值",
"Official Rating": "官方额定值",
"Default (Mariko)": "默认 (Mariko)",
"Default (Erista)": "默认 (Erista)",
"Rating": "额定值",
"Safe Max (Mariko)": "安全最大值 (Mariko)",
"Safe Max (Erista)": "安全最大值 (Erista)",
"Default": "默认",
"1581MHz Tbreak": "1581MHz Tbreak",
"1683MHz Tbreak": "1683MHz Tbreak",
"Extreme UV Table": "极限降压表",
"No UV": "不降压",
"SLT Table": "SLT 表",
"HiOPT Table": "HiOPT 表",
"Power": "功耗",
"Temp": "温度",
"Voltage": "电压",
"TDP Threshold": "TDP 阈值",
"Lite TDP Threshold": "Lite TDP 阈值",
"Thermal Throttle Limit": "温度节流限制",
"1600BL": "1600BL",
"1866BL": "1866BL",
"2133BL": "2133BL",
"BAT": "电池",
"FAN": "风扇",
"DISP": "显示",
"Board": "主板",
"Skin": "外壳",
"Now": "当前",
"Avg": "平均",
"App ID": "应用 ID",
"Profile": "配置",
"CPU": "CPU",
"GPU": "GPU",
"Memory": "内存",
"Display": "显示",
"Governor": "调速器",
"SOC": "SOC",
"PCB": "PCB",
"PMIC": "PMIC",
"Docked": "底座模式",
"Handheld": "掌机模式",
"Charging": "充电中",
"USB Charger": "USB 充电器",
"PD Charger": "PD 充电器",
"VDD2": "VDD2",
"VDDQ": "VDDQ",
"GPU DVFS": "GPU DVFS"
}

Binary file not shown.

Binary file not shown.