diff --git a/Source/rewrite-hoc-clk/sysmodule/src/old_board.cpp b/Source/rewrite-hoc-clk/sysmodule/src/old_board.cpp
deleted file mode 100644
index 7c59fdb3..00000000
--- a/Source/rewrite-hoc-clk/sysmodule/src/old_board.cpp
+++ /dev/null
@@ -1,1328 +0,0 @@
-/*
- * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors
- *
- * 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 .
- *
- */
-
-/* --------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * , ,
- * wrote this file. As long as you retain this notice you can do whatever you
- * want with this stuff. If you meet any of us some day, and you think this
- * stuff is worth it, you can buy us a beer in return. - The sys-clk authors
- * --------------------------------------------------------------------------
- */
-
-// Note: Hoag crashes on display refresh rate init while in sleep mode
-
-#include
-#include "board.h"
-#include "errors.h"
-#include "rgltr.h"
-#include "file_utils.h"
-#include // for std::clamp
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#define MAX(A, B) std::max(A, B)
-#define MIN(A, B) std::min(A, B)
-#define CEIL(A) std::ceil(A)
-#define FLOOR(A) std::floor(A)
-#define ROUND(A) std::lround(A)
-
-
-#define FUSE_CPU_SPEEDO_0_CALIB 0x114
-//#define FUSE_CPU_SPEEDO_1_CALIB 0x12C
-#define FUSE_CPU_SPEEDO_2_CALIB 0x130
-
-#define FUSE_SOC_SPEEDO_0_CALIB 0x134
-//#define FUSE_SOC_SPEEDO_1_CALIB 0x138
-//#define FUSE_SOC_SPEEDO_2_CALIB 0x13C
-
-#define FUSE_CPU_IDDQ_CALIB 0x118
-#define FUSE_SOC_IDDQ_CALIB 0x140
-#define FUSE_GPU_IDDQ_CALIB 0x228
-
-#define HOSSVC_HAS_CLKRST (hosversionAtLeast(8,0,0))
-#define HOSSVC_HAS_TC (hosversionAtLeast(5,0,0))
-#define NVGPU_GPU_IOCTL_PMU_GET_GPU_LOAD 0x80044715
-#define NVSCHED_CTRL_ENABLE 0x00000601
-#define NVSCHED_CTRL_DISABLE 0x00000602
-
-constexpr u64 CpuTimeOutNs = 500'000'000;
-constexpr double Systemtickfrequency = 19200000.0 * (static_cast(CpuTimeOutNs) / 1'000'000'000.0);
-Result nvInitialize_rc;
-Result nvCheck = 1;
-Result nvCheck_sched = 1;
-
-LEvent threadexit;
-Thread gpuLThread;
-Thread cpuCore0Thread;
-Thread cpuCore1Thread;
-Thread cpuCore2Thread;
-Thread cpuCore3Thread;
-Thread miscThread;
-double temp = 0;
-
-PwmChannelSession g_ICon;
-Result pwmCheck = 1;
-Result pwmDutyCycleCheck = 1;
-double Rotation_Duty = 0;
-u8 fanLevel;
-
-uint32_t GPU_Load_u = 0, fd = 0, fd2 = 0;
-BatteryChargeInfo info;
-
-static SysClkSocType g_socType = SysClkSocType_Erista;
-static HorizonOCConsoleType g_consoleType = HorizonOCConsoleType_Iowa;
-
-u64 idletick0 = 0;
-u64 idletick1 = 0;
-u64 idletick2 = 0;
-// u64 idletick3 = 0;
-
-u32 cpu0, cpu1, cpu2, cpu3, cpuAvg;
-u16 cpuSpeedo0, cpuSpeedo2, socSpeedo0; // CPU, GPU, SOC
-u32 speedoBracket;
-u16 cpuIDDQ, gpuIDDQ, socIDDQ;
-u8 g_dramID = 0;
-u64 cldvfs, cldvfs_temp;
-u32 cachedEristaUvLowTune0 = 0, cachedEristaUvLowTune1 = 0, cachedMarikoUvHighTune0 = 0;
-
-static const u32 ramBrackets[][22] = {
- { 2133, 2200, 2266, 2300, 2366, 2400, 2433, 2466, 2533, 2566, 2600, 2633, 2700, 2733, 2766, 2833, 2866, 2900, 2933, 3033, 3066, 3100, },
- { 2300, 2366, 2433, 2466, 2533, 2566, 2633, 2700, 2733, 2800, 2833, 2900, 2933, 2966, 3033, 3066, 3100, 3133, 3166, 3200, 3233, 3266, },
- { 2433, 2466, 2533, 2600, 2666, 2733, 2766, 2800, 2833, 2866, 2933, 2966, 3033, 3066, 3100, 3133, 3166, 3200, 3233, 3300, 3333, 3366, },
- { 2500, 2533, 2600, 2633, 2666, 2733, 2800, 2866, 2900, 2966, 3033, 3100, 3166, 3200, 3233, 3266, 3300, 3333, 3366, 3400, 3400, 3400, },
-};
-
-static const u32 gpuDvfsArray[] = { 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, 710, 720, 730, 740, 750, 760, 770, 780, 790, 800};
-
-u32 dvfsTable[6][32] = {};
-u64 dvfsAddress;
-u32 ramVmin;
-
-const char* Board::GetModuleName(SysClkModule module, bool pretty)
-{
- ASSERT_ENUM_VALID(SysClkModule, module);
- return sysclkFormatModule(module, pretty);
-}
-
-const char* Board::GetProfileName(SysClkProfile profile, bool pretty)
-{
- ASSERT_ENUM_VALID(SysClkProfile, profile);
- return sysclkFormatProfile(profile, pretty);
-}
-
-const char* Board::GetThermalSensorName(SysClkThermalSensor sensor, bool pretty)
-{
- ASSERT_ENUM_VALID(SysClkThermalSensor, sensor);
- return sysclkFormatThermalSensor(sensor, pretty);
-}
-
-const char* Board::GetPowerSensorName(SysClkPowerSensor sensor, bool pretty)
-{
- ASSERT_ENUM_VALID(SysClkPowerSensor, sensor);
- return sysclkFormatPowerSensor(sensor, pretty);
-}
-
-PcvModule Board::GetPcvModule(SysClkModule sysclkModule)
-{
- switch(sysclkModule)
- {
- case SysClkModule_CPU:
- return PcvModule_CpuBus;
- case SysClkModule_GPU:
- return PcvModule_GPU;
- case SysClkModule_MEM:
- return PcvModule_EMC;
- default:
- ASSERT_ENUM_VALID(SysClkModule, sysclkModule);
- }
-
- return (PcvModule)0;
-}
-
-PcvModuleId Board::GetPcvModuleId(SysClkModule sysclkModule)
-{
- PcvModuleId pcvModuleId;
- Result rc = pcvGetModuleId(&pcvModuleId, GetPcvModule(sysclkModule));
- ASSERT_RESULT_OK(rc, "pcvGetModuleId");
-
- return pcvModuleId;
-}
-
-void CheckCore(void *idletickPtr) {
- u64* idletick = static_cast(idletickPtr);
- while(true) {
- u64 idletickA;
- u64 idletickB;
- svcGetInfo(&idletickB, InfoType_IdleTickCount, INVALID_HANDLE, -1);
- svcWaitForAddress(&threadexit, ArbitrationType_WaitIfEqual, 0, CpuTimeOutNs);
- svcGetInfo(&idletickA, InfoType_IdleTickCount, INVALID_HANDLE, -1);
- *idletick = idletickA - idletickB;
- }
-}
-
-void gpuLoadThread(void*) {
- #define gpu_samples_average 8
- uint32_t gpu_load_array[gpu_samples_average] = {0};
- size_t i = 0;
- if (R_SUCCEEDED(nvCheck)) do {
- u32 temp;
- if (R_SUCCEEDED(nvIoctl(fd, NVGPU_GPU_IOCTL_PMU_GET_GPU_LOAD, &temp))) {
- gpu_load_array[i++ % gpu_samples_average] = temp;
- GPU_Load_u = std::accumulate(&gpu_load_array[0], &gpu_load_array[gpu_samples_average], 0) / gpu_samples_average;
- }
- svcSleepThread(16'666'000); // wait a bit (this is the perfect amount of time to keep the reading accurate)
- } while(true);
-}
-
-void miscThreadFunc(void*) {
- for(;;) {
- if (R_SUCCEEDED(pwmCheck)) {
- if (R_SUCCEEDED(pwmChannelSessionGetDutyCycle(&g_ICon, &temp))) {
- temp *= 10;
- temp = trunc(temp);
- temp /= 10;
- Rotation_Duty = 100.0 - temp;
- }
- }
- fanLevel = (u8)Rotation_Duty;
- svcSleepThread(300'000'000);
- }
-}
-
-void Board::Initialize()
-{
- Result rc = 0;
- if(HOSSVC_HAS_CLKRST)
- {
- rc = clkrstInitialize();
- ASSERT_RESULT_OK(rc, "clkrstInitialize");
- }
- else
- {
- rc = pcvInitialize();
- ASSERT_RESULT_OK(rc, "pcvInitialize");
- }
-
- rc = apmExtInitialize();
- ASSERT_RESULT_OK(rc, "apmExtInitialize");
-
- rc = psmInitialize();
- ASSERT_RESULT_OK(rc, "psmInitialize");
-
- if(HOSSVC_HAS_TC)
- {
- rc = tcInitialize();
- ASSERT_RESULT_OK(rc, "tcInitialize");
- }
-
- rc = max17050Initialize();
- ASSERT_RESULT_OK(rc, "max17050Initialize");
-
- rc = tmp451Initialize();
- ASSERT_RESULT_OK(rc, "tmp451Initialize");
- nvInitialize_rc = nvInitialize();
- if (R_SUCCEEDED(nvInitialize_rc)) {
- nvCheck = nvOpen(&fd, "/dev/nvhost-ctrl-gpu");
- nvCheck_sched = nvOpen(&fd2, "/dev/nvsched-ctrl");
- }
-
- rc = rgltrInitialize();
- ASSERT_RESULT_OK(rc, "rgltrInitialize");
-
- // if (R_SUCCEEDED(fanInitialize())) {
- // if (hosversionAtLeast(7,0,0)) fanCheck = fanOpenController(&fanController, 0x3D000001);
- // else fanCheck = fanOpenController(&fanController, 1);
- // }
-
- rc = pmdmntInitialize();
- ASSERT_RESULT_OK(rc, "pmdmntInitialize");
-
- threadCreate(&gpuLThread, gpuLoadThread, NULL, NULL, 0x1000, 0x3F, -2);
- threadStart(&gpuLThread);
- leventClear(&threadexit);
- threadCreate(&cpuCore0Thread, CheckCore, &idletick0, NULL, 0x1000, 0x10, 0);
- threadCreate(&cpuCore1Thread, CheckCore, &idletick1, NULL, 0x1000, 0x10, 1);
- threadCreate(&cpuCore2Thread, CheckCore, &idletick2, NULL, 0x1000, 0x10, 2);
- // threadCreate(&cpuCore3Thread, CheckCore, &idletick3, NULL, 0x1000, 0x10, 3);
- threadCreate(&miscThread, miscThreadFunc, NULL, NULL, 0x1000, 0x10, 3);
-
- threadStart(&cpuCore0Thread);
- threadStart(&cpuCore1Thread);
- threadStart(&cpuCore2Thread);
- // threadStart(&cpuCore3Thread);
- threadStart(&miscThread);
- batteryInfoInitialize();
- FetchHardwareInfos();
-
- if (hosversionAtLeast(6,0,0) && R_SUCCEEDED(pwmInitialize())) {
- pwmCheck = pwmOpenSession2(&g_ICon, 0x3D000001);
- }
-
- if(!IsHoag()) {
- u64 clkVirtAddr, dsiVirtAddr, outsize;
- rc = svcQueryMemoryMapping(&clkVirtAddr, &outsize, 0x60006000, 0x1000);
- ASSERT_RESULT_OK(rc, "svcQueryMemoryMapping (clk)");
- rc = svcQueryMemoryMapping(&dsiVirtAddr, &outsize, 0x54300000, 0x40000);
- ASSERT_RESULT_OK(rc, "svcQueryMemoryMapping (dsi)");
-
- DisplayRefreshConfig cfg = {.clkVirtAddr = clkVirtAddr, .dsiVirtAddr = dsiVirtAddr};
-
- DisplayRefresh_Initialize(&cfg);
- }
-
- rc = svcQueryMemoryMapping(&cldvfs, &cldvfs_temp, CLDVFS_REGION_BASE, CLDVFS_REGION_SIZE);
- ASSERT_RESULT_OK(rc, "svcQueryMemoryMapping (cldvfs)");
-
- if(Board::GetSocType() == SysClkSocType_Erista) {
- cachedEristaUvLowTune0 = *(u32*)(cldvfs + CL_DVFS_TUNE0_0);
- cachedEristaUvLowTune1 = *(u32*)(cldvfs + CL_DVFS_TUNE1_0);
- } else {
- Board::SetHz(SysClkModule_CPU, 1785000000);
- cachedMarikoUvHighTune0 = *(u32*)(cldvfs + CL_DVFS_TUNE0_0);
- Board::ResetToStockCpu();
- }
-
-
-}
-
-void Board::fuseReadSpeedos() {
-
- u64 pid = 0;
- if (R_FAILED(pmdmntGetProcessId(&pid, 0x0100000000000006))) {
- return;
- }
-
- Handle debug;
- if (R_FAILED(svcDebugActiveProcess(&debug, pid))) {
- return;
- }
-
- MemoryInfo mem_info = {0};
- u32 pageinfo = 0;
- u64 addr = 0;
-
- char stack[0x10] = {0};
- const char compare[0x10] = {0};
- char dump[0x400] = {0};
-
- while (true) {
- if (R_FAILED(svcQueryDebugProcessMemory(&mem_info, &pageinfo, debug, addr)) || mem_info.addr < addr) {
- break;
- }
-
- if (mem_info.type == MemType_Io && mem_info.size == 0x1000) {
- if (R_FAILED(svcReadDebugProcessMemory(stack, debug, mem_info.addr, sizeof(stack)))) {
- break;
- }
-
- if (memcmp(stack, compare, sizeof(stack)) == 0) {
- if (R_FAILED(svcReadDebugProcessMemory(dump, debug, mem_info.addr + 0x800, sizeof(dump)))) {
- break;
- }
-
- cpuSpeedo0 = *reinterpret_cast(dump + FUSE_CPU_SPEEDO_0_CALIB);
- cpuSpeedo2 = *reinterpret_cast(dump + FUSE_CPU_SPEEDO_2_CALIB);
- socSpeedo0 = *reinterpret_cast(dump + FUSE_SOC_SPEEDO_0_CALIB);
- cpuIDDQ = *reinterpret_cast(dump + FUSE_CPU_IDDQ_CALIB);
- gpuIDDQ = *reinterpret_cast(dump + FUSE_SOC_IDDQ_CALIB);
- socIDDQ = *reinterpret_cast(dump + FUSE_GPU_IDDQ_CALIB);
-
- svcCloseHandle(debug);
- return;
- }
- }
-
- addr = mem_info.addr + mem_info.size;
- }
-
- svcCloseHandle(debug);
-}
-
-u16 Board::getSpeedo(HorizonOCSpeedo speedoType) {
- switch(speedoType) {
- case HorizonOCSpeedo_CPU:
- return cpuSpeedo0;
- case HorizonOCSpeedo_GPU:
- return cpuSpeedo2;
- case HorizonOCSpeedo_SOC:
- return socSpeedo0;
- default:
- ASSERT_ENUM_VALID(HorizonOCSpeedo, speedoType);
- return 0;
- }
-}
-
-u16 Board::getIDDQ(HorizonOCSpeedo speedoType) {
- switch(speedoType) {
- case HorizonOCSpeedo_CPU:
- return cpuIDDQ;
- case HorizonOCSpeedo_GPU:
- return gpuIDDQ;
- case HorizonOCSpeedo_SOC:
- return socIDDQ;
- default:
- ASSERT_ENUM_VALID(HorizonOCSpeedo, speedoType);
- return 0;
- }
-}
-
-
-void Board::Exit()
-{
- if(HOSSVC_HAS_CLKRST)
- {
- clkrstExit();
- }
- else
- {
- pcvExit();
- }
-
- apmExtExit();
- psmExit();
-
- if(HOSSVC_HAS_TC)
- {
- tcExit();
- }
-
- max17050Exit();
- tmp451Exit();
-
- threadClose(&gpuLThread);
- threadClose(&cpuCore0Thread);
- threadClose(&cpuCore1Thread);
- threadClose(&cpuCore2Thread);
- // threadClose(&cpuCore3Thread);
- threadClose(&miscThread);
-
- pwmChannelSessionClose(&g_ICon);
- pwmExit();
- rgltrExit();
- batteryInfoExit();
- pmdmntExit();
- nvExit();
- if(!IsHoag())
- DisplayRefresh_Shutdown();
-}
-
-SysClkProfile Board::GetProfile()
-{
- std::uint32_t mode = 0;
- Result rc = apmExtGetPerformanceMode(&mode);
- ASSERT_RESULT_OK(rc, "apmExtGetPerformanceMode");
-
- if(mode)
- {
- return SysClkProfile_Docked;
- }
-
- PsmChargerType chargerType;
-
- rc = psmGetChargerType(&chargerType);
- ASSERT_RESULT_OK(rc, "psmGetChargerType");
-
- if(chargerType == PsmChargerType_EnoughPower)
- {
- return SysClkProfile_HandheldChargingOfficial;
- }
- else if(chargerType == PsmChargerType_LowPower)
- {
- return SysClkProfile_HandheldChargingUSB;
- }
-
- return SysClkProfile_Handheld;
-}
-
-void Board::SetHz(SysClkModule module, std::uint32_t hz)
-{
- Result rc = 0;
- if(module == HorizonOCModule_Display) {
- if(!IsHoag())
- DisplayRefresh_SetRate(hz);
- return;
- }
- if(module > SysClkModule_MEM)
- return;
- if(HOSSVC_HAS_CLKRST)
- {
- ClkrstSession session = {0};
-
- rc = clkrstOpenSession(&session, Board::GetPcvModuleId(module), 3);
- ASSERT_RESULT_OK(rc, "clkrstOpenSession");
- rc = clkrstSetClockRate(&session, hz);
- ASSERT_RESULT_OK(rc, "clkrstSetClockRate");
- if (module == SysClkModule_CPU) {
- svcSleepThread(200'000);
- rc = clkrstSetClockRate(&session, hz);
- ASSERT_RESULT_OK(rc, "clkrstSetClockRate");
- }
- clkrstCloseSession(&session);
- }
- else
- {
- rc = pcvSetClockRate(Board::GetPcvModule(module), hz);
- ASSERT_RESULT_OK(rc, "pcvSetClockRate");
- if (module == SysClkModule_CPU) {
- svcSleepThread(200'000);
- rc = pcvSetClockRate(Board::GetPcvModule(module), hz);
- ASSERT_RESULT_OK(rc, "pcvSetClockRate");
- }
- }
-}
-
-std::uint32_t Board::GetHz(SysClkModule module)
-{
- Result rc = 0;
- std::uint32_t hz = 0;
-
- if(module == HorizonOCModule_Display) {
- if(!IsHoag())
- DisplayRefresh_GetRate(&hz, false);
- else
- hz = 60;
- return hz;
- }
-
- if(HOSSVC_HAS_CLKRST)
- {
- ClkrstSession session = {0};
-
- rc = clkrstOpenSession(&session, Board::GetPcvModuleId(module), 3);
- ASSERT_RESULT_OK(rc, "clkrstOpenSession");
-
- rc = clkrstGetClockRate(&session, &hz);
- ASSERT_RESULT_OK(rc, "clkrstSetClockRate");
-
- clkrstCloseSession(&session);
- }
- else
- {
- rc = pcvGetClockRate(Board::GetPcvModule(module), &hz);
- ASSERT_RESULT_OK(rc, "pcvGetClockRate");
- }
-
- return hz;
-}
-
-std::uint32_t Board::GetRealHz(SysClkModule module)
-{
- u32 hz = 0;
- switch(module)
- {
- case SysClkModule_CPU:
- return t210ClkCpuFreq();
- case SysClkModule_GPU:
- return t210ClkGpuFreq();
- case SysClkModule_MEM:
- return t210ClkMemFreq();
- case HorizonOCModule_Display:
- if(!IsHoag())
- DisplayRefresh_GetRate(&hz, false);
- else
- hz = 60;
- return hz;
- default:
- ASSERT_ENUM_VALID(SysClkModule, module);
- }
-
- return 0;
-}
-
-void Board::GetFreqList(SysClkModule module, std::uint32_t* outList, std::uint32_t maxCount, std::uint32_t* outCount)
-{
- Result rc = 0;
- PcvClockRatesListType type;
- s32 tmpInMaxCount = maxCount;
- s32 tmpOutCount = 0;
-
-
-
- if(HOSSVC_HAS_CLKRST)
- {
- ClkrstSession session = {0};
-
- rc = clkrstOpenSession(&session, Board::GetPcvModuleId(module), 3);
- ASSERT_RESULT_OK(rc, "clkrstOpenSession");
-
- rc = clkrstGetPossibleClockRates(&session, outList, tmpInMaxCount, &type, &tmpOutCount);
- ASSERT_RESULT_OK(rc, "clkrstGetPossibleClockRates");
-
- clkrstCloseSession(&session);
- }
- else
- {
- rc = pcvGetPossibleClockRates(Board::GetPcvModule(module), outList, tmpInMaxCount, &type, &tmpOutCount);
- ASSERT_RESULT_OK(rc, "pcvGetPossibleClockRates");
- }
-
- if(type != PcvClockRatesListType_Discrete)
- {
- ERROR_THROW("Unexpected PcvClockRatesListType: %u (module = %s)", type, Board::GetModuleName(module, false));
- }
-
- *outCount = tmpOutCount;
-}
-
-void Board::ResetToStock()
-{
- Result rc = 0;
- if(hosversionAtLeast(9,0,0))
- {
- std::uint32_t confId = 0;
- rc = apmExtGetCurrentPerformanceConfiguration(&confId);
- ASSERT_RESULT_OK(rc, "apmExtGetCurrentPerformanceConfiguration");
-
- SysClkApmConfiguration* apmConfiguration = NULL;
- for(size_t i = 0; sysclk_g_apm_configurations[i].id; i++)
- {
- if(sysclk_g_apm_configurations[i].id == confId)
- {
- apmConfiguration = &sysclk_g_apm_configurations[i];
- break;
- }
- }
-
- if(!apmConfiguration)
- {
- ERROR_THROW("Unknown apm configuration: %x", confId);
- }
-
- Board::SetHz(SysClkModule_CPU, apmConfiguration->cpu_hz);
- Board::SetHz(SysClkModule_GPU, apmConfiguration->gpu_hz);
- Board::SetHz(SysClkModule_MEM, apmConfiguration->mem_hz);
- }
- else
- {
- std::uint32_t mode = 0;
- rc = apmExtGetPerformanceMode(&mode);
- ASSERT_RESULT_OK(rc, "apmExtGetPerformanceMode");
-
- rc = apmExtSysRequestPerformanceMode(mode);
- ASSERT_RESULT_OK(rc, "apmExtSysRequestPerformanceMode");
- }
-}
-
-void Board::ResetToStockCpu()
-{
- Result rc = 0;
- if(hosversionAtLeast(9,0,0))
- {
- std::uint32_t confId = 0;
- rc = apmExtGetCurrentPerformanceConfiguration(&confId);
- ASSERT_RESULT_OK(rc, "apmExtGetCurrentPerformanceConfiguration");
-
- SysClkApmConfiguration* apmConfiguration = NULL;
- for(size_t i = 0; sysclk_g_apm_configurations[i].id; i++)
- {
- if(sysclk_g_apm_configurations[i].id == confId)
- {
- apmConfiguration = &sysclk_g_apm_configurations[i];
- break;
- }
- }
-
- if(!apmConfiguration)
- {
- ERROR_THROW("Unknown apm configuration: %x", confId);
- }
-
- Board::SetHz(SysClkModule_CPU, apmConfiguration->cpu_hz);
- }
- else
- {
- std::uint32_t mode = 0;
- rc = apmExtGetPerformanceMode(&mode);
- ASSERT_RESULT_OK(rc, "apmExtGetPerformanceMode");
-
- rc = apmExtSysRequestPerformanceMode(mode);
- ASSERT_RESULT_OK(rc, "apmExtSysRequestPerformanceMode");
- }
-}
-
-void Board::ResetToStockMem()
-{
- Result rc = 0;
- if(hosversionAtLeast(9,0,0))
- {
- std::uint32_t confId = 0;
- rc = apmExtGetCurrentPerformanceConfiguration(&confId);
- ASSERT_RESULT_OK(rc, "apmExtGetCurrentPerformanceConfiguration");
-
- SysClkApmConfiguration* apmConfiguration = NULL;
- for(size_t i = 0; sysclk_g_apm_configurations[i].id; i++)
- {
- if(sysclk_g_apm_configurations[i].id == confId)
- {
- apmConfiguration = &sysclk_g_apm_configurations[i];
- break;
- }
- }
-
- if(!apmConfiguration)
- {
- ERROR_THROW("Unknown apm configuration: %x", confId);
- }
-
- Board::SetHz(SysClkModule_MEM, apmConfiguration->mem_hz);
- }
- else
- {
- std::uint32_t mode = 0;
- rc = apmExtGetPerformanceMode(&mode);
- ASSERT_RESULT_OK(rc, "apmExtGetPerformanceMode");
-
- rc = apmExtSysRequestPerformanceMode(mode);
- ASSERT_RESULT_OK(rc, "apmExtSysRequestPerformanceMode");
- }
-}
-
-void Board::ResetToStockGpu()
-{
- Result rc = 0;
- if(hosversionAtLeast(9,0,0))
- {
- std::uint32_t confId = 0;
- rc = apmExtGetCurrentPerformanceConfiguration(&confId);
- ASSERT_RESULT_OK(rc, "apmExtGetCurrentPerformanceConfiguration");
-
- SysClkApmConfiguration* apmConfiguration = NULL;
- for(size_t i = 0; sysclk_g_apm_configurations[i].id; i++)
- {
- if(sysclk_g_apm_configurations[i].id == confId)
- {
- apmConfiguration = &sysclk_g_apm_configurations[i];
- break;
- }
- }
-
- if(!apmConfiguration)
- {
- ERROR_THROW("Unknown apm configuration: %x", confId);
- }
-
- Board::SetHz(SysClkModule_GPU, apmConfiguration->gpu_hz);
- }
- else
- {
- std::uint32_t mode = 0;
- rc = apmExtGetPerformanceMode(&mode);
- ASSERT_RESULT_OK(rc, "apmExtGetPerformanceMode");
-
- rc = apmExtSysRequestPerformanceMode(mode);
- ASSERT_RESULT_OK(rc, "apmExtSysRequestPerformanceMode");
- }
-}
-
-void Board::ResetToStockDisplay() {
- if(!IsHoag())
- DisplayRefresh_SetRate(60);
-}
-
-u8 Board::GetHighestDockedDisplayRate() {
- if(Board::GetConsoleType() != HorizonOCConsoleType_Hoag) {
- return DisplayRefresh_GetDockedHighestAllowed();
- } else
- return 60;
-}
-
-std::uint32_t Board::GetTemperatureMilli(SysClkThermalSensor sensor)
-{
- std::int32_t millis = 0;
-
- if(sensor == SysClkThermalSensor_SOC)
- {
- millis = tmp451TempSoc();
- }
- else if(sensor == SysClkThermalSensor_PCB)
- {
- millis = tmp451TempPcb();
- }
- else if(sensor == SysClkThermalSensor_Skin)
- {
- if(HOSSVC_HAS_TC)
- {
- Result rc;
- rc = tcGetSkinTemperatureMilliC(&millis);
- ASSERT_RESULT_OK(rc, "tcGetSkinTemperatureMilliC");
- }
- }
- else if (sensor == HorizonOCThermalSensor_Battery) {
- batteryInfoGetChargeInfo(&info);
- millis = batteryInfoGetTemperatureMiliCelsius(&info);
- }
- else if (sensor == HorizonOCThermalSensor_PMIC) {
- millis = 50000;
- }
- else
- {
- ASSERT_ENUM_VALID(SysClkThermalSensor, sensor);
- }
-
- return std::max(0, millis);
-}
-
-std::int32_t Board::GetPowerMw(SysClkPowerSensor sensor)
-{
- switch(sensor)
- {
- case SysClkPowerSensor_Now:
- return max17050PowerNow();
- case SysClkPowerSensor_Avg:
- return max17050PowerAvg();
- default:
- ASSERT_ENUM_VALID(SysClkPowerSensor, sensor);
- }
-
- return 0;
-}
-
-u32 GetMaxCpuLoad() {
- float cpuUsage0 = std::clamp(((Systemtickfrequency - idletick0) / static_cast(Systemtickfrequency)) * 1000.0, 0.0, 1000.0);
- float cpuUsage1 = std::clamp(((Systemtickfrequency - idletick1) / static_cast(Systemtickfrequency)) * 1000.0, 0.0, 1000.0);
- float cpuUsage2 = std::clamp(((Systemtickfrequency - idletick2) / static_cast(Systemtickfrequency)) * 1000.0, 0.0, 1000.0);
- // float cpuUsage3 = std::clamp(((Systemtickfrequency - idletick3) / static_cast(Systemtickfrequency)) * 1000.0, 0.0, 1000.0);
-
- return std::round(std::max({cpuUsage0, cpuUsage1, cpuUsage2}));
-}
-
-std::uint32_t Board::GetPartLoad(SysClkPartLoad loadSource)
-{
- switch(loadSource)
- {
- case SysClkPartLoad_EMC:
- return t210EmcLoadAll();
- case SysClkPartLoad_EMCCpu:
- return t210EmcLoadCpu();
- case HocClkPartLoad_GPU:
- return GPU_Load_u;
- case HocClkPartLoad_CPUMax:
- return GetMaxCpuLoad();
- case HocClkPartLoad_BAT:
- batteryInfoGetChargeInfo(&info);
- return info.RawBatteryCharge;
- case HocClkPartLoad_FAN:
- return fanLevel;
- default:
- ASSERT_ENUM_VALID(SysClkPartLoad, loadSource);
- }
-
- return 0;
-}
-
-
-SysClkSocType Board::GetSocType() {
- return g_socType;
-}
-
-HorizonOCConsoleType Board::GetConsoleType() {
- return g_consoleType;
-}
-
-u8 Board::GetDramID() {
- return g_dramID;
-}
-
-void Board::FetchHardwareInfos()
-{
- fuseReadSpeedos();
- SetSpeedoBracket();
- u64 sku = 0, dramID = 0;
- Result rc = splInitialize();
- ASSERT_RESULT_OK(rc, "splInitialize");
-
- rc = splGetConfig(SplConfigItem_HardwareType, &sku);
- ASSERT_RESULT_OK(rc, "splGetConfig");
-
- rc = splGetConfig(SplConfigItem_DramId, &dramID);
- ASSERT_RESULT_OK(rc, "splGetConfig");
-
- splExit();
-
- switch(sku)
- {
- case 2:
- case 3:
- case 4:
- case 5:
- g_socType = SysClkSocType_Mariko;
- break;
- default:
- g_socType = SysClkSocType_Erista;
- }
-
- if (g_socType == SysClkSocType_Mariko) {
- CacheDvfsTable();
- }
-
- g_consoleType = (HorizonOCConsoleType)sku;
- g_dramID = (u8)dramID;
-}
-
-/*
-* Switch Power domains (max77620):
-* Name | Usage | uV step | uV min | uV default | uV max | Init
-*-------+---------------+---------+--------+------------+---------+------------------
-* sd0 | SoC | 12500 | 600000 | 625000 | 1400000 | 1.125V (pkg1.1)
-* sd1 | SDRAM | 12500 | 600000 | 1125000 | 1125000 | 1.1V (pkg1.1)
-* sd2 | ldo{0-1, 7-8} | 12500 | 600000 | 1325000 | 1350000 | 1.325V (pcv)
-* sd3 | 1.8V general | 12500 | 600000 | 1800000 | 1800000 |
-* ldo0 | Display Panel | 25000 | 800000 | 1200000 | 1200000 | 1.2V (pkg1.1)
-* ldo1 | XUSB, PCIE | 25000 | 800000 | 1050000 | 1050000 | 1.05V (pcv)
-* ldo2 | SDMMC1 | 50000 | 800000 | 1800000 | 3300000 |
-* ldo3 | GC ASIC | 50000 | 800000 | 3100000 | 3100000 | 3.1V (pcv)
-* ldo4 | RTC | 12500 | 800000 | 850000 | 850000 | 0.85V (AO, pcv)
-* ldo5 | GC Card | 50000 | 800000 | 1800000 | 1800000 | 1.8V (pcv)
-* ldo6 | Touch, ALS | 50000 | 800000 | 2900000 | 2900000 | 2.9V (pcv)
-* ldo7 | XUSB | 50000 | 800000 | 1050000 | 1050000 | 1.05V (pcv)
-* ldo8 | XUSB, DP, MCU | 50000 | 800000 | 1050000 | 2800000 | 1.05V/2.8V (pcv)
-
-typedef enum {
- PcvPowerDomainId_Max77620_Sd0 = 0x3A000080,
- PcvPowerDomainId_Max77620_Sd1 = 0x3A000081, // vdd2
- PcvPowerDomainId_Max77620_Sd2 = 0x3A000082,
- PcvPowerDomainId_Max77620_Sd3 = 0x3A000083,
- PcvPowerDomainId_Max77620_Ldo0 = 0x3A0000A0,
- PcvPowerDomainId_Max77620_Ldo1 = 0x3A0000A1,
- PcvPowerDomainId_Max77620_Ldo2 = 0x3A0000A2,
- PcvPowerDomainId_Max77620_Ldo3 = 0x3A0000A3,
- PcvPowerDomainId_Max77620_Ldo4 = 0x3A0000A4,
- PcvPowerDomainId_Max77620_Ldo5 = 0x3A0000A5,
- PcvPowerDomainId_Max77620_Ldo6 = 0x3A0000A6,
- PcvPowerDomainId_Max77620_Ldo7 = 0x3A0000A7,
- PcvPowerDomainId_Max77620_Ldo8 = 0x3A0000A8,
- PcvPowerDomainId_Max77621_Cpu = 0x3A000003,
- PcvPowerDomainId_Max77621_Gpu = 0x3A000004,
- PcvPowerDomainId_Max77812_Cpu = 0x3A000003,
- PcvPowerDomainId_Max77812_Gpu = 0x3A000004,
- PcvPowerDomainId_Max77812_Dram = 0x3A000005, // vddq
-} PowerDomainId;
-
-*/
-
-std::uint32_t Board::GetVoltage(HocClkVoltage voltage)
-{
- RgltrSession session;
- Result rc = 0;
- u32 out = 0;
- switch(voltage)
- {
- case HocClkVoltage_SOC:
- rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77620_Sd0);
- ASSERT_RESULT_OK(rc, "rgltrOpenSession")
- rgltrGetVoltage(&session, &out);
- rgltrCloseSession(&session);
- break;
- case HocClkVoltage_EMCVDD2:
- rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77620_Sd1);
- ASSERT_RESULT_OK(rc, "rgltrOpenSession")
- rgltrGetVoltage(&session, &out);
- rgltrCloseSession(&session);
- break;
- case HocClkVoltage_CPU:
- if(Board::GetSocType() == SysClkSocType_Mariko)
- rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77621_Cpu);
- else
- rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77812_Cpu);
- ASSERT_RESULT_OK(rc, "rgltrOpenSession")
- rgltrGetVoltage(&session, &out);
- rgltrCloseSession(&session);
- break;
- case HocClkVoltage_GPU:
- if(Board::GetSocType() == SysClkSocType_Mariko)
- rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77621_Gpu);
- else
- rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77812_Gpu);
- ASSERT_RESULT_OK(rc, "rgltrOpenSession")
- rgltrGetVoltage(&session, &out);
- rgltrCloseSession(&session);
- break;
- case HocClkVoltage_EMCVDDQ_MarikoOnly:
- if(Board::GetSocType() == SysClkSocType_Mariko) {
- rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77812_Dram);
- ASSERT_RESULT_OK(rc, "rgltrOpenSession")
- rgltrGetVoltage(&session, &out);
- rgltrCloseSession(&session);
- } else {
- out = Board::GetVoltage(HocClkVoltage_EMCVDD2);
- }
- break;
- case HocClkVoltage_Display:
- rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77620_Ldo0);
- ASSERT_RESULT_OK(rc, "rgltrOpenSession")
- rgltrGetVoltage(&session, &out);
- rgltrCloseSession(&session);
- break;
- case HocClkVoltage_Battery:
- batteryInfoGetChargeInfo(&info);
- out = info.VoltageAvg;
- break;
- default:
- ASSERT_ENUM_VALID(HocClkVoltage, voltage);
- }
-
- return out > 0 ? out : 0;
-}
-
-void Board::SetSpeedoBracket() {
- if (cpuSpeedo2 >= 1754) {
- speedoBracket = 3;
- } else if (cpuSpeedo2 >= 1690) {
- speedoBracket = 2;
- } else if (cpuSpeedo2 > 1625) {
- speedoBracket = 1;
- } else {
- speedoBracket = 0;
- }
-}
-
-u32 Board::GetMinimumGpuVoltage(u32 freqMhz) {
- if (freqMhz <= 1600)
- return 0;
-
- for (u32 voltageIndex = 0; voltageIndex < 22; ++voltageIndex) {
- if (freqMhz <= ramBrackets[speedoBracket][voltageIndex]) {
- return gpuDvfsArray[voltageIndex];
- }
- }
-
- return 800;
-}
-
-Handle Board::GetPcvHandle() {
- constexpr u64 PcvID = 0x10000000000001a;
- u64 processIDList[80]{};
- s32 processCount = 0;
- Handle handle = INVALID_HANDLE;
-
- DebugEventInfo debugEvent{};
-
- /* Get all running processes. */
- Result resultGetProcessList = svcGetProcessList(&processCount, processIDList, std::size(processIDList));
- if (R_FAILED(resultGetProcessList)) {
- return INVALID_HANDLE;
- }
-
- /* Try to find pcv. */
- for (int i = 0; i < processCount; ++i) {
- if (handle != INVALID_HANDLE) {
- svcCloseHandle(handle);
- handle = INVALID_HANDLE;
- }
-
- /* Try to debug process, if it fails, try next process. */
- Result resultSvcDebugProcess = svcDebugActiveProcess(&handle, processIDList[i]);
- if (R_FAILED(resultSvcDebugProcess)) {
- continue;
- }
-
- /* Try to get a debug event. */
- Result resultDebugEvent = svcGetDebugEvent(&debugEvent, handle);
- if (R_SUCCEEDED(resultDebugEvent)) {
- if (debugEvent.info.create_process.program_id == PcvID) {
- return handle;
- }
- }
- }
-
- /* Failed to get handle. */
- return INVALID_HANDLE;
-}
-
-void Board::CacheDvfsTable() {
- const u32 voltagePattern[] = { 600000, 12500, 1400000, };
-
- Handle handle = GetPcvHandle();
- if (handle == INVALID_HANDLE) {
- FileUtils::LogLine("[Board] Invalid handle!");
- return;
- }
-
- MemoryInfo memoryInfo = {};
- u64 address = 0;
- u32 pageInfo = 0;
- constexpr u32 PageSize = 0x1000;
- u8 buffer[PageSize];
-
- /* Loop until failure. */
- while (true) {
- /* Find pcv heap. */
- while (true) {
- Result resultProcessMemory = svcQueryDebugProcessMemory(&memoryInfo, &pageInfo, handle, address);
- address = memoryInfo.addr + memoryInfo.size;
-
- if (R_FAILED(resultProcessMemory) || !address) {
- svcCloseHandle(handle);
- FileUtils::LogLine("[Board] Failed to get process data. %u", R_DESCRIPTION(resultProcessMemory));
- handle = INVALID_HANDLE;
- return;
- }
-
- if (memoryInfo.size && (memoryInfo.perm & 3) == 3 && static_cast(memoryInfo.type) == 0x04) {
- /* Found valid memory. */
- break;
- }
- }
-
- for (u64 base = 0; base < memoryInfo.size; base += PageSize) {
- u32 memorySize = std::min(memoryInfo.size, static_cast(PageSize));
- if (R_FAILED(svcReadDebugProcessMemory(buffer, handle, base + memoryInfo.addr, memorySize))) {
- break;
- }
-
- u8 *resultPattern = static_cast(memmem_impl(buffer, sizeof(buffer), voltagePattern, sizeof(voltagePattern)));
- u32 index = resultPattern - buffer;
-
- if (!resultPattern) {
- continue;
- }
-
- /* Assuming mariko. */
- const u32 vmax = 800;
- constexpr u32 DvfsTableOffset = 312;
- if (!std::memcmp(&buffer[index + DvfsTableOffset], &vmax, sizeof(vmax))) {
- std::memcpy(dvfsTable, &buffer[index + DvfsTableOffset], sizeof(dvfsTable));
- dvfsAddress = base + memoryInfo.addr + DvfsTableOffset + index;
- }
-
- svcCloseHandle(handle);
- handle = INVALID_HANDLE;
- return;
- }
- }
-
- svcCloseHandle(handle);
- handle = INVALID_HANDLE;
- return;
-}
-
-void Board::PcvHijackDvfs(u32 vmin) {
- u32 table[192];
- static_assert(sizeof(table) == sizeof(dvfsTable));
- std::memcpy(table, dvfsTable, sizeof(dvfsTable));
-
- if (ramVmin == vmin) {
- return;
- }
-
- for (u32 i = 0; i < std::size(table); ++i) {
- if (table[i] && table[i] <= vmin) {
- table[i] = vmin;
- }
- }
-
- Handle handle = GetPcvHandle();
- if (handle == INVALID_HANDLE) {
- FileUtils::LogLine("Invalid handle!");
- return;
- }
-
- Result rc = svcWriteDebugProcessMemory(handle, table, dvfsAddress, sizeof(table));
-
- if (R_SUCCEEDED(rc)) {
- ramVmin = vmin;
- }
-
- svcCloseHandle(handle);
- FileUtils::LogLine("[dvfs] voltage set to %u mV", vmin);
-}
-
-bool Board::IsDram8GB() {
- SecmonArgs args = {};
- args.X[0] = 0xF0000002;
- args.X[1] = MC_REGISTER_BASE + MC_EMEM_CFG_0;
- svcCallSecureMonitor(&args);
-
- if(args.X[1] == (MC_REGISTER_BASE + MC_EMEM_CFG_0)) { // if param 1 is identical read failed
- writeNotification("Horizon OC\nSecmon read failed!\n This may be a hardware issue!");
- return false;
- } else
- return args.X[1] == 0x00002000 ? true : false;
-}
-
-void Board::SetGpuSchedulingMode(GpuSchedulingMode mode, GpuSchedulingOverrideMethod method) {
- if (nvCheck_sched == 1 && method == GpuSchedulingOverrideMethod_NvService) {
- return;
- }
- u32 temp;
- bool enabled = false;
- switch(mode) {
- case GpuSchedulingMode_DoNotOverride: break;
- case GpuSchedulingMode_Disabled:
- if(method == GpuSchedulingOverrideMethod_NvService)
- nvIoctl(fd2, NVSCHED_CTRL_DISABLE, &temp);
- else
- enabled = false;
- break;
- case GpuSchedulingMode_Enabled:
- if(method == GpuSchedulingOverrideMethod_NvService)
- nvIoctl(fd2, NVSCHED_CTRL_ENABLE, &temp);
- else
- enabled = true;
- break;
- default:
- ASSERT_ENUM_VALID(GpuSchedulingMode, mode);
- }
- if(method == GpuSchedulingOverrideMethod_Ini) {
- const char* ini_path = "sdmc:/atmosphere/config/system_settings.ini";
- const char* section = "am.gpu";
- const char* key = "gpu_scheduling_enabled";
-
- const char* value = enabled ? "u8!0x1" : "u8!0x0";
-
- ini_puts(section, key, value, ini_path);
- }
-}
-void Board::SetDisplayRefreshDockedState(bool docked) {
- if(Board::GetConsoleType() != HorizonOCConsoleType_Hoag) {
- DisplayRefresh_SetDockedState(docked);
- }
-}
-
-
-typedef struct EristaCpuUvEntry {
- u32 tune0;
- u32 tune1;
-} EristaCpuUvEntry;
-typedef struct MarikoCpuUvEntry {
- u32 tune0_low;
- u32 tune0_high;
- u32 tune1_low;
- u32 tune1_high;
-} MarikoCpuUvEntry;
-
-EristaCpuUvEntry eristaCpuUvTable[5] = {
- {0xffff, 0x27007ff},
- {0xefff, 0x27407ff},
- {0xdfff, 0x27807ff},
- {0xdfdf, 0x27a07ff},
- {0xcfdf, 0x37007ff},
-};
-
-MarikoCpuUvEntry marikoCpuUvLow[12] = {
- {0xffa0, 0xffff, 0x21107ff, 0},
- {0x0, 0xffdf, 0x21107ff, 0x27207ff},
- {0xffdf, 0xffdf, 0x21107ff, 0x27307ff},
- {0xffff, 0xffdf, 0x21107ff, 0x27407ff},
- {0x0, 0xffdf, 0x21607ff, 0x27707ff},
- {0x0, 0xffdf, 0x21607ff, 0x27807ff},
- {0x0, 0xdfff, 0x21607ff, 0x27b07ff},
- {0xdfff, 0xdfff, 0x21707ff, 0x27b07ff},
- {0xdfff, 0xdfff, 0x21707ff, 0x27c07ff},
- {0xdfff, 0xdfff, 0x21707ff, 0x27d07ff},
- {0xdfff, 0xdfff, 0x21707ff, 0x27e07ff},
- {0xdfff, 0xdfff, 0x21707ff, 0x27f07ff},
-};
-
-MarikoCpuUvEntry marikoCpuUvHigh[12] = {
- {0x0, 0xffff, 0, 0},
- {0x0, 0xffdf, 0, 0x27207ff},
- {0x0, 0xffdf, 0, 0x27307ff},
- {0x0, 0xffdf, 0, 0x27407ff},
- {0x0, 0xffdf, 0, 0x27707ff},
- {0x0, 0xffdf, 0, 0x27807ff},
- {0x0, 0xdfff, 0, 0x27b07ff},
- {0x0, 0xdfff, 0, 0x27c07ff},
- {0x0, 0xdfff, 0, 0x27d07ff},
- {0x0, 0xdfff, 0, 0x27e07ff},
- {0x0, 0xdfff, 0, 0x27f07ff},
- {0x0, 0xdfff, 0, 0x27f07ff},
-};
-void Board::SetCpuUvLevel(u32 levelLow, u32 levelHigh, u32 tbreakPoint) {
- u32* tune0_ptr = (u32*)(cldvfs + CL_DVFS_TUNE0_0);
- u32* tune1_ptr = (u32*)(cldvfs + CL_DVFS_TUNE1_0);
- if(Board::GetSocType() == SysClkSocType_Mariko) {
- if(Board::GetHz(SysClkModule_CPU) < tbreakPoint && (levelLow || levelHigh)) {
- if(levelLow) {
- *tune0_ptr = marikoCpuUvLow[levelLow-1].tune0_low;
- *tune1_ptr = marikoCpuUvLow[levelLow-1].tune1_low;
- }
- return;
- } else {
- if(levelLow) {
- *tune0_ptr = marikoCpuUvLow[levelLow-1].tune0_low;
- *tune1_ptr = marikoCpuUvLow[levelLow-1].tune1_low;
- }
- if(levelHigh) {
- *tune0_ptr = marikoCpuUvHigh[levelHigh-1].tune0_high;
- *tune1_ptr = marikoCpuUvHigh[levelHigh-1].tune1_high;
- }
- return;
- }
- if(Board::GetHz(SysClkModule_CPU) < tbreakPoint || (!levelLow)) { // account for tbreak
- *tune0_ptr = 0xCFFF;
- *tune1_ptr = 0xFF072201;
- return;
- } else if (Board::GetHz(SysClkModule_CPU) >= tbreakPoint || (!levelHigh)) {
- *tune0_ptr = cachedMarikoUvHighTune0; // per console?
- *tune1_ptr = 0xFFF7FF3F;
- return;
- }
- } else {
- if(Board::GetHz(SysClkModule_CPU) < tbreakPoint || (!levelLow)) { // account for tbreak
- *tune0_ptr = cachedEristaUvLowTune0; // I think each erista has a different tune0/tune1?
- *tune1_ptr = cachedEristaUvLowTune1;
- return;
- } else {
- if(levelLow) {
- *tune0_ptr = eristaCpuUvTable[levelLow-1].tune0;
- *tune1_ptr = eristaCpuUvTable[levelLow-1].tune1;
- } else {
- *tune0_ptr = 0x0;
- *tune1_ptr = 0x0;
- }
- }
- }
-}
-/*
-enum TableConfig: u32 {
- DEFAULT_TABLE = 1,
- TBREAK_1581 = 2,
- TBREAK_1683 = 3,
- EXTREME_TABLE = 4,
-};
-*/
-u32 Board::CalculateTbreak(u32 table) {
- if(Board::GetSocType() == SysClkSocType_Erista)
- return 1581000000;
- else {
- switch(table) {
- case 1 ... 2:
- case 4:
- return 1581000000;
- case 3:
- return 1683000000;
- default:
- return 1581000000;
- }
- }
-
-}
-
-bool Board::IsHoag() {
- return Board::GetConsoleType() == HorizonOCConsoleType_Hoag;
-}
\ No newline at end of file
diff --git a/Source/rewrite-hoc-clk/sysmodule/src/old_board.h b/Source/rewrite-hoc-clk/sysmodule/src/old_board.h
deleted file mode 100644
index 2a32c87b..00000000
--- a/Source/rewrite-hoc-clk/sysmodule/src/old_board.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors
- *
- * 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 .
- *
- */
-
-/* --------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * , ,
- * wrote this file. As long as you retain this notice you can do whatever you
- * want with this stuff. If you meet any of us some day, and you think this
- * stuff is worth it, you can buy us a beer in return. - The sys-clk authors
- * --------------------------------------------------------------------------
- */
-
-
-#pragma once
-#include
-#include
-#include
-
-class Board
-{
- public:
- static void PcvHijackDvfs(u32 vmin);
- static u32 GetMinimumGpuVoltage(u32 freqMhz);
- static void fuseReadSpeedos();
- static u16 getSpeedo(HorizonOCSpeedo speedoType);
- static u16 getIDDQ(HorizonOCSpeedo speedoType);
- static const char* GetProfileName(SysClkProfile profile, bool pretty);
- static const char* GetModuleName(SysClkModule module, bool pretty);
- static const char* GetThermalSensorName(SysClkThermalSensor sensor, bool pretty);
- static const char* GetPowerSensorName(SysClkPowerSensor sensor, bool pretty);
- static void Initialize();
- static void Exit();
- static void ResetToStock();
- static void ResetToStockCpu();
- static void ResetToStockMem();
- static void ResetToStockGpu();
- static void ResetToStockDisplay();
- static u8 GetHighestDockedDisplayRate();
- static SysClkProfile GetProfile();
- static void SetHz(SysClkModule module, std::uint32_t hz);
- static std::uint32_t GetHz(SysClkModule module);
- static std::uint32_t GetRealHz(SysClkModule module);
- static void GetFreqList(SysClkModule module, std::uint32_t* outList, std::uint32_t maxCount, std::uint32_t* outCount);
- static std::uint32_t GetTemperatureMilli(SysClkThermalSensor sensor);
- static std::int32_t GetPowerMw(SysClkPowerSensor sensor);
- static std::uint32_t GetPartLoad(SysClkPartLoad load);
- static SysClkSocType GetSocType();
- static HorizonOCConsoleType GetConsoleType();
- static std::uint32_t GetVoltage(HocClkVoltage voltage);
- static u8 GetFanRotationLevel();
- static u8 GetDramID();
- static bool IsDram8GB();
- static void SetGpuSchedulingMode(GpuSchedulingMode mode, GpuSchedulingOverrideMethod method);
- static void SetDisplayRefreshDockedState(bool docked);
- static void SetCpuUvLevel(u32 levelLow, u32 levelHigh, u32 tbreakPoint);
- static u32 CalculateTbreak(u32 table);
- static bool IsHoag();
- protected:
- static void FetchHardwareInfos();
- static PcvModule GetPcvModule(SysClkModule sysclkModule);
- static PcvModuleId GetPcvModuleId(SysClkModule sysclkModule);
- private:
- static void SetSpeedoBracket();
- static void CacheDvfsTable();
- static Handle GetPcvHandle();
-};