Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24eb3b1208 | ||
|
|
9a6282af9c | ||
|
|
5de030c4e9 | ||
|
|
dc63dfdca2 | ||
|
|
803a838b35 | ||
|
|
5b284db5ae | ||
|
|
861ee85289 | ||
|
|
521e3c22dd | ||
|
|
78798a1cce | ||
|
|
44d417fb89 | ||
|
|
8faaaa58d9 | ||
|
|
df0969ba6f | ||
|
|
646f8b8d69 | ||
|
|
456684152a | ||
|
|
a606a878ee |
@@ -114,7 +114,7 @@ Refer to COMPILATION.md
|
||||
* 816
|
||||
* 714
|
||||
* 612 → sleep mode
|
||||
|
||||
|
||||
### GPU clocks
|
||||
* 1536 → absolute max clock on mariko. very dangerous
|
||||
* 1459
|
||||
@@ -158,7 +158,7 @@ Refer to COMPILATION.md
|
||||
* **CTCaer** - L4T, Hekate, proper RAM timings
|
||||
* **KazushiMe** - Switch OC Suite
|
||||
* **Hanai3bi (Meha)** - Switch OC Suite, EOS, sys-clk-eos
|
||||
* **NaGaa95** - L4T-OC kernel, Status Monitor fork
|
||||
* **NaGaa95** - L4T-OC kernel, Status Monitor fork
|
||||
* **B3711 (halop)** - EOS
|
||||
* **sys-clk team (m4xw, p-sam, natinusala)** - sys-clk
|
||||
* **Dominatorul** - Soctherm driver, guides, general help
|
||||
@@ -166,5 +166,7 @@ Refer to COMPILATION.md
|
||||
* **MasaGratoR and ZachyCatGames** - General help
|
||||
* **MasaGratoR** - Status Monitor & Display Refresh Rate driver
|
||||
* **Dominatorul, Samybigio, Arcdelta, Miki, Happy, Flopsider, Winnerboi77, Blaise, Alvise, TDRR, agjeococh, frost, letum00, and Xenshen** - Testing
|
||||
* **Samybigio2011** - Italian translations
|
||||
* **Samybigio2011, Miki** - Italian translations
|
||||
* **angelblaster** - Korean translations
|
||||
* **q1332348216-glitch** - Chinese translations
|
||||
* **Nvidia** - [Tegra X1 Technical Reference Manual](https://developer.nvidia.com/embedded/dlc/tegra-x1-technical-reference-manual), soctherm driver, L4T
|
||||
|
||||
@@ -86,17 +86,17 @@ volatile CustomizeTable C = {
|
||||
/* 1120mV is NVIDIA rating */
|
||||
.marikoCpuMaxVolt = 1120,
|
||||
|
||||
/* Supported values: 1963000, 2091000, 2193000, 2295000, 2397000, 2499000, 2601000, 2703000. */
|
||||
/* 1963000 is official rating of T214/Mariko, fully safe. */
|
||||
/* Supported values: 1963500, 2091000, 2193000, 2295000, 2397000, 2499000, 2601000, 2703000. */
|
||||
/* 1963500 is official rating of T214/Mariko, fully safe. */
|
||||
/* 2091000-2295000 is a slight OC which should work on all units, but no guarantees. */
|
||||
/* 2397000 is the max safe OC for most average units with tuned undervolt. */
|
||||
/* 2499000 should be used with caution. */
|
||||
/* 2601000 exceeds pmic limit on most consoles. */
|
||||
/* 2703000 is potentially dangerous and not advised. */
|
||||
.marikoCpuMaxClock = 1963000,
|
||||
.marikoCpuMaxClock = 1963500,
|
||||
|
||||
.eristaCpuBoostClock = 1785000, // Default boost clock
|
||||
.marikoCpuBoostClock = 1963000, // Default boost clock
|
||||
.marikoCpuBoostClock = 1963500, // Default boost clock
|
||||
|
||||
.eristaGpuUV = 0,
|
||||
.eristaGpuVmin = 810,
|
||||
@@ -220,7 +220,7 @@ volatile CustomizeTable C = {
|
||||
{ 1683000, { 1168000, }, { 5100873, -279186, 4747, } },
|
||||
{ 1785000, { 1225000, }, { 5100873, -279186, 4747, } },
|
||||
{ 1887000, { 1225000, }, { 5100873, -279186, 4747, } },
|
||||
{ 1963500, { 1227500, }, { 5100873, -279186, 4747, } },
|
||||
{ 1989000, { 1227500, }, { 5100873, -279186, 4747, } },
|
||||
{ 2091000, { 1227500, }, { 5100873, -279186, 4747, } },
|
||||
{ 2193000, { 1227500, }, { 5100873, -279186, 4747, } },
|
||||
{ 2295000, { 1256250, }, { 5100873, -279186, 4747, } },
|
||||
|
||||
@@ -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'500, 2'091'000, 2'193'000, 2'295'000, 2'397'000, 2'499'000, 2'601'000, 2'703'000, };
|
||||
|
||||
constexpr cvb_entry_t GpuCvbTableDefault[] = {
|
||||
// GPUB01_NA_CVB_TABLE
|
||||
|
||||
@@ -1718,8 +1718,8 @@ ALWAYS_INLINE void GetConfigSettings(MicroSettings* settings) {
|
||||
settings->useDTCSymbol = true;
|
||||
settings->dtcFormat = "%H:%M:%S";//"%Y-%m-%d %I:%M:%S %p";
|
||||
settings->invertBatteryDisplay = false;
|
||||
settings->handheldFontSize = 15;
|
||||
settings->dockedFontSize = 15;
|
||||
settings->handheldFontSize = 14;
|
||||
settings->dockedFontSize = 14;
|
||||
settings->alignTo = 1; // CENTER
|
||||
convertStrToRGBA4444("#0009", &(settings->backgroundColor));
|
||||
convertStrToRGBA4444("#888F", &(settings->separatorColor));
|
||||
|
||||
@@ -39,6 +39,10 @@ private:
|
||||
std::atomic<bool> touchPollRunning{false};
|
||||
public:
|
||||
MiniOverlay() {
|
||||
CPU_temp_c[0] = '\0';
|
||||
GPU_temp_c[0] = '\0';
|
||||
RAM_temp_c[0] = '\0';
|
||||
|
||||
tsl::hlp::requestForeground(false);
|
||||
disableJumpTo = true;
|
||||
//tsl::initializeUltrahandSettings();
|
||||
@@ -1070,7 +1074,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.realTemps && realCPU_Temp != 0) {
|
||||
if (settings.realTemps && realCPU_Temp != 0 && CPU_temp_c[0] != '\0') {
|
||||
char temp_buffer[48];
|
||||
snprintf(temp_buffer, sizeof(temp_buffer), " %s", CPU_temp_c);
|
||||
strncat(MINI_CPU_compressed_c, temp_buffer, sizeof(MINI_CPU_compressed_c) - strlen(MINI_CPU_compressed_c) - 1);
|
||||
@@ -1110,11 +1114,11 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.realTemps && realGPU_Temp != 0) {
|
||||
char temp_buffer[48];
|
||||
snprintf(temp_buffer, sizeof(temp_buffer), " %s", GPU_temp_c);
|
||||
strncat(MINI_GPU_Load_c, temp_buffer, sizeof(MINI_GPU_Load_c) - strlen(MINI_GPU_Load_c) - 1);
|
||||
}
|
||||
if (settings.realTemps && realGPU_Temp != 0 && GPU_temp_c[0] != '\0') {
|
||||
char temp_buffer[48];
|
||||
snprintf(temp_buffer, sizeof(temp_buffer), " %s", GPU_temp_c);
|
||||
strncat(MINI_GPU_Load_c, temp_buffer, sizeof(MINI_GPU_Load_c) - strlen(MINI_GPU_Load_c) - 1);
|
||||
}
|
||||
|
||||
// Only process RAM if needed
|
||||
if (isActive("RAM")) {
|
||||
@@ -1218,11 +1222,12 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
if (settings.realTemps && realRAM_Temp != 0) {
|
||||
char temp_buffer[48];
|
||||
snprintf(temp_buffer, sizeof(temp_buffer), " %s", RAM_temp_c);
|
||||
strncat(MINI_RAM_var_compressed_c, temp_buffer, sizeof(MINI_RAM_var_compressed_c) - strlen(MINI_RAM_var_compressed_c) - 1);
|
||||
}
|
||||
|
||||
if (settings.realTemps && realRAM_Temp != 0 && RAM_temp_c[0] != '\0') {
|
||||
char temp_buffer[48];
|
||||
snprintf(temp_buffer, sizeof(temp_buffer), " %s", RAM_temp_c);
|
||||
strncat(MINI_RAM_var_compressed_c, temp_buffer, sizeof(MINI_RAM_var_compressed_c) - strlen(MINI_RAM_var_compressed_c) - 1);
|
||||
}
|
||||
|
||||
// Only process MEM if needed
|
||||
if (isActive("MEM")) {
|
||||
|
||||
@@ -66,6 +66,7 @@ typedef enum {
|
||||
|
||||
HocClkConfigValue_RAMVoltDisplayMode,
|
||||
HocClkConfigValue_CpuGovernorMinimumFreq,
|
||||
HocClkConfigValue_DisplayVoltage,
|
||||
|
||||
KipConfigValue_custRev,
|
||||
// KipConfigValue_mtcConf,
|
||||
@@ -252,6 +253,10 @@ static inline const char* hocclkFormatConfigValue(HocClkConfigValue val, bool pr
|
||||
return pretty ? "RAM Voltage / Usage Display Mode" : "ram_volt_usage_display_mode";
|
||||
case HocClkConfigValue_CpuGovernorMinimumFreq:
|
||||
return pretty ? "CPU Governor Minimum Frequency" : "cpu_gov_min_freq";
|
||||
|
||||
case HocClkConfigValue_DisplayVoltage:
|
||||
return pretty ? "Display Voltage" : "display_voltage";
|
||||
|
||||
// KIP config values
|
||||
case KipConfigValue_custRev:
|
||||
return pretty ? "Custom Revision" : "kip_cust_rev";
|
||||
@@ -453,6 +458,8 @@ static inline uint64_t hocclkDefaultConfigValue(HocClkConfigValue val)
|
||||
return 612000000ULL; // 612MHz
|
||||
case HocClkConfigValue_MaxDisplayClockH:
|
||||
return 60ULL;
|
||||
case HocClkConfigValue_DisplayVoltage:
|
||||
return 1200ULL; // Auto
|
||||
default:
|
||||
return 0ULL;
|
||||
}
|
||||
@@ -588,6 +595,9 @@ static inline uint64_t hocclkValidConfigValue(HocClkConfigValue val, uint64_t in
|
||||
return true;
|
||||
case HocClkConfigValue_BatteryChargeCurrent:
|
||||
return ((input >= 1024) && (input <= 3072)) || !input;
|
||||
case HocClkConfigValue_DisplayVoltage:
|
||||
return ((input >= 900) && (input <= 1325));
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ const u8 MAX17050_CURRENT_REG = 0x0A;
|
||||
// Buck Converter
|
||||
typedef enum I2c_BuckConverter_Reg {
|
||||
I2c_Max77620_SD1VOLT_REG = 0x17, // Used for Erista DDR VDDQ+VDD2 / Mariko VDD2
|
||||
I2c_Max77620_LDO0VOLT_REG = 0x23, // Used for Erista DDR VDDQ+VDD2 / Mariko VDD2
|
||||
I2c_Max77621_VOLT_REG = 0x00,
|
||||
I2c_Max77812_CPUVOLT_REG = 0x26,
|
||||
I2c_Max77812_GPUVOLT_REG = 0x23,
|
||||
@@ -40,7 +41,8 @@ typedef struct I2c_BuckConverter_Domain {
|
||||
|
||||
const I2c_BuckConverter_Domain I2c_Erista_CPU = { I2cDevice_Max77621Cpu, I2c_Max77621_VOLT_REG, 0x7F, 6250, 606250, 1400000, };
|
||||
const I2c_BuckConverter_Domain I2c_Erista_GPU = { I2cDevice_Max77621Gpu, I2c_Max77621_VOLT_REG, 0x7F, 6250, 606250, 1400000, };
|
||||
const I2c_BuckConverter_Domain I2c_Erista_DRAM = { I2cDevice_Max77620Pmic, I2c_Max77620_SD1VOLT_REG, 0x7F, 12500, 600000, 1250000, };
|
||||
const I2c_BuckConverter_Domain I2c_Erista_DRAM = { I2cDevice_Max77620Pmic, I2c_Max77620_SD1VOLT_REG, 0x3F, 12500, 600000, 1250000, };
|
||||
const I2c_BuckConverter_Domain I2c_Display = { I2cDevice_Max77620Pmic, I2c_Max77620_LDO0VOLT_REG, 0x7F, 25000, 800000, 1325000, };
|
||||
const I2c_BuckConverter_Domain I2c_Mariko_CPU = { I2cDevice_Max77812_2, I2c_Max77812_CPUVOLT_REG, 0xFF, 5000, 250000, 1525000, 0x78 };
|
||||
const I2c_BuckConverter_Domain I2c_Mariko_GPU = { I2cDevice_Max77812_2, I2c_Max77812_GPUVOLT_REG, 0xFF, 5000, 250000, 1525000, 0x78 };
|
||||
const I2c_BuckConverter_Domain I2c_Mariko_DRAM_VDDQ = { I2cDevice_Max77812_2, I2c_Max77812_MEMVOLT_REG, 0xFF, 5000, 250000, 700000, 0x78 };
|
||||
|
||||
@@ -39,7 +39,7 @@ include ${TOPDIR}/lib/libultrahand/ultrahand.mk
|
||||
# version control constants
|
||||
#---------------------------------------------------------------------------------
|
||||
#TARGET_VERSION := $(shell git describe --dirty --always --tags)
|
||||
APP_VERSION := 1.2.0
|
||||
APP_VERSION := 1.2.1
|
||||
TARGET_VERSION := $(APP_VERSION)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
@@ -2,140 +2,140 @@
|
||||
"Information": "Informazioni",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Modulo:",
|
||||
"sys-dock status:": "stato del dock di sistema:",
|
||||
"sys-dock status:": "stato di sys-dock",
|
||||
"SaltyNX status:": "Stato di SaltyNX:",
|
||||
"RR Display status:": "Stato di visualizzazione RR:",
|
||||
"Wafer Position:": "Posizione del wafer:",
|
||||
"RR Display status:": "Stato del RR:",
|
||||
"Wafer Position:": "Posizione nel Wafer:",
|
||||
"Credits": "Crediti",
|
||||
"Developers": "Sviluppatori",
|
||||
"Contributors": "Collaboratori",
|
||||
"Testers": "Tester",
|
||||
"Special Thanks": "Un ringraziamento speciale",
|
||||
"Special Thanks": "Un Ringraziamento Speciale",
|
||||
"Unknown": "Sconosciuto",
|
||||
"Installed": "Installato",
|
||||
"Not Installed": "Non installato",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "LA LICENZA PER GLI ARTICOLI DI BIRRA",
|
||||
"THE BEER-WARE LICENSE": "THE BEER-WARE LICENSE",
|
||||
"Default": "Predefinito",
|
||||
"Do Not Override": "Non sovrascrivere",
|
||||
"Do Not Override": "Non Sovrascrivere",
|
||||
"Disabled": "Disabilitato",
|
||||
"Enabled": "Abilitato",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Ripristina",
|
||||
"Display": "Visualizzazione",
|
||||
"Display": "Schermo",
|
||||
"Application changed\\n\\n": "Applicazione modificata\\n\\n",
|
||||
"The running application changed\\n\\n": "L'applicazione in esecuzione è cambiata\\n\\n",
|
||||
"while editing was going on.": "mentre era in corso la modifica.",
|
||||
"Board": "Consiglio",
|
||||
"Board": "Scheda",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Impossibile connettersi al modulo di sistema hoc-clk.\\n\\n",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Impossibile connettersi al sysmodule hoc-clk.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Assicurati che tutto sia\\n\\n",
|
||||
"correctly installed and enabled.": "correttamente installato e abilitato.",
|
||||
"Fatal error": "Errore fatale",
|
||||
"Temporary Overrides ": "Sostituzioni temporanee",
|
||||
"Sleep Mode": "Modalità di sospensione",
|
||||
"Stock": "Magazzino",
|
||||
"Dev OC": "OC di sviluppo",
|
||||
"Boost Mode": "Modalità potenziamento",
|
||||
"Safe Max": "Sicuro massimo",
|
||||
"Unsafe Max": "Non sicuro Max",
|
||||
"Absolute Max": "Massimo assoluto",
|
||||
"Handheld Safe Max": "Cassaforte portatile max",
|
||||
"Temporary Overrides ": "Sostituzioni Temporanee",
|
||||
"Sleep Mode": "Modalità di Sospensione",
|
||||
"Stock": "Originale",
|
||||
"Dev OC": "OC dev",
|
||||
"Boost Mode": "Modalità Boost",
|
||||
"Safe Max": "Massimo Sicuro",
|
||||
"Unsafe Max": "Massimo Non Sicuro",
|
||||
"Absolute Max": "Massimo Assoluto",
|
||||
"Handheld Safe Max": "Massimo Sicuro Modalità Portatile",
|
||||
"Enable": "Abilita",
|
||||
"Edit App Profile": "Modifica profilo dell'app",
|
||||
"Edit Global Profile": "Modifica profilo globale",
|
||||
"Temporary Overrides": "Sostituzioni temporanee",
|
||||
"Edit App Profile": "Modifica Profilo Dell'App",
|
||||
"Edit Global Profile": "Modifica Profilo Globale",
|
||||
"Temporary Overrides": "Sostituzioni Temporanee",
|
||||
"Settings": "Impostazioni",
|
||||
"About": "Circa",
|
||||
"About": "A Riguardo Di",
|
||||
"Compiling with minimal features": "Compilazione con funzionalità minime",
|
||||
"General Settings": "Impostazioni generali",
|
||||
"Governor Settings": "Impostazioni del governatore",
|
||||
"Safety Settings": "Impostazioni di sicurezza",
|
||||
"Save KIP Settings": "Salva le impostazioni KIP",
|
||||
"General Settings": "Impostazioni Generali",
|
||||
"Governor Settings": "Impostazioni Del Governor",
|
||||
"Safety Settings": "Impostazioni Di Sicurezza",
|
||||
"Save KIP Settings": "Salva le impostazioni del KIP",
|
||||
"RAM Settings": "Impostazioni della RAM",
|
||||
"CPU Settings": "Impostazioni della CPU",
|
||||
"GPU Settings": "Impostazioni della GPU",
|
||||
"Display Settings": "Impostazioni di visualizzazione",
|
||||
"Display Settings": "Impostazioni dello Schermo",
|
||||
"Experimental": "Sperimentale",
|
||||
"GPU Scheduling Override Method": "Metodo di override della pianificazione GPU",
|
||||
"GPU Scheduling Override Method": "Metodo di override dello scheduling GPU",
|
||||
"can be dangerous and may cause": "può essere pericoloso e può causare",
|
||||
"damage to your battery or charger!": "danni alla batteria o al caricabatterie!",
|
||||
"Charge Current Override": "Override della corrente di carica",
|
||||
"RAM Voltage Display Mode": "Modalità di visualizzazione della tensione RAM",
|
||||
"Charge Current Override": "Override della Corrente di Carica",
|
||||
"RAM Voltage Display Mode": "Modalità di Visualizzazione della Tensione RAM",
|
||||
"Polling Interval": "Intervallo di polling",
|
||||
"CPU Governor Minimum Frequency": "Frequenza minima del governatore della CPU",
|
||||
"CPU Governor Minimum Frequency": "Frequenza minima del Governor della CPU",
|
||||
"refresh rates may cause stress": "le frequenze di aggiornamento possono causare stress",
|
||||
"or damage to your display! ": "o danni al display!",
|
||||
"Proceed at your own risk!": "Procedi a tuo rischio e pericolo!",
|
||||
"Max Handheld Display": "Display portatile massimo",
|
||||
"Display Clock": "Visualizza orologio",
|
||||
"Official Rating": "Valutazione ufficiale",
|
||||
"Max Handheld Display": "Display Massimo in Modalità Portatile",
|
||||
"Display Clock": "Frequenza del Display",
|
||||
"Official Rating": "Rating Ufficiale",
|
||||
"TDP Threshold": "Soglia TDP",
|
||||
"Power": "Potenza",
|
||||
"Thermal Throttle Limit": "Limite della valvola termica",
|
||||
"Thermal Throttle Limit": "Limite Termico",
|
||||
"HP Mode": "Modalità HP",
|
||||
"Default (Mariko)": "Predefinito (Mariko)",
|
||||
"Default (Erista)": "Predefinito (Erista)",
|
||||
"Rating": "Valutazione",
|
||||
"Safe Max (Mariko)": "Safe Max (Mariko)",
|
||||
"Safe Max (Erista)": "Safe Max (Erista)",
|
||||
"Safe Max (Mariko)": "Massimo Sicuro (Mariko)",
|
||||
"Safe Max (Erista)": "Massimo Sicuro (Erista)",
|
||||
"RAM VDD2 Voltage": "Tensione RAM VDD2",
|
||||
"Voltage": "Voltaggio",
|
||||
"RAM VDDQ Voltage": "Voltaggio VDDQ della RAM",
|
||||
"RAM Frequency Editor": "Editor della frequenza RAM",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "È necessaria l'alta velocità!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (richiede Speedo/PLL estremo)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (richiede Speedo/PLL estremo)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (richiede Speedo/PLL estremo)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (è necessario un ridicolo Speedo/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (è necessario un ridicolo Speedo/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (è necessario un ridicolo Speedo/PLL)",
|
||||
"Ram Max Clock": "Orologio Ram Max",
|
||||
"RAM Latency Editor": "Editor della latenza RAM",
|
||||
"RAM Timing Reductions": "Riduzioni della temporizzazione della RAM",
|
||||
"Memory Timings": "Tempi di memoria",
|
||||
"High speedo needed!": "Alto Valore Speedo Necessario!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (richiede Speedo/PLL altissimo)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (richiede Speedo/PLL altissimo)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (richiede Speedo/PLL altissimo)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (richiede Speedo/PLL estremo)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (richiede Speedo/PLL estremo)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (richiede Speedo/PLL estremo)",
|
||||
"Ram Max Clock": "Frequenza Massima Ram",
|
||||
"RAM Latency Editor": "Editor della Latenza RAM",
|
||||
"RAM Timing Reductions": "Riduzioni dei Timing della RAM",
|
||||
"Memory Timings": "Timing di Memoria",
|
||||
"Advanced": "Avanzato",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Sintonia fine",
|
||||
"tRTW Fine Tune": "tRTW Sintonia fine",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Sintonia fine",
|
||||
"tWTR Fine Tune": "tWTR Sintonia fine",
|
||||
"Memory Latencies": "Latenza della memoria",
|
||||
"Read Latency": "Leggi latenza",
|
||||
"Write Latency": "Scrivi latenza",
|
||||
"CPU Boost Clock": "Orologio di potenziamento della CPU",
|
||||
"CPU UV": "UV della CPU",
|
||||
"t6 tRTW Fine Tune": "Regolazione Fine t6 tRTW",
|
||||
"tRTW Fine Tune": "Regolazione Fine tRTW",
|
||||
"t7 tWTR Fine Tune": "Regolazione Fine t7 tWTR",
|
||||
"tWTR Fine Tune": "Regolazione Fine tWTR",
|
||||
"Memory Latencies": "Latenza della Memoria",
|
||||
"Read Latency": "Latenza di Lettura",
|
||||
"Write Latency": "Latenza di Scrittura",
|
||||
"CPU Boost Clock": "Frequenza CPU in Boost",
|
||||
"CPU UV": "Undervolt CPU",
|
||||
"CPU Unlock": "Sblocco della CPU",
|
||||
"CPU VMIN": "CPUVMIN",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "Voltaggio massimo della CPU",
|
||||
"CPU Max Clock": "Orologio massimo della CPU",
|
||||
"Extreme UV Table": "Tavolo UV estremo",
|
||||
"CPU Max Clock": "Frequenza massima della CPU",
|
||||
"Extreme UV Table": "Tabella UV estremo",
|
||||
"CPU UV Table": "Tabella UV della CPU",
|
||||
"CPU Low UV": "CPU con raggi UV bassi",
|
||||
"CPU High UV": "UV elevato della CPU",
|
||||
"CPU Low VMIN": "VMIN CPU basso",
|
||||
"CPU High VMIN": "CPU alta VMIN",
|
||||
"No Undervolt": "Nessuna sottotensione",
|
||||
"CPU Low UV": "CPU UV Bassa Frequenza",
|
||||
"CPU High UV": "CPU UV Alta Frequenza",
|
||||
"CPU Low VMIN": "CPU VMIN Bassa Frequenza",
|
||||
"CPU High VMIN": "CPU VMIN Alta Frequenza",
|
||||
"No Undervolt": "Nessun Undervolt",
|
||||
"SLT Table": "Tabella SLT",
|
||||
"HiOPT Table": "Tabella HiOPT",
|
||||
"GPU Undervolt Table": "Tabella di sottotensione GPU",
|
||||
"GPU Minimum Voltage": "Voltaggio minimo della GPU",
|
||||
"GPU Undervolt Table": "Tabella di Undervolt GPU",
|
||||
"GPU Minimum Voltage": "Voltaggio Minimo della GPU",
|
||||
"Calculate GPU Vmin": "Calcola GPU Vmin",
|
||||
"GPU VMIN": "GPUVMIN",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "Voltaggio massimo della GPU",
|
||||
"GPU Voltage Offset": "Offset di tensione della GPU",
|
||||
"GPU Voltage Offset": "Offset di Voltaggio della GPU",
|
||||
"Do not override": "Non sovrascrivere",
|
||||
"Enabled (Default)": "Abilitato (impostazione predefinita)",
|
||||
"96.6% limit": "Limite del 96,6%.",
|
||||
"99.7% limit": "Limite del 99,7%.",
|
||||
"GPU Scheduling Override": "Override della pianificazione GPU",
|
||||
"GPU Scheduling Override": "Override dello Scheduling GPU",
|
||||
"Official Service": "Servizio ufficiale",
|
||||
"GPU DVFS Mode": "Modalità DVFS GPU",
|
||||
"GPU DVFS Offset": "Offset DVFS della GPU",
|
||||
"GPU Voltage Table": "Tabella delle tensioni della GPU",
|
||||
"GPU Custom Table (mV)": "Tabella personalizzata GPU (mV)",
|
||||
"GPU Voltage Table": "Tabella delle Tensioni della GPU",
|
||||
"GPU Custom Table (mV)": "Tabella GPU Personalizzata (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075 MHz senza UV, 1152 MHz su SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "o 1228 MHz su HiOPT possono causare",
|
||||
"permanent damage to your Switch!": "danni permanenti al tuo Switch!",
|
||||
"921MHz without UV and 960MHz on": "921 MHz senza UV e 960 MHz attivi",
|
||||
"permanent damage to your Switch!": "danni permanenti alla tua Switch!",
|
||||
"921MHz without UV and 960MHz on": "921 MHz senza UV e 960 MHz su",
|
||||
"SLT or HiOPT can cause ": "SLT o HiOPT possono causare"
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ tsl::elm::ListItem* RETROStatusItem = NULL;
|
||||
tsl::elm::ListItem* waferCordsItem = NULL;
|
||||
tsl::elm::ListItem* ramVoltItem = NULL;
|
||||
tsl::elm::ListItem* eristaPLLXItem = NULL;
|
||||
tsl::elm::ListItem* dispVoltItem = NULL;
|
||||
|
||||
ImageElement* CatImage = NULL;
|
||||
HideableCategoryHeader* CatHeader = NULL;
|
||||
@@ -56,6 +57,10 @@ void AboutGui::listUI()
|
||||
new tsl::elm::ListItem("RAM Voltage:");
|
||||
this->listElement->addItem(ramVoltItem);
|
||||
|
||||
dispVoltItem =
|
||||
new tsl::elm::ListItem("Display Voltage:");
|
||||
this->listElement->addItem(dispVoltItem);
|
||||
|
||||
eristaPLLXItem =
|
||||
new tsl::elm::ListItem("PLLX Temp:");
|
||||
if(IsErista()) {
|
||||
@@ -327,5 +332,8 @@ void AboutGui::refresh()
|
||||
|
||||
sprintf(strings[4], "%u.%u / %u mV", context->voltages[HocClkVoltage_EMCVDD2] / 1000U, (context->voltages[HocClkVoltage_EMCVDD2] % 1000U) / 100U, context->voltages[HocClkVoltage_EMCVDDQ] / 1000);
|
||||
ramVoltItem->setValue(strings[4]);
|
||||
|
||||
sprintf(strings[5], "%u.%u mV", context->voltages[HocClkVoltage_Display] / 1000U, (context->voltages[HocClkVoltage_Display] % 1000U) / 100U);
|
||||
dispVoltItem->setValue(strings[5]);
|
||||
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) {
|
||||
|
||||
// === VOLTAGES ===
|
||||
renderer->drawString(displayStrings[8], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU voltage
|
||||
renderer->drawString(displayStrings[9], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU voltage
|
||||
renderer->drawString(displayStrings[9], false, dataPositions[1] + 9, y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU voltage
|
||||
|
||||
renderer->drawStringWithColoredSections(displayStrings[10], false, {""}, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor, tsl::separatorColor);
|
||||
|
||||
@@ -134,17 +134,17 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) {
|
||||
// === TEMPERATURE SECTION ===
|
||||
// Labels
|
||||
renderer->drawString(labels[5], false, positions[5], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(labels[6], false, positions[6]-1, y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(labels[6], false, positions[6], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(labels[7], false, positions[7], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
|
||||
// Temperatures with color - use pre-computed colors
|
||||
renderer->drawString(displayStrings[11], false, dataPositions[0], y, SMALL_TEXT_SIZE, tempColors[HocClkThermalSensor_SOC]); // SOC
|
||||
renderer->drawString(displayStrings[12], false, dataPositions[1], y, SMALL_TEXT_SIZE, tempColors[HocClkThermalSensor_PCB]); // PCB
|
||||
renderer->drawString(displayStrings[13], false, dataPositions[2], y, SMALL_TEXT_SIZE, tempColors[HocClkThermalSensor_Skin]); // Skin
|
||||
renderer->drawString(displayStrings[11], false, dataPositions[0] - 1, y, SMALL_TEXT_SIZE, tempColors[HocClkThermalSensor_SOC]); // SOC
|
||||
renderer->drawString(displayStrings[12], false, dataPositions[1] + 5, y, SMALL_TEXT_SIZE, tempColors[HocClkThermalSensor_PCB]); // PCB
|
||||
renderer->drawString(displayStrings[13], false, dataPositions[2] + 6, y, SMALL_TEXT_SIZE, tempColors[HocClkThermalSensor_Skin]); // Skin
|
||||
|
||||
y += 20; // Direct assignment (191 + 20)
|
||||
|
||||
renderer->drawString(displayStrings[14], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor);
|
||||
renderer->drawString(displayStrings[14], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // SOC voltage
|
||||
|
||||
// Power labels and values
|
||||
renderer->drawString(labels[8], false, positions[8]-1, y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
@@ -159,13 +159,13 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) {
|
||||
|
||||
renderer->drawString(displayStrings[20], false, dataPositions[0], y, SMALL_TEXT_SIZE, tempColors[HocClkThermalSensor_Battery]); // Battery
|
||||
|
||||
renderer->drawString(labels[13], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // disp label
|
||||
|
||||
renderer->drawString(displayStrings[25], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // disp freq
|
||||
|
||||
renderer->drawString(labels[12], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // fan label
|
||||
|
||||
renderer->drawString(displayStrings[24], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // fan speed
|
||||
renderer->drawString(displayStrings[24], false, dataPositions[1] + 5, y, SMALL_TEXT_SIZE, tsl::infoTextColor); // fan speed
|
||||
|
||||
renderer->drawString(labels[13], false, positions[4] + 4, y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // disp label
|
||||
|
||||
renderer->drawString(displayStrings[25], false, dataPositions[2] + 6, y, SMALL_TEXT_SIZE, tsl::infoTextColor); // disp freq
|
||||
|
||||
y+=20;
|
||||
|
||||
@@ -174,11 +174,11 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) {
|
||||
|
||||
if(this->context->isSaltyNXInstalled) {
|
||||
|
||||
renderer->drawString(labels[15], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // RES label
|
||||
renderer->drawString(displayStrings[27], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RES
|
||||
renderer->drawString(labels[15], false, positions[3] + 7, y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // RES label
|
||||
renderer->drawString(displayStrings[27], false, dataPositions[1] + 5, y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RES
|
||||
|
||||
renderer->drawString(labels[14], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // FPS label
|
||||
renderer->drawString(displayStrings[26], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // FPS
|
||||
renderer->drawString(labels[14], false, positions[4] + 9, y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // FPS label
|
||||
renderer->drawString(displayStrings[26], false, dataPositions[2] + 6, y, SMALL_TEXT_SIZE, tsl::infoTextColor); // FPS
|
||||
|
||||
}
|
||||
|
||||
@@ -201,7 +201,6 @@ void BaseMenuGui::refresh()
|
||||
this->context = new HocClkContext;
|
||||
}
|
||||
|
||||
// === HOCCLK CONTEXT UPDATE ===
|
||||
Result rc = hocclkIpcGetCurrentContext(this->context);
|
||||
if (R_FAILED(rc)) [[unlikely]] {
|
||||
FatalGui::openWithResultCode("hocclkIpcGetCurrentContext", rc);
|
||||
|
||||
@@ -621,6 +621,8 @@ public:
|
||||
|
||||
protected:
|
||||
void listUI() override {
|
||||
ValueThresholds thresholdsDisabled(0, 0);
|
||||
|
||||
BaseMenuGui::refresh(); // get latest context
|
||||
if(!this->context)
|
||||
return;
|
||||
@@ -649,6 +651,16 @@ protected:
|
||||
false
|
||||
);
|
||||
}
|
||||
addConfigButton(
|
||||
HocClkConfigValue_DisplayVoltage,
|
||||
"Display Voltage",
|
||||
ValueRange(900, 1200, 25, " mV", 1),
|
||||
"Display Voltage",
|
||||
&thresholdsDisabled,
|
||||
{},
|
||||
{},
|
||||
false
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1053,7 +1065,7 @@ protected:
|
||||
std::vector<NamedValue> maxClkOptions = {
|
||||
NamedValue("1785 MHz", 1785),
|
||||
NamedValue("1887 MHz", 1887),
|
||||
NamedValue("1963 MHz", 1963),
|
||||
NamedValue("1989 MHz", 1989),
|
||||
NamedValue("2091 MHz", 2091),
|
||||
NamedValue("2193 MHz", 2193),
|
||||
NamedValue("2295 MHz", 2295),
|
||||
@@ -1111,9 +1123,7 @@ protected:
|
||||
);
|
||||
|
||||
std::vector<NamedValue> maxClkOptions = {
|
||||
NamedValue("1785 MHz", 1785000),
|
||||
NamedValue("1887 MHz", 1887000),
|
||||
NamedValue("1963 MHz", 1963000),
|
||||
NamedValue("1963 MHz", 1963500),
|
||||
NamedValue("2091 MHz", 2091000),
|
||||
NamedValue("2193 MHz", 2193000),
|
||||
NamedValue("2295 MHz", 2295000),
|
||||
@@ -1349,7 +1359,7 @@ protected:
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
std::vector<NamedValue> gpuOffset = {
|
||||
NamedValue("-50 mV", 50),
|
||||
NamedValue("-45 mV", 45),
|
||||
|
||||
@@ -41,7 +41,7 @@ DEFINES := -DDISABLE_IPC -DTARGET="\"$(TARGET)\"" -DTARGET_VERSION="\"$(TARGET_V
|
||||
ARCH := -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE
|
||||
|
||||
CFLAGS := -g -Wall -Os -ffunction-sections \
|
||||
$(ARCH) $(DEFINES)
|
||||
$(ARCH) $(DEFINES) -ffast-math
|
||||
|
||||
CFLAGS += $(INCLUDE) -D__SWITCH__
|
||||
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
"title_id": "0x00FF0000636C6BFF",
|
||||
"title_id_range_min": "0x00FF0000636C6BFF",
|
||||
"title_id_range_max": "0x00FF0000636C6BFF",
|
||||
"main_thread_stack_size": "0x0000C000",
|
||||
"main_thread_stack_size": "0x0000D000",
|
||||
"main_thread_priority": 16,
|
||||
"default_cpu_id": 3,
|
||||
"process_category": 1,
|
||||
"is_retail": true,
|
||||
"pool_partition": 2,
|
||||
"is_64_bit": true,
|
||||
"optimize_memory_allocation": true,
|
||||
"address_space_type": 3,
|
||||
"filesystem_access": {
|
||||
"permissions": "0xFFFFFFFFFFFFFFFF"
|
||||
|
||||
@@ -145,13 +145,13 @@ namespace board {
|
||||
|
||||
StartMiscThread(pwmCheck, &iCon);
|
||||
|
||||
u64 clkVirtAddr, dsiVirtAddr, outsize;
|
||||
u64 clkVirtAddr, dsiVirtAddr;
|
||||
|
||||
rc = svcQueryMemoryMapping(&clkVirtAddr, &outsize, 0x60006000, 0x1000);
|
||||
ASSERT_RESULT_OK(rc, "svcQueryMemoryMapping (clk)");
|
||||
rc = QueryMemoryMapping(&clkVirtAddr, 0x60006000, 0x1000);
|
||||
ASSERT_RESULT_OK(rc, "QueryMemoryMapping (clk)");
|
||||
|
||||
rc = svcQueryMemoryMapping(&dsiVirtAddr, &outsize, 0x54300000, 0x40000);
|
||||
ASSERT_RESULT_OK(rc, "svcQueryMemoryMapping (dsi)");
|
||||
rc = QueryMemoryMapping(&dsiVirtAddr, 0x54300000, 0x40000);
|
||||
ASSERT_RESULT_OK(rc, "QueryMemoryMapping (dsi)");
|
||||
|
||||
display::DisplayRefreshConfig cfg = {.clkVirtAddr = clkVirtAddr, .dsiVirtAddr = dsiVirtAddr, .isLite = (GetConsoleType() == HocClkConsoleType_Hoag), .isRetroSUPER = integrations::GetRETROSuperStatus()};
|
||||
display::Initialize(&cfg);
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#include "board_sensor.hpp"
|
||||
#include "board_volt.hpp"
|
||||
#include "board_profile.hpp"
|
||||
|
||||
#include "../mem_map.hpp"
|
||||
#define HOSSVC_HAS_CLKRST (hosversionAtLeast(8,0,0))
|
||||
#define HOSSVC_HAS_TC (hosversionAtLeast(5,0,0))
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
namespace board {
|
||||
|
||||
void SetGpuBracket(u8 speedo, u8 &gpuBracket) {
|
||||
void SetGpuBracket(u16 speedo, u8 &gpuBracket) {
|
||||
if (speedo <= 1624) {
|
||||
gpuBracket = 0;
|
||||
return;
|
||||
|
||||
@@ -35,6 +35,6 @@ namespace board {
|
||||
};
|
||||
|
||||
void ReadFuses(FuseData &speedo);
|
||||
void SetGpuBracket(u8 gpuSpeedo, u8 &gpuBracket);
|
||||
void SetGpuBracket(u16 gpuSpeedo, u8 &gpuBracket);
|
||||
|
||||
}
|
||||
|
||||
@@ -87,9 +87,8 @@ namespace board {
|
||||
}
|
||||
|
||||
void CacheDfllData() {
|
||||
u64 temp;
|
||||
Result rc = svcQueryMemoryMapping(&cldvfs, &temp, CLDVFS_REGION_BASE, CLDVFS_REGION_SIZE);
|
||||
ASSERT_RESULT_OK(rc, "svcQueryMemoryMapping (cldvfs)");
|
||||
Result rc = QueryMemoryMapping(&cldvfs, CLDVFS_REGION_BASE, CLDVFS_REGION_SIZE);
|
||||
ASSERT_RESULT_OK(rc, "QueryMemoryMapping (cldvfs)");
|
||||
|
||||
if (GetSocType() == HocClkSocType_Erista) {
|
||||
cachedTune.tune0Low = *reinterpret_cast<u32 *>(cldvfs + CL_DVFS_TUNE0_0);
|
||||
|
||||
@@ -217,8 +217,13 @@ namespace clockManager {
|
||||
|
||||
void HandleMiscFeatures()
|
||||
{
|
||||
if (config::GetConfigValue(HocClkConfigValue_BatteryChargeCurrent)) {
|
||||
I2c_Bq24193_SetFastChargeCurrentLimit(config::GetConfigValue(HocClkConfigValue_BatteryChargeCurrent));
|
||||
static u32 tick = 0;
|
||||
if(++tick > 10) {
|
||||
if (config::GetConfigValue(HocClkConfigValue_BatteryChargeCurrent)) {
|
||||
I2c_Bq24193_SetFastChargeCurrentLimit(config::GetConfigValue(HocClkConfigValue_BatteryChargeCurrent));
|
||||
}
|
||||
tick = 0;
|
||||
I2c_BuckConverter_SetMvOut(&I2c_Display, config::GetConfigValue(HocClkConfigValue_DisplayVoltage));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -560,12 +565,12 @@ namespace clockManager {
|
||||
|
||||
board::FuseData *fuse = board::GetFuseData();
|
||||
|
||||
gContext.speedos[0] = fuse->cpuSpeedo;
|
||||
gContext.speedos[1] = fuse->gpuSpeedo;
|
||||
gContext.speedos[2] = fuse->socSpeedo;
|
||||
gContext.iddq[0] = fuse->cpuIDDQ;
|
||||
gContext.iddq[1] = fuse->gpuIDDQ;
|
||||
gContext.iddq[2] = fuse->socIDDQ;
|
||||
gContext.speedos[HocClkSpeedo_CPU] = fuse->cpuSpeedo;
|
||||
gContext.speedos[HocClkSpeedo_GPU] = fuse->gpuSpeedo;
|
||||
gContext.speedos[HocClkSpeedo_SOC] = fuse->socSpeedo;
|
||||
gContext.iddq[HocClkSpeedo_CPU] = fuse->cpuIDDQ;
|
||||
gContext.iddq[HocClkSpeedo_GPU] = fuse->gpuIDDQ;
|
||||
gContext.iddq[HocClkSpeedo_SOC] = fuse->socIDDQ;
|
||||
gContext.waferX = fuse->waferX;
|
||||
gContext.waferY = fuse->waferY;
|
||||
|
||||
@@ -625,9 +630,9 @@ namespace clockManager {
|
||||
bool isBoost = apmExtIsBoostMode(mode);
|
||||
|
||||
HandleSafetyFeatures();
|
||||
HandleMiscFeatures();
|
||||
|
||||
if (RefreshContext() || config::Refresh()) {
|
||||
HandleMiscFeatures();
|
||||
SetClocks(isBoost);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,28 +30,12 @@
|
||||
#include <cstring>
|
||||
|
||||
namespace errors {
|
||||
|
||||
namespace {
|
||||
|
||||
const char* FormatMessage(const char* format, va_list args) {
|
||||
size_t len = vsnprintf(NULL, 0, format, args) * sizeof(char);
|
||||
char* buf = (char*)malloc(len + 1);
|
||||
if (buf == NULL) {
|
||||
return format;
|
||||
}
|
||||
vsnprintf(buf, len + 1, format, args);
|
||||
return buf;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ThrowException(const char* format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
const char* msg = FormatMessage(format, args);
|
||||
va_end(args);
|
||||
fileUtils::LogLine(format, args);
|
||||
throw std::runtime_error(msg);
|
||||
va_end(args);
|
||||
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen));
|
||||
// throw std::runtime_error(msg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -84,9 +84,8 @@ namespace fileUtils {
|
||||
if (file) {
|
||||
struct timespec now;
|
||||
clock_gettime(CLOCK_REALTIME, &now);
|
||||
struct tm* nowTm = localtime(&now.tv_sec);
|
||||
|
||||
fprintf(file, "[%04d-%02d-%02d %02d:%02d:%02d.%03ld] ", nowTm->tm_year+1900, nowTm->tm_mon+1, nowTm->tm_mday, nowTm->tm_hour, nowTm->tm_min, nowTm->tm_sec, now.tv_nsec / 1000000UL);
|
||||
fprintf(file, "[%lu] ", armGetSystemTick());
|
||||
vfprintf(file, format, args);
|
||||
fprintf(file, "\n");
|
||||
fclose(file);
|
||||
|
||||
@@ -38,7 +38,5 @@ namespace governor {
|
||||
void startThreads();
|
||||
void exitThreads();
|
||||
void HandleGovernor(uint32_t targetHz);
|
||||
void CpuGovernorThread(void* arg);
|
||||
void GovernorThread(void* arg);
|
||||
void VRRThread(void* arg);
|
||||
}
|
||||
@@ -37,8 +37,8 @@
|
||||
#include "clock_manager.hpp"
|
||||
#include "ipc_service.hpp"
|
||||
#include "config.hpp"
|
||||
#define INNER_HEAP_SIZE 0x45000
|
||||
|
||||
#define INNER_HEAP_SIZE 0x45000
|
||||
|
||||
extern "C"
|
||||
{
|
||||
@@ -54,6 +54,23 @@ extern "C"
|
||||
char nx_inner_heap[INNER_HEAP_SIZE];
|
||||
NvServiceType __nx_nv_service_type = NvServiceType_Factory;
|
||||
|
||||
// Ty to MasaGratoR for this!
|
||||
//This is done to save some space as they have no practical use in our case
|
||||
void* __real___cxa_throw(void *thrown_exception, void *pvar, void (*dest)(void *));
|
||||
void* __real__Unwind_Resume();
|
||||
void* __real___gxx_personality_v0();
|
||||
|
||||
void __wrap___cxa_throw(void *thrown_exception, void *pvar, void (*dest)(void *)) {
|
||||
abort();
|
||||
}
|
||||
|
||||
void __wrap__Unwind_Resume() {
|
||||
return;
|
||||
}
|
||||
|
||||
void __wrap___gxx_personality_v0() {
|
||||
return;
|
||||
}
|
||||
|
||||
void __libnx_initheap(void)
|
||||
{
|
||||
@@ -94,20 +111,19 @@ extern "C"
|
||||
rc = i2cInitialize();
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen));
|
||||
rc = appletInitialize();
|
||||
if (R_FAILED(rc))
|
||||
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void __appExit(void)
|
||||
{
|
||||
// CloseFanControllerThread();
|
||||
// fanExit();
|
||||
i2cExit();
|
||||
fsExit();
|
||||
setsysExit();
|
||||
fsdevUnmountAll();
|
||||
appletExit();
|
||||
}
|
||||
fsExit();
|
||||
smExit();
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
@@ -119,48 +135,36 @@ int main(int argc, char** argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
try
|
||||
board::Initialize();
|
||||
processManagement::Initialize();
|
||||
|
||||
processManagement::WaitForQLaunch();
|
||||
|
||||
clockManager::Initialize();
|
||||
ipcService::Initialize();
|
||||
|
||||
fileUtils::LogLine("Ready");
|
||||
|
||||
clockManager::SetRunning(true);
|
||||
config::SetEnabled(true);
|
||||
ipcService::SetRunning(true);
|
||||
// TemperaturePoint *table;
|
||||
// ReadConfigFile(&table);
|
||||
// InitFanController(table);
|
||||
// StartFanControllerThread();
|
||||
|
||||
while (clockManager::Running())
|
||||
{
|
||||
board::Initialize();
|
||||
processManagement::Initialize();
|
||||
|
||||
processManagement::WaitForQLaunch();
|
||||
|
||||
clockManager::Initialize();
|
||||
ipcService::Initialize();
|
||||
|
||||
fileUtils::LogLine("Ready");
|
||||
|
||||
clockManager::SetRunning(true);
|
||||
config::SetEnabled(true);
|
||||
ipcService::SetRunning(true);
|
||||
// TemperaturePoint *table;
|
||||
// ReadConfigFile(&table);
|
||||
// InitFanController(table);
|
||||
// StartFanControllerThread();
|
||||
|
||||
while (clockManager::Running())
|
||||
{
|
||||
clockManager::Tick();
|
||||
clockManager::WaitForNextTick();
|
||||
}
|
||||
|
||||
ipcService::SetRunning(false);
|
||||
ipcService::Exit();
|
||||
clockManager::Exit();
|
||||
processManagement::Exit();
|
||||
board::Exit();
|
||||
}
|
||||
catch (const std::exception &ex)
|
||||
{
|
||||
fileUtils::LogLine("[!] %s", ex.what());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
std::exception_ptr p = std::current_exception();
|
||||
fileUtils::LogLine("[!?] %s", p ? p.__cxa_exception_type()->name() : "...");
|
||||
clockManager::Tick();
|
||||
clockManager::WaitForNextTick();
|
||||
}
|
||||
|
||||
ipcService::SetRunning(false);
|
||||
ipcService::Exit();
|
||||
clockManager::Exit();
|
||||
processManagement::Exit();
|
||||
board::Exit();
|
||||
|
||||
fileUtils::LogLine("Exit");
|
||||
svcSleepThread(1000000ULL);
|
||||
fileUtils::Exit();
|
||||
|
||||
30
Source/hoc-clk/sysmodule/src/mem_map.cpp
Normal file
30
Source/hoc-clk/sysmodule/src/mem_map.cpp
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) Souldbminer 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <switch.h>
|
||||
|
||||
Result QueryMemoryMapping(u64* virtaddr, u64 physaddr, u64 size) {
|
||||
if(hosversionAtLeast(10,0,0))
|
||||
{
|
||||
u64 out_size;
|
||||
return svcQueryMemoryMapping(virtaddr, &out_size, physaddr, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
return svcLegacyQueryIoMapping(virtaddr, physaddr, size);
|
||||
}
|
||||
}
|
||||
21
Source/hoc-clk/sysmodule/src/mem_map.hpp
Normal file
21
Source/hoc-clk/sysmodule/src/mem_map.hpp
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) Souldbminer 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <switch.h>
|
||||
|
||||
Result QueryMemoryMapping(u64* virtaddr, u64 physaddr, u64 size);
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "soctherm.hpp"
|
||||
#include "board/board.hpp"
|
||||
#include "file_utils.hpp"
|
||||
#include "mem_map.hpp"
|
||||
|
||||
namespace soctherm {
|
||||
|
||||
@@ -440,8 +441,7 @@ namespace soctherm {
|
||||
}
|
||||
|
||||
Result MapAddress(u64 &va, const u64 &physAddr, const char *name) {
|
||||
u64 outSize;
|
||||
Result mapResult = svcQueryMemoryMapping(&va, &outSize, physAddr, 0x1000);
|
||||
Result mapResult = QueryMemoryMapping(&va, physAddr, 0x1000);
|
||||
if (R_FAILED(mapResult)) {
|
||||
fileUtils::LogLine("[Soctherm] Failed to map %s! %u", name, R_DESCRIPTION(mapResult));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user