Sys-clk-OC: Fixed #41; Erista support added; Manager is deprecated

This commit is contained in:
KazushiM
2022-10-29 18:32:26 +08:00
parent a6dcf1da5c
commit 26c0bff4dd
24 changed files with 335 additions and 206 deletions

View File

@@ -31,6 +31,7 @@ Result sysclkIpcSetProfiles(u64 tid, SysClkTitleProfileList* profiles);
Result sysclkIpcGetConfigValues(SysClkConfigValueList* out_configValues);
Result sysclkIpcSetConfigValues(SysClkConfigValueList* configValues);
Result sysclkIpcSetReverseNXRTMode(ReverseNXMode mode);
Result sysclkIpcGetFrequencyTable(SysClkModule module, SysClkProfile profile, size_t max_entry_num, uint32_t* out_table);
static inline Result sysclkIpcRemoveOverride(SysClkModule module)
{

View File

@@ -69,6 +69,8 @@ typedef struct
uint32_t boostCPUFreq;
} SysClkOcExtra;
uint32_t* GetTable(SysClkModule module);
typedef struct
{
union {
@@ -79,13 +81,10 @@ typedef struct
} SysClkTitleProfileList;
#define SYSCLK_GLOBAL_PROFILE_TID 0xA111111111111111
#define SYSCLK_CPU_SAFE_MAX_HZ 1963500000U
#define SYSCLK_GPU_HANDHELD_MAX_HZ 921600000U
#define SYSCLK_GPU_CHARGING_USB_MAX_HZ 1267200000U
extern uint32_t sysclk_g_freq_table_mem_hz[];
extern uint32_t sysclk_g_freq_table_cpu_hz[];
extern uint32_t sysclk_g_freq_table_gpu_hz[];
extern uint32_t g_freq_table_mem_hz[];
extern uint32_t g_freq_table_cpu_hz[];
extern uint32_t g_freq_table_gpu_hz[];
#define SYSCLK_ENUM_VALID(n, v) ((v) < n##_EnumMax)

View File

@@ -30,9 +30,9 @@ enum SysClkIpcCmd
SysClkIpcCmd_GetConfigValues = 9,
SysClkIpcCmd_SetConfigValues = 10,
SysClkIpcCmd_SetReverseNXRTMode = 11,
SysClkIpcCmd_GetFrequencyTable = 12,
};
typedef struct
{
uint64_t tid;
@@ -44,3 +44,10 @@ typedef struct
SysClkModule module;
uint32_t hz;
} SysClkIpc_SetOverride_Args;
typedef struct
{
SysClkModule module;
SysClkProfile profile;
size_t max_entry_num;
} SysClkIpc_GetFrequencyTable_Args;

View File

@@ -13,6 +13,7 @@
#include <switch.h>
#include <string.h>
#include <stdatomic.h>
#include <stdlib.h>
static Service g_sysclkSrv;
static atomic_size_t g_refCnt;
@@ -119,3 +120,29 @@ Result sysclkIpcSetReverseNXRTMode(ReverseNXMode mode)
{
return serviceDispatchIn(&g_sysclkSrv, SysClkIpcCmd_SetReverseNXRTMode, mode);
}
Result sysclkIpcGetFrequencyTable(SysClkModule module, SysClkProfile profile, size_t max_entry_num, uint32_t* out_table)
{
SysClkIpc_GetFrequencyTable_Args args = {
.module = module,
.profile = profile,
.max_entry_num = max_entry_num
};
size_t table_size = sizeof(uint32_t) * max_entry_num;
uint32_t* table = malloc(table_size);
memset(table, 0, table_size);
SfDispatchParams disp;
Result rc = serviceDispatchImpl(
&g_sysclkSrv, SysClkIpcCmd_GetFrequencyTable,
&args, sizeof(args),
table, table_size, disp);
if (R_FAILED(rc))
return rc;
memcpy(out_table, table, table_size);
free(table);
return 0;
}

View File

@@ -9,13 +9,14 @@
*/
#include <stdint.h>
#include <sysclk/clocks.h>
uint32_t sysclk_g_freq_table_mem_hz[] = {
uint32_t g_freq_table_mem_hz[] = {
// From Hekate Minerva module
// 665600000,
// 800000000,
// 1065600000,
// 1331200000,
665600000,
800000000,
1065600000,
1331200000,
1600000000,
// 1728000000,
// 1795200000,
@@ -29,7 +30,7 @@ uint32_t sysclk_g_freq_table_mem_hz[] = {
0,
};
uint32_t sysclk_g_freq_table_cpu_hz[] = {
uint32_t g_freq_table_cpu_hz[] = {
612000000,
714000000,
816000000,
@@ -51,7 +52,7 @@ uint32_t sysclk_g_freq_table_cpu_hz[] = {
0,
};
uint32_t sysclk_g_freq_table_gpu_hz[] = {
uint32_t g_freq_table_gpu_hz[] = {
76800000,
153600000,
230400000,
@@ -72,3 +73,16 @@ uint32_t sysclk_g_freq_table_gpu_hz[] = {
1305600000,
0,
};
uint32_t* GetTable(SysClkModule module) {
switch (module) {
case SysClkModule_CPU:
return &g_freq_table_cpu_hz[0];
case SysClkModule_GPU:
return &g_freq_table_gpu_hz[0];
case SysClkModule_MEM:
return &g_freq_table_mem_hz[0];
default:
return NULL;
}
}