hoc-sys: fix tdp and add emc dvfs
This commit is contained in:
@@ -32,11 +32,11 @@ volatile CustomizeTable C = {
|
|||||||
|
|
||||||
.commonCpuBoostClock = 1785000, // Default boost clock
|
.commonCpuBoostClock = 1785000, // Default boost clock
|
||||||
|
|
||||||
.commonEmcMemVolt = 1175000, // LPDDR4X JEDEC Specification
|
.commonEmcMemVolt = 1125000, // LPDDR4X JEDEC Specification
|
||||||
|
|
||||||
.eristaCpuMaxVolt = 1235,
|
.eristaCpuMaxVolt = 1235,
|
||||||
|
|
||||||
.eristaEmcMaxClock = 1600000, // Maximum HB-MGCH ram rating
|
.eristaEmcMaxClock = 1862400, // Maximum HB-MGCH ram rating
|
||||||
|
|
||||||
.marikoCpuMaxVolt = 1120,
|
.marikoCpuMaxVolt = 1120,
|
||||||
|
|
||||||
@@ -137,7 +137,7 @@ volatile CustomizeTable C = {
|
|||||||
0 /* 998 (Disabled by default) */,
|
0 /* 998 (Disabled by default) */,
|
||||||
0 /* 1036 (Disabled by default) */,
|
0 /* 1036 (Disabled by default) */,
|
||||||
0 /* 1075 (Disabled by default) */,
|
0 /* 1075 (Disabled by default) */,
|
||||||
};
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -201,7 +201,6 @@ void MemMtcTableAutoAdjust(EristaMtcTable *table) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result MemFreqMtcTable(u32 *ptr) {
|
Result MemFreqMtcTable(u32 *ptr) {
|
||||||
if(C.eristaEmcMaxClock != EmcClkOSLimit) {
|
|
||||||
u32 khz_list[] = {1600000, 1331200, 1065600, 800000, 665600, 408000, 204000, 102000, 68000, 40800};
|
u32 khz_list[] = {1600000, 1331200, 1065600, 800000, 665600, 408000, 204000, 102000, 68000, 40800};
|
||||||
u32 khz_list_size = sizeof(khz_list) / sizeof(u32);
|
u32 khz_list_size = sizeof(khz_list) / sizeof(u32);
|
||||||
|
|
||||||
@@ -232,9 +231,6 @@ void MemMtcTableAutoAdjust(EristaMtcTable *table) {
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
} else {
|
|
||||||
R_SUCCEED(); // Skip changing table on default freq
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Result MemFreqMax(u32 *ptr) {
|
Result MemFreqMax(u32 *ptr) {
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ typedef enum {
|
|||||||
HocClkConfigValue_MarikoMaxGpuClock,
|
HocClkConfigValue_MarikoMaxGpuClock,
|
||||||
HocClkConfigValue_MarikoMaxMemClock,
|
HocClkConfigValue_MarikoMaxMemClock,
|
||||||
|
|
||||||
|
HocClkConfigValue_MarikoCpuBoostClock,
|
||||||
|
HocClkConfigValue_EristaCpuBoostClock,
|
||||||
|
|
||||||
HocClkConfigValue_ThermalThrottle,
|
HocClkConfigValue_ThermalThrottle,
|
||||||
HocClkConfigValue_ThermalThrottleThreshold,
|
HocClkConfigValue_ThermalThrottleThreshold,
|
||||||
|
|
||||||
@@ -56,12 +59,13 @@ typedef enum {
|
|||||||
HocClkConfigValue_HandheldTDP,
|
HocClkConfigValue_HandheldTDP,
|
||||||
HocClkConfigValue_HandheldTDPLimit,
|
HocClkConfigValue_HandheldTDPLimit,
|
||||||
HocClkConfigValue_LiteTDPLimit,
|
HocClkConfigValue_LiteTDPLimit,
|
||||||
HocClkConfigValue_TDPCycleLimit,
|
|
||||||
|
|
||||||
HocClkConfigValue_EnforceBoardLimit,
|
HocClkConfigValue_EnforceBoardLimit,
|
||||||
|
|
||||||
|
HocClkConfigValue_EMCDVFS,
|
||||||
HocClkConfigValue_EMCVdd2VoltageUV,
|
HocClkConfigValue_EMCVdd2VoltageUV,
|
||||||
|
HocClkConfigValue_EMCVdd2VoltageUVStockErista,
|
||||||
|
HocClkConfigValue_EMCVdd2VoltageUVStockMariko,
|
||||||
SysClkConfigValue_EnumMax,
|
SysClkConfigValue_EnumMax,
|
||||||
} SysClkConfigValue;
|
} SysClkConfigValue;
|
||||||
|
|
||||||
@@ -102,6 +106,12 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr
|
|||||||
case HocClkConfigValue_MarikoMaxMemClock:
|
case HocClkConfigValue_MarikoMaxMemClock:
|
||||||
return pretty ? "Max MEM Clock" : "mem_max_m";
|
return pretty ? "Max MEM Clock" : "mem_max_m";
|
||||||
|
|
||||||
|
case HocClkConfigValue_MarikoCpuBoostClock:
|
||||||
|
return pretty ? "CPU Boost Clock" : "cpu_boost_m";
|
||||||
|
|
||||||
|
case HocClkConfigValue_EristaCpuBoostClock:
|
||||||
|
return pretty ? "CPU Boost Clock" : "cpu_boost_e";
|
||||||
|
|
||||||
case HocClkConfigValue_ThermalThrottle:
|
case HocClkConfigValue_ThermalThrottle:
|
||||||
return pretty ? "Thermal Throttle" : "thermal_throttle";
|
return pretty ? "Thermal Throttle" : "thermal_throttle";
|
||||||
|
|
||||||
@@ -122,12 +132,16 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr
|
|||||||
case HocClkConfigValue_LiteTDPLimit:
|
case HocClkConfigValue_LiteTDPLimit:
|
||||||
return pretty ? "Lite TDP Limit" : "tdp_limit_l";
|
return pretty ? "Lite TDP Limit" : "tdp_limit_l";
|
||||||
|
|
||||||
case HocClkConfigValue_TDPCycleLimit:
|
|
||||||
return pretty ? "TDP Cycle Limit" : "tdp_limit_c";
|
|
||||||
case HocClkConfigValue_EnforceBoardLimit:
|
case HocClkConfigValue_EnforceBoardLimit:
|
||||||
return pretty ? "Enforce Board Limit" : "enforce_board_limit";
|
return pretty ? "Enforce Board Limit" : "enforce_board_limit";
|
||||||
|
case HocClkConfigValue_EMCDVFS:
|
||||||
|
return pretty ? "EMC DVFS" : "emc_dvfs";
|
||||||
case HocClkConfigValue_EMCVdd2VoltageUV:
|
case HocClkConfigValue_EMCVdd2VoltageUV:
|
||||||
return pretty ? "EMC Vdd2 Voltage" : "emc_vdd2_voltage_uv";
|
return pretty ? "Overclocked EMC Vdd2 Voltage" : "emc_vdd2_voltage_uv";
|
||||||
|
case HocClkConfigValue_EMCVdd2VoltageUVStockErista:
|
||||||
|
return pretty ? "Stock EMC Vdd2 Voltage" : "emc_vdd2_voltage_uv_s_e";
|
||||||
|
case HocClkConfigValue_EMCVdd2VoltageUVStockMariko:
|
||||||
|
return pretty ? "Stock EMC Vdd2 Voltage" : "emc_vdd2_voltage_uv_s_m";
|
||||||
default:
|
default:
|
||||||
return pretty ? "Null" : "null";
|
return pretty ? "Null" : "null";
|
||||||
}
|
}
|
||||||
@@ -147,6 +161,7 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
|
|||||||
case HocClkConfigValue_OverwriteBoostMode:
|
case HocClkConfigValue_OverwriteBoostMode:
|
||||||
return 0ULL;
|
return 0ULL;
|
||||||
case HocClkConfigValue_EristaMaxCpuClock:
|
case HocClkConfigValue_EristaMaxCpuClock:
|
||||||
|
case HocClkConfigValue_EristaCpuBoostClock:
|
||||||
return 1785ULL;
|
return 1785ULL;
|
||||||
case HocClkConfigValue_EristaMaxGpuClock:
|
case HocClkConfigValue_EristaMaxGpuClock:
|
||||||
return 921ULL;
|
return 921ULL;
|
||||||
@@ -154,9 +169,10 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
|
|||||||
return 1600ULL;
|
return 1600ULL;
|
||||||
|
|
||||||
case HocClkConfigValue_MarikoMaxCpuClock:
|
case HocClkConfigValue_MarikoMaxCpuClock:
|
||||||
|
case HocClkConfigValue_MarikoCpuBoostClock:
|
||||||
return 1963ULL;
|
return 1963ULL;
|
||||||
case HocClkConfigValue_MarikoMaxGpuClock:
|
case HocClkConfigValue_MarikoMaxGpuClock:
|
||||||
return 1075ULL;
|
return 1152ULL;
|
||||||
case HocClkConfigValue_MarikoMaxMemClock:
|
case HocClkConfigValue_MarikoMaxMemClock:
|
||||||
return 1862ULL;
|
return 1862ULL;
|
||||||
|
|
||||||
@@ -165,6 +181,7 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
|
|||||||
case HocClkConfigValue_HandheldGovernor:
|
case HocClkConfigValue_HandheldGovernor:
|
||||||
case HocClkConfigValue_HandheldTDP:
|
case HocClkConfigValue_HandheldTDP:
|
||||||
case HocClkConfigValue_EnforceBoardLimit:
|
case HocClkConfigValue_EnforceBoardLimit:
|
||||||
|
case HocClkConfigValue_EMCDVFS:
|
||||||
return 1ULL;
|
return 1ULL;
|
||||||
case HocClkConfigValue_ThermalThrottleThreshold:
|
case HocClkConfigValue_ThermalThrottleThreshold:
|
||||||
return 70ULL;
|
return 70ULL;
|
||||||
@@ -172,10 +189,12 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
|
|||||||
return 8600ULL;
|
return 8600ULL;
|
||||||
case HocClkConfigValue_LiteTDPLimit:
|
case HocClkConfigValue_LiteTDPLimit:
|
||||||
return 6400ULL;
|
return 6400ULL;
|
||||||
case HocClkConfigValue_TDPCycleLimit:
|
|
||||||
return 10ULL;
|
|
||||||
case HocClkConfigValue_EMCVdd2VoltageUV:
|
case HocClkConfigValue_EMCVdd2VoltageUV:
|
||||||
return 1175000ULL;
|
return 1175000ULL;
|
||||||
|
case HocClkConfigValue_EMCVdd2VoltageUVStockErista:
|
||||||
|
return 1125000ULL;
|
||||||
|
case HocClkConfigValue_EMCVdd2VoltageUVStockMariko:
|
||||||
|
return 1100000ULL;
|
||||||
default:
|
default:
|
||||||
return 0ULL;
|
return 0ULL;
|
||||||
}
|
}
|
||||||
@@ -191,6 +210,8 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
|
|||||||
case HocClkConfigValue_MarikoMaxCpuClock:
|
case HocClkConfigValue_MarikoMaxCpuClock:
|
||||||
case HocClkConfigValue_MarikoMaxGpuClock:
|
case HocClkConfigValue_MarikoMaxGpuClock:
|
||||||
case HocClkConfigValue_MarikoMaxMemClock:
|
case HocClkConfigValue_MarikoMaxMemClock:
|
||||||
|
case HocClkConfigValue_EristaCpuBoostClock:
|
||||||
|
case HocClkConfigValue_MarikoCpuBoostClock:
|
||||||
case HocClkConfigValue_ThermalThrottleThreshold:
|
case HocClkConfigValue_ThermalThrottleThreshold:
|
||||||
case HocClkConfigValue_HandheldTDPLimit:
|
case HocClkConfigValue_HandheldTDPLimit:
|
||||||
case HocClkConfigValue_LiteTDPLimit:
|
case HocClkConfigValue_LiteTDPLimit:
|
||||||
@@ -200,8 +221,9 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
|
|||||||
case SysClkConfigValue_FreqLogIntervalMs:
|
case SysClkConfigValue_FreqLogIntervalMs:
|
||||||
case SysClkConfigValue_PowerLogIntervalMs:
|
case SysClkConfigValue_PowerLogIntervalMs:
|
||||||
case SysClkConfigValue_CsvWriteIntervalMs:
|
case SysClkConfigValue_CsvWriteIntervalMs:
|
||||||
case HocClkConfigValue_TDPCycleLimit:
|
|
||||||
case HocClkConfigValue_EMCVdd2VoltageUV:
|
case HocClkConfigValue_EMCVdd2VoltageUV:
|
||||||
|
case HocClkConfigValue_EMCVdd2VoltageUVStockErista:
|
||||||
|
case HocClkConfigValue_EMCVdd2VoltageUVStockMariko:
|
||||||
return input >= 0;
|
return input >= 0;
|
||||||
case HocClkConfigValue_UncappedClocks:
|
case HocClkConfigValue_UncappedClocks:
|
||||||
case HocClkConfigValue_OverwriteBoostMode:
|
case HocClkConfigValue_OverwriteBoostMode:
|
||||||
@@ -210,6 +232,7 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
|
|||||||
case HocClkConfigValue_HandheldGovernor:
|
case HocClkConfigValue_HandheldGovernor:
|
||||||
case HocClkConfigValue_HandheldTDP:
|
case HocClkConfigValue_HandheldTDP:
|
||||||
case HocClkConfigValue_EnforceBoardLimit:
|
case HocClkConfigValue_EnforceBoardLimit:
|
||||||
|
case HocClkConfigValue_EMCDVFS:
|
||||||
return (input & 0x1) == input;
|
return (input & 0x1) == input;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -246,14 +246,34 @@ void MiscGui::listUI()
|
|||||||
addFreqButton(HocClkConfigValue_EristaMaxMemClock, nullptr, SysClkModule_MEM);
|
addFreqButton(HocClkConfigValue_EristaMaxMemClock, nullptr, SysClkModule_MEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addConfigToggle(HocClkConfigValue_EMCDVFS, nullptr);
|
||||||
|
|
||||||
ValueThresholds emcUvThresholds(1212500, 1250000);
|
ValueThresholds emcUvThresholds(1212500, 1250000);
|
||||||
addConfigButton(
|
addConfigButton(
|
||||||
HocClkConfigValue_EMCVdd2VoltageUV,
|
HocClkConfigValue_EMCVdd2VoltageUV,
|
||||||
"EMC VDD2 Voltage",
|
"EMC VDD2 Voltage",
|
||||||
ValueRange(1100000, 1350000, 12500, "mV", 1000, 1),
|
ValueRange(1100000, 1237500, 12500, "mV", 1000, 1),
|
||||||
"EMC VDD2 Voltage",
|
"EMC VDD2 Voltage",
|
||||||
&emcUvThresholds
|
&emcUvThresholds
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// if(IsMariko()) {
|
||||||
|
// addConfigButton(
|
||||||
|
// HocClkConfigValue_EMCVdd2VoltageUVStockMariko,
|
||||||
|
// "EMC Stock VDD2 Voltage",
|
||||||
|
// ValueRange(912500, 1175000, 12500, "mV", 1000, 1),
|
||||||
|
// "EMC Stock VDD2 Voltage",
|
||||||
|
// &emcUvThresholds
|
||||||
|
// );
|
||||||
|
// } else {
|
||||||
|
addConfigButton(
|
||||||
|
HocClkConfigValue_EMCVdd2VoltageUVStockErista,
|
||||||
|
"EMC Stock VDD2 Voltage",
|
||||||
|
ValueRange(1000000, 1175000, 12500, "mV", 1000, 1),
|
||||||
|
"EMC Stock VDD2 Voltage",
|
||||||
|
&emcUvThresholds
|
||||||
|
);
|
||||||
|
// }
|
||||||
|
|
||||||
tsl::elm::ListItem* applyBtn = new tsl::elm::ListItem("Apply EMC Regs");
|
tsl::elm::ListItem* applyBtn = new tsl::elm::ListItem("Apply EMC Regs");
|
||||||
applyBtn->setClickListener([](u64 keys) {
|
applyBtn->setClickListener([](u64 keys) {
|
||||||
|
|||||||
@@ -228,50 +228,69 @@ void ClockManager::RefreshFreqTableRow(SysClkModule module)
|
|||||||
|
|
||||||
void ClockManager::Tick()
|
void ClockManager::Tick()
|
||||||
{
|
{
|
||||||
|
std::uint32_t mode = 0;
|
||||||
|
AppletOperationMode opMode = appletGetOperationMode();
|
||||||
|
Result rc = apmExtGetCurrentPerformanceConfiguration(&mode);
|
||||||
|
ASSERT_RESULT_OK(rc, "apmExtGetCurrentPerformanceConfiguration");
|
||||||
|
|
||||||
|
|
||||||
|
if(this->config->GetConfigValue(HocClkConfigValue_EMCDVFS)) {
|
||||||
|
|
||||||
|
#define DEFAULT_FREQ_MHZ 1600
|
||||||
|
#define DEFAULT_FREQ_MHZ_M 1862
|
||||||
|
|
||||||
|
int ram_mhz = Board::GetHz((SysClkModule)SysClkModule_MEM) / 1000000;
|
||||||
|
|
||||||
|
if (Board::GetSocType() == SysClkSocType_Mariko) {
|
||||||
|
if(ram_mhz > DEFAULT_FREQ_MHZ_M)
|
||||||
|
set_sd1_voltage(this->config->GetConfigValue(HocClkConfigValue_EMCVdd2VoltageUV));
|
||||||
|
else
|
||||||
|
set_sd1_voltage(this->config->GetConfigValue(HocClkConfigValue_EMCVdd2VoltageUVStockMariko));
|
||||||
|
} else {
|
||||||
|
if(ram_mhz > DEFAULT_FREQ_MHZ)
|
||||||
|
set_sd1_voltage(this->config->GetConfigValue(HocClkConfigValue_EMCVdd2VoltageUV));
|
||||||
|
else
|
||||||
|
set_sd1_voltage(this->config->GetConfigValue(HocClkConfigValue_EMCVdd2VoltageUVStockErista));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this->config->GetConfigValue(HocClkConfigValue_HandheldTDP) && opMode == AppletOperationMode_Handheld) {
|
||||||
|
if(Board::GetSocType() == SysClkSocType_MarikoLite) {
|
||||||
|
if(Board::GetPowerMw(SysClkPowerSensor_Avg) < -(int)this->config->GetConfigValue(HocClkConfigValue_LiteTDPLimit)) {
|
||||||
|
ResetToStockClocks();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(Board::GetPowerMw(SysClkPowerSensor_Avg) < -(int)this->config->GetConfigValue(HocClkConfigValue_HandheldTDPLimit)) {
|
||||||
|
ResetToStockClocks();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(opMode == AppletOperationMode_Console && this->config->GetConfigValue(HocClkConfigValue_EnforceBoardLimit)) {
|
||||||
|
if(Board::GetPowerMw(SysClkPowerSensor_Avg) < 0) {
|
||||||
|
ResetToStockClocks();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(((tmp451TempSoc() / 1000) > (int)this->config->GetConfigValue(HocClkConfigValue_ThermalThrottleThreshold)) && this->config->GetConfigValue(HocClkConfigValue_ThermalThrottle)) {
|
||||||
|
ResetToStockClocks();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::scoped_lock lock{this->contextMutex};
|
std::scoped_lock lock{this->contextMutex};
|
||||||
if (this->RefreshContext() || this->config->Refresh())
|
if (this->RefreshContext() || this->config->Refresh())
|
||||||
{
|
{
|
||||||
std::uint32_t targetHz = 0;
|
std::uint32_t targetHz = 0;
|
||||||
std::uint32_t maxHz = 0;
|
std::uint32_t maxHz = 0;
|
||||||
std::uint32_t nearestHz = 0;
|
std::uint32_t nearestHz = 0;
|
||||||
std::uint32_t mode = 0;
|
|
||||||
|
|
||||||
if(this->config->GetConfigValue(HocClkConfigValue_EMCVdd2VoltageUV) < 1400000) { // Safety Check
|
|
||||||
set_sd1_voltage((u32)this->config->GetConfigValue(HocClkConfigValue_EMCVdd2VoltageUV));
|
|
||||||
}
|
|
||||||
|
|
||||||
AppletOperationMode opMode = appletGetOperationMode();
|
|
||||||
Result rc = apmExtGetCurrentPerformanceConfiguration(&mode);
|
|
||||||
ASSERT_RESULT_OK(rc, "apmExtGetCurrentPerformanceConfiguration");
|
|
||||||
|
|
||||||
if(this->config->GetConfigValue(HocClkConfigValue_HandheldTDP) && opMode == AppletOperationMode_Handheld) {
|
|
||||||
if(Board::GetSocType() == SysClkSocType_MarikoLite) {
|
|
||||||
if(Board::GetPowerMw(SysClkPowerSensor_Avg) < -(int)this->config->GetConfigValue(HocClkConfigValue_LiteTDPLimit)) {
|
|
||||||
ResetToStockClocks();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(Board::GetPowerMw(SysClkPowerSensor_Avg) < -(int)this->config->GetConfigValue(HocClkConfigValue_HandheldTDPLimit)) {
|
|
||||||
ResetToStockClocks();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if(opMode == AppletOperationMode_Console && this->config->GetConfigValue(HocClkConfigValue_EnforceBoardLimit)) {
|
|
||||||
if(Board::GetPowerMw(SysClkPowerSensor_Avg) < 0) {
|
|
||||||
ResetToStockClocks();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(apmExtIsBoostMode(mode) && !this->config->GetConfigValue(HocClkConfigValue_OverwriteBoostMode)) {
|
if(apmExtIsBoostMode(mode) && !this->config->GetConfigValue(HocClkConfigValue_OverwriteBoostMode)) {
|
||||||
ResetToStockClocks();
|
ResetToStockClocks();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(((tmp451TempSoc() / 1000) > (int)this->config->GetConfigValue(HocClkConfigValue_ThermalThrottleThreshold)) && this->config->GetConfigValue(HocClkConfigValue_ThermalThrottle)) {
|
|
||||||
ResetToStockClocks();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(this->config->GetConfigValue(HocClkConfigValue_HandheldGovernor) && opMode == AppletOperationMode_Handheld) {
|
if(this->config->GetConfigValue(HocClkConfigValue_HandheldGovernor) && opMode == AppletOperationMode_Handheld) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
4
dist/README.md
vendored
4
dist/README.md
vendored
@@ -84,12 +84,14 @@ It enables advanced CPU, GPU, and RAM tuning with user-friendly configuration to
|
|||||||
```
|
```
|
||||||
3. Move the cloned folder into `build/`.
|
3. Move the cloned folder into `build/`.
|
||||||
4. Insert your `Source/stratosphere` folder into `build/`.
|
4. Insert your `Source/stratosphere` folder into `build/`.
|
||||||
5. Run:
|
5. Run: (On Windows you need to use "make -j %NUMBER_OF_PROCESSORS%")
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./build.sh
|
./build.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
To build the Configurator:
|
To build the Configurator:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
BIN
dist/atmosphere/contents/00FF0000636C6BFF/exefs.nsp
vendored
BIN
dist/atmosphere/contents/00FF0000636C6BFF/exefs.nsp
vendored
Binary file not shown.
BIN
dist/atmosphere/kips/hoc.kip
vendored
BIN
dist/atmosphere/kips/hoc.kip
vendored
Binary file not shown.
Reference in New Issue
Block a user