sysclk: add SOCTHERM to UI

This commit is contained in:
souldbminersmwc
2026-04-01 16:39:11 -04:00
parent 064ecc6d25
commit 8bffe2dfc1
10 changed files with 74 additions and 41 deletions

View File

@@ -583,7 +583,7 @@ void Misc(void*) {
realCPU_mV = sysclkCTX.voltages[HocClkVoltage_CPU]; realCPU_mV = sysclkCTX.voltages[HocClkVoltage_CPU];
realGPU_mV = sysclkCTX.voltages[HocClkVoltage_GPU]; realGPU_mV = sysclkCTX.voltages[HocClkVoltage_GPU];
realVDD2_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDD2]; realVDD2_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDD2];
realVDDQ_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDDQ_MarikoOnly]; realVDDQ_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDDQ];
realSOC_mV = sysclkCTX.voltages[HocClkVoltage_SOC]; realSOC_mV = sysclkCTX.voltages[HocClkVoltage_SOC];
} }

View File

@@ -54,7 +54,7 @@ typedef enum {
HocClkVoltage_EMCVDD2, HocClkVoltage_EMCVDD2,
HocClkVoltage_CPU, HocClkVoltage_CPU,
HocClkVoltage_GPU, HocClkVoltage_GPU,
HocClkVoltage_EMCVDDQ_MarikoOnly, HocClkVoltage_EMCVDDQ,
HocClkVoltage_Display, HocClkVoltage_Display,
HocClkVoltage_Battery, HocClkVoltage_Battery,
HocClkVoltage_EnumMax, HocClkVoltage_EnumMax,
@@ -153,9 +153,8 @@ typedef enum {
ComponentGovernor_EnumMax, ComponentGovernor_EnumMax,
} ComponentGovernorState; } ComponentGovernorState;
typedef enum { typedef enum {
RamDisplayMode_VDD2VDDQ = 0, RamDisplayMode_VDD2 = 0,
RamDisplayMode_VDD2Usage, RamDisplayMode_VDDQ,
RamDisplayMode_VDDQUsage,
RamDisplayMode_EnumMax, RamDisplayMode_EnumMax,
} RamDisplayMode; } RamDisplayMode;
@@ -268,7 +267,7 @@ static inline const char* hocClkFormatVoltage(HocClkVoltage voltage, bool pretty
return pretty ? "GPU" : "gpu"; return pretty ? "GPU" : "gpu";
case HocClkVoltage_EMCVDD2: case HocClkVoltage_EMCVDD2:
return pretty ? "VDD2" : "emcvdd2"; return pretty ? "VDD2" : "emcvdd2";
case HocClkVoltage_EMCVDDQ_MarikoOnly: case HocClkVoltage_EMCVDDQ:
return pretty ? "VDDQ" : "vddq"; return pretty ? "VDDQ" : "vddq";
case HocClkVoltage_SOC: case HocClkVoltage_SOC:
return pretty ? "SOC" : "soc"; return pretty ? "SOC" : "soc";

View File

@@ -64,7 +64,7 @@ typedef enum {
HorizonOCConfigValue_GPUScheduling, HorizonOCConfigValue_GPUScheduling,
HorizonOCConfigValue_GPUSchedulingMethod, HorizonOCConfigValue_GPUSchedulingMethod,
HorizonOCConfigValue_RAMVoltUsageDisplayMode, HorizonOCConfigValue_RAMVoltDisplayMode,
HorizonOCConfigValue_CpuGovernorMinimumFreq, HorizonOCConfigValue_CpuGovernorMinimumFreq,
KipConfigValue_custRev, KipConfigValue_custRev,
@@ -248,7 +248,7 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr
case HorizonOCConfigValue_EnableExperimentalSettings: case HorizonOCConfigValue_EnableExperimentalSettings:
return pretty ? "Enable Experimental Settings" : "enable_experimental_settings"; return pretty ? "Enable Experimental Settings" : "enable_experimental_settings";
case HorizonOCConfigValue_RAMVoltUsageDisplayMode: case HorizonOCConfigValue_RAMVoltDisplayMode:
return pretty ? "RAM Voltage / Usage Display Mode" : "ram_volt_usage_display_mode"; return pretty ? "RAM Voltage / Usage Display Mode" : "ram_volt_usage_display_mode";
case HorizonOCConfigValue_CpuGovernorMinimumFreq: case HorizonOCConfigValue_CpuGovernorMinimumFreq:
return pretty ? "CPU Governor Minimum Frequency" : "cpu_gov_min_freq"; return pretty ? "CPU Governor Minimum Frequency" : "cpu_gov_min_freq";
@@ -583,7 +583,7 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
case HorizonOCConfigValue_DVFSMode: case HorizonOCConfigValue_DVFSMode:
case HorizonOCConfigValue_DVFSOffset: case HorizonOCConfigValue_DVFSOffset:
case HorizonOCConfigValue_GPUScheduling: case HorizonOCConfigValue_GPUScheduling:
case HorizonOCConfigValue_RAMVoltUsageDisplayMode: case HorizonOCConfigValue_RAMVoltDisplayMode:
case HorizonOCConfigValue_CpuGovernorMinimumFreq: case HorizonOCConfigValue_CpuGovernorMinimumFreq:
return true; return true;
case HorizonOCConfigValue_BatteryChargeCurrent: case HorizonOCConfigValue_BatteryChargeCurrent:

View File

@@ -39,7 +39,7 @@ include ${TOPDIR}/lib/libultrahand/ultrahand.mk
# version control constants # version control constants
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
#TARGET_VERSION := $(shell git describe --dirty --always --tags) #TARGET_VERSION := $(shell git describe --dirty --always --tags)
APP_VERSION := 1.1.0 APP_VERSION := 1.2.0
TARGET_VERSION := $(APP_VERSION) TARGET_VERSION := $(APP_VERSION)
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------

View File

@@ -29,6 +29,8 @@ tsl::elm::ListItem* sysdockStatusItem = NULL;
tsl::elm::ListItem* saltyNXStatusItem = NULL; tsl::elm::ListItem* saltyNXStatusItem = NULL;
tsl::elm::ListItem* RETROStatusItem = NULL; tsl::elm::ListItem* RETROStatusItem = NULL;
tsl::elm::ListItem* waferCordsItem = NULL; tsl::elm::ListItem* waferCordsItem = NULL;
tsl::elm::ListItem* ramVoltItem = NULL;
tsl::elm::ListItem* eristaPLLXItem = NULL;
ImageElement* CatImage = NULL; ImageElement* CatImage = NULL;
HideableCategoryHeader* CatHeader = NULL; HideableCategoryHeader* CatHeader = NULL;
@@ -50,6 +52,16 @@ void AboutGui::listUI()
new tsl::elm::CategoryHeader("Information") new tsl::elm::CategoryHeader("Information")
); );
ramVoltItem =
new tsl::elm::ListItem("RAM Voltage:");
this->listElement->addItem(ramVoltItem);
eristaPLLXItem =
new tsl::elm::ListItem("PLLX Temp:");
if(IsErista()) {
this->listElement->addItem(eristaPLLXItem);
}
SpeedoItem = SpeedoItem =
new tsl::elm::ListItem("Speedo:"); new tsl::elm::ListItem("Speedo:");
this->listElement->addItem(SpeedoItem); this->listElement->addItem(SpeedoItem);
@@ -306,4 +318,14 @@ void AboutGui::refresh()
sprintf(strings[2], "X: %u Y: %u", this->context->waferX, this->context->waferY); sprintf(strings[2], "X: %u Y: %u", this->context->waferX, this->context->waferY);
waferCordsItem->setValue(strings[2]); waferCordsItem->setValue(strings[2]);
if(IsErista()) {
u32 millis = context->temps[HorizonOCThermalSensor_PLLX];
sprintf(strings[3], "%u.%u", millis / 1000U, (millis % 1000U) / 100U);
eristaPLLXItem->setValue(strings[3]);
}
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]);
} }

