Sys-clk-OC: Fixed #41; Erista support added; Manager is deprecated
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user