diff --git a/Source/hoc-clk/common/include/hocclk/board.h b/Source/hoc-clk/common/include/hocclk/board.h index ca01688a..9a15caea 100644 --- a/Source/hoc-clk/common/include/hocclk/board.h +++ b/Source/hoc-clk/common/include/hocclk/board.h @@ -92,6 +92,7 @@ typedef enum HocClkThermalSensor_GPU, // GPU temperature in millicelcius HocClkThermalSensor_MEM, // MEM temperature in millicelcius. Returns the PLLX sensor value on Mariko HocClkThermalSensor_PLLX, // PLLX temperature in millicelcius + HocClkThermalSensor_AO, // AOTAG HocClkThermalSensor_BQ24193, // BQ24193 temperature. Refer to BQ24193Temp for returned values HocClkThermalSensor_EnumMax } HocClkThermalSensor; @@ -184,6 +185,7 @@ typedef enum { BQ24193Temp_EnumMax } BQ24193Temp; typedef enum AulaColorMode { + AulaDisplayColorMode_DoNotOverride = 0xFF, AulaDisplayColorMode_Saturated = 0x0, AulaDisplayColorMode_Washed = 0x45, AulaDisplayColorMode_Basic = 0x03, // Default @@ -281,6 +283,10 @@ static inline const char* hocclkFormatThermalSensor(HocClkThermalSensor thermSen return pretty ? "MEM" : "mem"; case HocClkThermalSensor_PLLX: return pretty ? "PLLX" : "pllx"; + case HocClkThermalSensor_AO: + return pretty ? "AO" : "ao"; + case HocClkThermalSensor_BQ24193: + return pretty ? "BQ24193" : "bq24193"; default: return "unknown"; } diff --git a/Source/hoc-clk/common/include/hocclk/clock_manager.h b/Source/hoc-clk/common/include/hocclk/clock_manager.h index 93dd67c9..2e41b1ad 100644 --- a/Source/hoc-clk/common/include/hocclk/clock_manager.h +++ b/Source/hoc-clk/common/include/hocclk/clock_manager.h @@ -60,7 +60,7 @@ typedef struct u16 resolutionHeight; // Reserved for future use - u8 reserved[0x424]; + u8 reserved[0x41C]; } HocClkContext; typedef struct diff --git a/Source/hoc-clk/common/include/hocclk/config.h b/Source/hoc-clk/common/include/hocclk/config.h index 220028ab..d31f8023 100644 --- a/Source/hoc-clk/common/include/hocclk/config.h +++ b/Source/hoc-clk/common/include/hocclk/config.h @@ -529,7 +529,7 @@ static inline uint64_t hocclkDefaultConfigValue(HocClkConfigValue val) case HocClkConfigValue_DisplayVoltage: return 1200ULL; // Auto case HocClkConfigValue_AulaDisplayColorPreset: - return AulaDisplayColorMode_Basic; + return AulaDisplayColorMode_DoNotOverride; default: return 0ULL; } diff --git a/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp index 926b538a..fb2a0ffb 100644 --- a/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp +++ b/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp @@ -37,6 +37,7 @@ tsl::elm::ListItem* ramBWItemCpu = NULL; tsl::elm::ListItem* ramBWItemGpu = NULL; tsl::elm::ListItem* ramBWItemMax = NULL; tsl::elm::ListItem* bqtempitem = NULL; +tsl::elm::ListItem* aotagTempItem = NULL; ImageElement* CatImage = NULL; HideableCategoryHeader* CatHeader = NULL; @@ -74,6 +75,10 @@ void AboutGui::listUI() this->listElement->addItem(eristaPLLXItem); } + aotagTempItem = + new tsl::elm::ListItem("AOTAG Temp:"); + this->listElement->addItem(aotagTempItem); + bqtempitem = new tsl::elm::ListItem("BQ24193 Temp:"); this->listElement->addItem(bqtempitem); @@ -369,6 +374,14 @@ void AboutGui::refresh() eristaPLLXItem->setValue(strings[3]); } + u32 millis = context->temps[HocClkThermalSensor_AO]; + if(millis > 0) { + sprintf(strings[11], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U); + } else { + sprintf(strings[11], "N/A"); + } + aotagTempItem->setValue(strings[11]); + 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]); diff --git a/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp index 4c02c311..f0f86ce7 100644 --- a/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp +++ b/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp @@ -589,6 +589,7 @@ protected: Result rc = hocclkIpcGetConfigValues(this->configList); if (R_FAILED(rc)) [[unlikely]] { FatalGui::openWithResultCode("hocclkIpcGetConfigValues", rc); return; } this->listElement->addItem(new tsl::elm::CategoryHeader("General Settings")); + ValueThresholds thresholdsDisabled(0, 0); std::vector ramVoltDispModes = { NamedValue("VDD2", RamDisplayMode_VDD2), @@ -743,6 +744,32 @@ protected: ); } + if(IsAula()) { + std::vector displayClrPreset = { + NamedValue("Do Not Override", AulaDisplayColorMode_DoNotOverride), + NamedValue("Basic", AulaDisplayColorMode_Basic), + NamedValue("Saturated", AulaDisplayColorMode_Saturated), + NamedValue("Washed", AulaDisplayColorMode_Washed), + NamedValue("Natural", AulaDisplayColorMode_Natural), + NamedValue("Vivid", AulaDisplayColorMode_Vivid), + NamedValue("Washed", AulaDisplayColorMode_Night0, "Night"), + NamedValue("Basic", AulaDisplayColorMode_Night1, "Night"), + NamedValue("Natural", AulaDisplayColorMode_Night2, "Night"), + NamedValue("Vivid", AulaDisplayColorMode_Night3, "Night"), + }; + + addConfigButton( + HocClkConfigValue_AulaDisplayColorPreset, + "Display Color Preset", + ValueRange(0, 1, 1, "", 0), + "Display Color Preset", + &thresholdsDisabled, + {}, + displayClrPreset, + false, + false + ); + } } }; @@ -831,32 +858,6 @@ protected: {}, false ); - } else { - std::vector displayClrPreset = { - NamedValue("Basic", AulaDisplayColorMode_Basic), - NamedValue("Saturated", AulaDisplayColorMode_Saturated), - NamedValue("Washed", AulaDisplayColorMode_Washed), - NamedValue("Natural", AulaDisplayColorMode_Natural), - NamedValue("Vivid", AulaDisplayColorMode_Vivid), - NamedValue("Washed", AulaDisplayColorMode_Night0, "Night"), - NamedValue("Basic", AulaDisplayColorMode_Night1, "Night"), - NamedValue("Natural", AulaDisplayColorMode_Night2, "Night"), - NamedValue("Vivid", AulaDisplayColorMode_Night3, "Night"), - }; - - addConfigButton( - HocClkConfigValue_AulaDisplayColorPreset, - "Display Color Preset", - ValueRange(0, 1, 1, "", 0), - "Display Color Preset", - &thresholdsDisabled, - {}, - displayClrPreset, - false, - false - ); - - } } }; diff --git a/Source/hoc-clk/sysmodule/src/aotag.cpp b/Source/hoc-clk/sysmodule/src/aotag.cpp index 60698970..409f9429 100644 --- a/Source/hoc-clk/sysmodule/src/aotag.cpp +++ b/Source/hoc-clk/sysmodule/src/aotag.cpp @@ -30,7 +30,7 @@ namespace aotag { #define TEGRA_FUSE_CP_REV_0_3 (3) #define FUSE_CP_REV 0x90 u64 fuseVa = 0; - + bool wasInit = false; inline int tegra_fuse_readl(unsigned long base, u32* value) { *value = *reinterpret_cast(fuseVa + base); return 0; @@ -133,7 +133,6 @@ namespace aotag { svcCallSecureMonitor(&args); if (args.X[1] == (PMC_BASE + offset)) { // if param 1 is identical read failed - notification::writeNotification("Horizon OC\nCannot read AOTAG\nExosphere patch not applied!"); return 0; } @@ -304,9 +303,13 @@ namespace aotag { set_bit(CFG_TAG_EN_POS, &r); clear_bit(CFG_DISABLE_CLK_POS, &r); tegra_pmc_writel(r, PMC_AOTAG_CFG); + fileUtils::LogLine("[aotag] Init complete!"); + wasInit = true; } s32 getTemp() { + if(!wasInit) + return -125; u32 regval = 0, abs = 0, fraction = 0, valid = 0, sign = 0; s32 temp = 0; regval = tegra_pmc_readl(PMC_TSENSOR_STATUS1); @@ -323,4 +326,8 @@ namespace aotag { temp = (-1) * (temp); return temp; } + + bool isInitialized() { + return wasInit; + } } \ No newline at end of file diff --git a/Source/hoc-clk/sysmodule/src/aotag.hpp b/Source/hoc-clk/sysmodule/src/aotag.hpp index d27499bf..7694b9e9 100644 --- a/Source/hoc-clk/sysmodule/src/aotag.hpp +++ b/Source/hoc-clk/sysmodule/src/aotag.hpp @@ -224,4 +224,5 @@ namespace aotag { void init(bool isMariko); s32 getTemp(); + bool isInitialized(); } \ No newline at end of file diff --git a/Source/hoc-clk/sysmodule/src/board/board.cpp b/Source/hoc-clk/sysmodule/src/board/board.cpp index 81e46d8c..5b0ca556 100644 --- a/Source/hoc-clk/sysmodule/src/board/board.cpp +++ b/Source/hoc-clk/sysmodule/src/board/board.cpp @@ -55,6 +55,8 @@ namespace board { PwmChannelSession iCon; u32 fd = 0, fd2 = 0; + + #define PMC_BASE 0x7000E400 void FetchHardwareInfos() { ReadFuses(fuseData); @@ -140,7 +142,16 @@ namespace board { FetchHardwareInfos(); soctherm::Initialize(); - aotag::init(GetSocType() == HocClkSocType_Mariko); + // PMC exosphere check + SecmonArgs args = {}; + args.X[0] = 0xF0000002; + args.X[1] = PMC_BASE; + svcCallSecureMonitor(&args); + + if (args.X[1] != PMC_BASE) { // if param 1 is identical read failed + aotag::init(GetSocType() == HocClkSocType_Mariko); + } + Result pwmCheck = 1; if (hosversionAtLeast(6,0,0) && R_SUCCEEDED(pwmInitialize())) { pwmCheck = pwmOpenSession2(&iCon, 0x3D000001); diff --git a/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp b/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp index 017393b0..684f1123 100644 --- a/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp +++ b/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp @@ -34,7 +34,7 @@ #include "../soctherm.hpp" #include "bq24193.hpp" #include "../aotag.hpp" - +#include "../config.hpp" namespace board { s32 GetTemperatureMilli(HocClkThermalSensor sensor) { @@ -50,8 +50,7 @@ namespace board { break; } case HocClkThermalSensor_PCB: { - millis = aotag::getTemp(); - // = tmp451TempPcb(); + millis = tmp451TempPcb(); break; } case HocClkThermalSensor_Skin: { @@ -80,7 +79,11 @@ namespace board { break; } case HocClkThermalSensor_MEM: { - millis = board::GetSocType() == HocClkSocType_Mariko ? temps.pllx : temps.mem; + if(board::GetSocType() == HocClkSocType_Mariko && aotag::isInitialized() && aotag::getTemp() > 0) { + millis = (temps.gpu * 0.45f) + (temps.pllx * 0.30f) + (temps.cpu * 0.15f) + (aotag::getTemp() * 0.10f) + 3000; + } else { + millis = board::GetSocType() == HocClkSocType_Mariko ? temps.pllx : temps.mem; + } break; } case HocClkThermalSensor_PLLX: { @@ -91,6 +94,10 @@ namespace board { millis = bq24193::getBQTemp(); break; } + case HocClkThermalSensor_AO: { + millis = aotag::getTemp(); + break; + } default: { ASSERT_ENUM_VALID(HocClkThermalSensor, sensor); } diff --git a/Source/hoc-clk/sysmodule/src/display/aula.cpp b/Source/hoc-clk/sysmodule/src/display/aula.cpp index ce87f71c..7ff02674 100644 --- a/Source/hoc-clk/sysmodule/src/display/aula.cpp +++ b/Source/hoc-clk/sysmodule/src/display/aula.cpp @@ -37,6 +37,8 @@ namespace AulaDisplay { } void SetDisplayColorMode(AulaColorMode mode) { + if(mode == AulaDisplayColorMode_DoNotOverride) + return; // send display command to change color mode. _display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE_PARAM, MIPI_DCS_PRIV_SM_SET_COLOR_MODE | (mode << 8), 0);