View File

@@ -92,38 +92,42 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) {
y += 38; // Direct assignment instead of += 38 y += 38; // Direct assignment instead of += 38
// === MAIN DATA SECTION === // === MAIN DATA SECTION ===
// renderer->drawRoundedRect(14, 106, 420, 156, 10.0f, renderer->aWithOpacity(tsl::tableBGColor)); renderer->drawRoundedRect(14, 106, 420, 156, 10.0f, renderer->aWithOpacity(tsl::tableBGColor));
renderer->drawRoundedRect(14, 106, 420, 136, 12.0f, renderer->aWithOpacity(tsl::tableBGColor));
// === FREQUENCY SECTION === // === FREQUENCY SECTION ===
// Labels first (better cache locality) // Labels first (better cache locality)
renderer->drawString(labels[2], false, positions[2], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); renderer->drawString(labels[2], false, positions[2], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
renderer->drawString(labels[3], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); renderer->drawString(labels[3], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
renderer->drawString(labels[4], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); renderer->drawString(labels[4], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
// Current frequencies - use pre-formatted strings
renderer->drawString(displayStrings[2], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU
renderer->drawString(displayStrings[3], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU
renderer->drawString(displayStrings[4], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // MEM
y += 20; // Direct assignment (129 + 20)
renderer->drawString(displayStrings[5], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU real renderer->drawString(displayStrings[5], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU real
renderer->drawString(displayStrings[6], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU real renderer->drawString(displayStrings[6], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU real
renderer->drawString(displayStrings[7], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // MEM real renderer->drawString(displayStrings[7], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // MEM real
// Current frequencies - use pre-formatted strings renderer->drawString(displayStrings[28], false, positions[2], y, SMALL_TEXT_SIZE, tempColors[HorizonOCThermalSensor_CPU]); // CPU Real Temp
// renderer->drawString(displayStrings[2], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU renderer->drawString(displayStrings[29], false, positions[3], y, SMALL_TEXT_SIZE, tempColors[HorizonOCThermalSensor_GPU]); // GPU Real Temp
// renderer->drawString(displayStrings[3], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU renderer->drawString(displayStrings[30], false, positions[4], y, SMALL_TEXT_SIZE, tempColors[HorizonOCThermalSensor_MEM]); // RAM Real Temp
// renderer->drawString(displayStrings[4], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // MEM
y += 20; // Direct assignment (129 + 20)
renderer->drawString(displayStrings[19], false, positions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU Usage
renderer->drawString(displayStrings[17], false, positions[3], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU Usage
if(configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDD2Usage || configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDDQUsage)
renderer->drawString(displayStrings[18], false, positions[4], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RAM Usage
// === REAL FREQUENCIES === // === REAL FREQUENCIES ===
// y += 20; // Direct assignment (149 + 20) y += 20; // Direct assignment (149 + 20)
// === VOLTAGES === // === VOLTAGES ===
renderer->drawString(displayStrings[8], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU voltage 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], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU voltage
renderer->drawStringWithColoredSections(displayStrings[10], false, {""}, configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDD2VDDQ ? dataPositions[5]-16 : dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor, tsl::separatorColor); renderer->drawStringWithColoredSections(displayStrings[10], false, {""}, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor, tsl::separatorColor);
renderer->drawString(displayStrings[19], false, positions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU Usage
renderer->drawString(displayStrings[17], false, positions[3], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU Usage
renderer->drawString(displayStrings[18], false, positions[4], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RAM Usage
y += 22; // Direct assignment (169 + 22) y += 22; // Direct assignment (169 + 22)
@@ -242,15 +246,12 @@ void BaseMenuGui::refresh()
sprintf(displayStrings[8], "%.1f mV", context->voltages[HocClkVoltage_CPU] / 1000.0); sprintf(displayStrings[8], "%.1f mV", context->voltages[HocClkVoltage_CPU] / 1000.0);
sprintf(displayStrings[9], "%.1f mV", context->voltages[HocClkVoltage_GPU] / 1000.0); sprintf(displayStrings[9], "%.1f mV", context->voltages[HocClkVoltage_GPU] / 1000.0);
switch(configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode]) { switch(configList.values[HorizonOCConfigValue_RAMVoltDisplayMode]) {
case RamDisplayMode_VDD2VDDQ: case RamDisplayMode_VDD2:
sprintf(displayStrings[10], "%u.%u%u mV", context->voltages[HocClkVoltage_EMCVDD2] / 1000U, (context->voltages[HocClkVoltage_EMCVDD2] % 1000U) / 100U, context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] / 1000U);
break;
case RamDisplayMode_VDD2Usage:
sprintf(displayStrings[10], "%u.%u mV", context->voltages[HocClkVoltage_EMCVDD2] / 1000U, (context->voltages[HocClkVoltage_EMCVDD2] % 1000U) / 100U); sprintf(displayStrings[10], "%u.%u mV", context->voltages[HocClkVoltage_EMCVDD2] / 1000U, (context->voltages[HocClkVoltage_EMCVDD2] % 1000U) / 100U);
break; break;
case RamDisplayMode_VDDQUsage: case RamDisplayMode_VDDQ:
sprintf(displayStrings[10], "%u.%u mV", context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] / 1000U, (context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] % 1000U) / 100U); sprintf(displayStrings[10], "%u.%u mV", context->voltages[HocClkVoltage_EMCVDDQ] / 1000U, (context->voltages[HocClkVoltage_EMCVDDQ] % 1000U) / 100U);
break; break;
default: default:
strcpy(displayStrings[10], "N/A"); strcpy(displayStrings[10], "N/A");
@@ -309,13 +310,25 @@ void BaseMenuGui::refresh()
sprintf(displayStrings[27], "%up", context->resolutionHeight); sprintf(displayStrings[27], "%up", context->resolutionHeight);
} }
} }
millis = context->temps[HorizonOCThermalSensor_CPU];
sprintf(displayStrings[28], "%u.%u", millis / 1000U, (millis % 1000U) / 100U);
tempColors[HorizonOCThermalSensor_CPU] = tsl::GradientColor(millis * 0.001f);
millis = context->temps[HorizonOCThermalSensor_GPU];
sprintf(displayStrings[29], "%u.%u", millis / 1000U, (millis % 1000U) / 100U);
tempColors[HorizonOCThermalSensor_GPU] = tsl::GradientColor(millis * 0.001f);
millis = context->temps[HorizonOCThermalSensor_MEM];
sprintf(displayStrings[30], "%u.%u", millis / 1000U, (millis % 1000U) / 100U);
tempColors[HorizonOCThermalSensor_MEM] = tsl::GradientColor(millis * 0.001f);
} }
tsl::elm::Element* BaseMenuGui::baseUI() tsl::elm::Element* BaseMenuGui::baseUI()
{ {
auto* list = new tsl::elm::List(); auto* list = new tsl::elm::List();
list->addItem(new tsl::elm::CustomDrawer([](tsl::gfx::Renderer*, s32, s32, s32, s32) {}), 10); // add a bit of space list->addItem(new tsl::elm::CustomDrawer([](tsl::gfx::Renderer*, s32, s32, s32, s32) {}), 35); // add a bit of space
this->listElement = list; this->listElement = list;
this->listUI(); this->listUI();

View File

@@ -86,6 +86,6 @@ class BaseMenuGui : public BaseGui
virtual void listUI() = 0; virtual void listUI() = 0;
private: private:
char displayStrings[32][32]; // Pre-formatted display strings char displayStrings[48][32]; // Pre-formatted display strings
tsl::Color tempColors[7]; // Pre-computed temperature colors tsl::Color tempColors[SysClkThermalSensor_EnumMax]; // Pre-computed temperature colors
}; };

View File

@@ -563,12 +563,11 @@ protected:
this->listElement->addItem(new tsl::elm::CategoryHeader("General Settings")); this->listElement->addItem(new tsl::elm::CategoryHeader("General Settings"));
ValueThresholds thresholdsDisabled(0, 0); ValueThresholds thresholdsDisabled(0, 0);
std::vector<NamedValue> ramVoltDispModes = { std::vector<NamedValue> ramVoltDispModes = {
NamedValue("VDD2 + VDDQ", RamDisplayMode_VDD2VDDQ), NamedValue("VDD2", RamDisplayMode_VDD2),
NamedValue("VDD2 + Usage", RamDisplayMode_VDD2Usage), NamedValue("VDDQ", RamDisplayMode_VDDQ),
NamedValue("VDDQ + Usage", RamDisplayMode_VDDQUsage),
}; };
addConfigButton(HorizonOCConfigValue_RAMVoltUsageDisplayMode, "RAM Voltage Display Mode", ValueRange(0, 12, 1, "", 0), "RAM Voltage Display Mode", &thresholdsDisabled, {}, ramVoltDispModes, false); addConfigButton(HorizonOCConfigValue_RAMVoltDisplayMode, "RAM Voltage Display Mode", ValueRange(0, 12, 1, "", 0), "RAM Voltage Display Mode", &thresholdsDisabled, {}, ramVoltDispModes, false);
addConfigButton( addConfigButton(
SysClkConfigValue_PollingIntervalMs, SysClkConfigValue_PollingIntervalMs,

View File

@@ -77,7 +77,7 @@ namespace board {
break; break;
} }
case HorizonOCThermalSensor_MEM: { case HorizonOCThermalSensor_MEM: {
millis = temps.mem; millis = board::GetSocType() == SysClkSocType_Mariko ? temps.pllx : temps.mem;
break; break;
} }
case HorizonOCThermalSensor_PLLX: { case HorizonOCThermalSensor_PLLX: {

View File

@@ -260,7 +260,7 @@ namespace board {
rgltrGetVoltage(&session, &out); rgltrGetVoltage(&session, &out);
rgltrCloseSession(&session); rgltrCloseSession(&session);
break; break;
case HocClkVoltage_EMCVDDQ_MarikoOnly: case HocClkVoltage_EMCVDDQ:
if (GetSocType() == SysClkSocType_Mariko) { if (GetSocType() == SysClkSocType_Mariko) {
rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77812_Dram); rc = rgltrOpenSession(&session, PcvPowerDomainId_Max77812_Dram);
ASSERT_RESULT_OK(rc, "rgltrOpenSession") ASSERT_RESULT_OK(rc, "rgltrOpenSession")