diff --git a/README.md b/README.md index f4d73eb2..238a6fa0 100644 --- a/README.md +++ b/README.md @@ -120,11 +120,13 @@ Overclocking suite for Horizon OS (HOS) running on Atmosphere CFW. ## Build
+ Grab necessary patches from the repo, then compile sys-clk, ReverseNX-RT and Atmosphere loader with devkitpro. Before compiling Atmosphere loader, run `patch.py` in `Atmosphere/stratosphere/loader/source/` to insert oc module into loader sysmodule. When compilation is done, uncompress the kip to make it work with configurator: `hactool -t kip1 Atmosphere/stratosphere/loader/out/nintendo_nx_arm64_armv8a/release/loader.kip --uncompress=./loader.kip` +
diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp index 97b9ec56..52fbc835 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp @@ -372,10 +372,6 @@ Result MemFreqMax(u32* ptr) { } Result MemVoltHandler(u32* ptr) { - u32 emc_uv = C.marikoEmcVolt; - if (!emc_uv) - R_SKIP(); - regulator* entry = reinterpret_cast(reinterpret_cast(ptr) - offsetof(regulator, type_2_3.default_uv)); constexpr u32 uv_step = 5'000; @@ -386,6 +382,10 @@ Result MemVoltHandler(u32* ptr) { entry->type_2_3.min_uv != uv_min) R_THROW(ldr::ResultInvalidRegulatorEntry()); + u32 emc_uv = C.marikoEmcVolt; + if (!emc_uv) + R_SKIP(); + if (emc_uv % uv_step) emc_uv = emc_uv / uv_step * uv_step; // rounding diff --git a/Source/sys-clk-OC/common/src/i2c.c b/Source/sys-clk-OC/common/src/i2c.c index 115c9e76..cf69ef5d 100644 --- a/Source/sys-clk-OC/common/src/i2c.c +++ b/Source/sys-clk-OC/common/src/i2c.c @@ -100,16 +100,18 @@ u8 I2c_BuckConverter_MvOutToMultiplier(const I2c_BuckConverter_Domain* domain, u u32 I2c_BuckConverter_GetMvOut(const I2c_BuckConverter_Domain* domain) { u8 val; Result res; - // Retry 3 times if failed or received POR value + // Retry 3 times if received POR value for (int i = 0; i < 3; i++) { res = I2cRead_OutU8(domain->device, domain->reg, &val); - if (R_FAILED(res) || (domain->por_val && val == domain->por_val)) { - svcSleepThread(1000); - continue; - } - return I2c_BuckConverter_MultiplierToMvOut(domain, val & domain->volt_mask); + if (R_FAILED(res)) + return 0u; + + if (!domain->por_val || val != domain->por_val) + break; + + svcSleepThread(1000); } - return 0u; + return I2c_BuckConverter_MultiplierToMvOut(domain, val & domain->volt_mask); } Result I2c_BuckConverter_SetMvOut(const I2c_BuckConverter_Domain* domain, u32 mvolt) {