- IPC service for handling ReverseNX-RT communication, reducing I/O requests

- Set config for "Auto CPU Boost"/"Sync ReverseNX Mode" in overlay

- Apply hardened freq cap to handheld mode (CPU@1963MHz, GPU@921MHz)
This commit is contained in:
KazushiM
2022-02-11 01:37:47 +08:00
parent 94ac52e80b
commit 4ff20f15f1
21 changed files with 266 additions and 324 deletions

View File

@@ -30,6 +30,7 @@ Result sysclkIpcGetProfiles(u64 tid, SysClkTitleProfileList* out_profiles);
Result sysclkIpcSetProfiles(u64 tid, SysClkTitleProfileList* profiles);
Result sysclkIpcGetConfigValues(SysClkConfigValueList* out_configValues);
Result sysclkIpcSetConfigValues(SysClkConfigValueList* configValues);
Result sysclkIpcSetReverseNXRTMode(ReverseNXMode mode);
static inline Result sysclkIpcRemoveOverride(SysClkModule module)
{

View File

@@ -57,6 +57,7 @@ typedef enum
ReverseNX_SystemDefault = 0,
ReverseNX_NotFound = 0,
ReverseNX_NotValid = 0,
ReverseNX_GotValue = 0,
ReverseNX_Handheld,
ReverseNX_Docked,
ReverseNX_RTResetToDefault,
@@ -65,11 +66,7 @@ typedef enum
typedef struct
{
bool systemCoreBoostCPU;
bool systemCoreCheckStuck;
ReverseNXMode reverseNXMode;
uint64_t tickWaitTimeMs;
ReverseNXMode reverseNXMode;
uint32_t maxMEMFreq;
} SysClkOcExtra;
@@ -81,7 +78,9 @@ typedef struct
};
} SysClkTitleProfileList;
#define SYSCLK_GPU_HANDHELD_MAX_HZ 1267200000
#define SYSCLK_CPU_HANDHELD_MAX_HZ 1963500000
#define SYSCLK_GPU_HANDHELD_MAX_HZ 921600000
#define SYSCLK_GPU_CHARGING_USB_MAX_HZ 1267200000
extern uint32_t sysclk_g_freq_table_mem_hz[];
extern uint32_t sysclk_g_freq_table_cpu_hz[];

View File

@@ -17,6 +17,8 @@ typedef enum {
SysClkConfigValue_PollingIntervalMs = 0,
SysClkConfigValue_TempLogIntervalMs,
SysClkConfigValue_CsvWriteIntervalMs,
SysClkConfigValue_AutoCPUBoost,
SysClkConfigValue_SyncReverseNXMode,
SysClkConfigValue_EnumMax,
} SysClkConfigValue;
@@ -34,6 +36,10 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr
return pretty ? "Temperature logging interval (ms)" : "temp_log_interval_ms";
case SysClkConfigValue_CsvWriteIntervalMs:
return pretty ? "CSV write interval (ms)" : "csv_write_interval_ms";
case SysClkConfigValue_AutoCPUBoost:
return pretty ? "Enable Auto CPU Boost" : "auto_cpu_boost";
case SysClkConfigValue_SyncReverseNXMode:
return pretty ? "Enable ReverseNX Mode Sync" : "sync_reversenx_mode";
default:
return NULL;
}
@@ -44,10 +50,13 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
switch(val)
{
case SysClkConfigValue_PollingIntervalMs:
return 300ULL;
return 500ULL;
case SysClkConfigValue_TempLogIntervalMs:
case SysClkConfigValue_CsvWriteIntervalMs:
return 0ULL;
case SysClkConfigValue_AutoCPUBoost:
case SysClkConfigValue_SyncReverseNXMode:
return 1ULL;
default:
return 0ULL;
}
@@ -62,6 +71,9 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
case SysClkConfigValue_TempLogIntervalMs:
case SysClkConfigValue_CsvWriteIntervalMs:
return true;
case SysClkConfigValue_AutoCPUBoost:
case SysClkConfigValue_SyncReverseNXMode:
return (input & 0x1) == input;
default:
return false;
}

View File

@@ -13,8 +13,8 @@
#include <stdint.h>
#include "clocks.h"
#define SYSCLK_IPC_API_VERSION 0
#define SYSCLK_IPC_SERVICE_NAME "sys:clk"
#define SYSCLK_IPC_API_VERSION 1
#define SYSCLK_IPC_SERVICE_NAME "sysclkOC"
enum SysClkIpcCmd
{
@@ -29,6 +29,7 @@ enum SysClkIpcCmd
SysClkIpcCmd_SetOverride = 8,
SysClkIpcCmd_GetConfigValues = 9,
SysClkIpcCmd_SetConfigValues = 10,
SysClkIpcCmd_SetReverseNXRTMode = 11,
};