2022-04-01 08:38:01 +08:00
2022-01-21 18:01:43 +08:00
2021-07-05 17:02:51 +08:00
2021-09-19 19:03:24 +08:00
2022-03-17 23:25:47 +08:00
2022-01-05 19:20:43 +08:00
2022-01-21 18:01:43 +08:00

Switch OC Suite

License: GPL v2 Join the chat at https://gitter.im/Switch-OC-Suite/community

Overclocking suite for Nintendo Switch™ Horizon OS (HOS) running on Atmosphere CFW.

This project will not be actively maintained or regularly updated along with Atmosphere CFW.

DISCLAIMER: USE AT YOUR OWN RISK!

  • Overclocking in general (often combined with overvolting and overheating) will degrade internal components - SoC, VRM(Voltage Regulator Module), Battery, etc. - faster than you and the manufacturer have expected.

  • Higher RAM clocks without proper timings could be UNSTABLE and cause graphical glitches / instabilities / filesystem corruption. Always make backup before usage.

  • Why no CPU/GPU OC for Erista?

    • Tegra X1 on Erista is on TSMC 20nm HPM node, consumes much more power (~2x) and generates much more heat, compared to Tegra X1+ on Mariko (TSMC 16nm FinFET).

      • Erista Switch uses lower speedo (=== lower quality === higher voltage required) SoC from NVIDIA. You will NOT get comparable performance to NVIDIA Shield TV no matter what.
      • Snapdragon 810 (4 x A57 @ 2.0GHz + 4 x A53) also uses 20nm HPM, see how it plagued Android phones in 2014.
    • The board power supply is quite limited, even if you've done cooling mod.

      • You could spot battery draining at higher clocks under stress test, even with official 39W PD charger.
      • CPU / GPU performance at max clocks will be worse if power supply is not enough.
    • CPU OC (up to ~ 2.1 GHz, depending on your CPU bin) is available mainly for emulation, but it does NOT work out of the box.

Features

  • DRAM Overclock

    • Most games are bottlenecked by RAM bandwidth

    • Safe:

      • Mariko: 1996.8 MHz has been tested stable for all (Samsung / Micron / Hynix), with built-in timing auto-adjustment.
      • Erista: 1862.4 MHz.
    • Unsafe: higher than 1996.8 MHz or overvolting

      • Timing:

        • Timing parameters could be auto-adjusted (default) or overwritten with user-provided mtc table.
        • Customization: No GUI tool, requires rebuilding.
      • DRAM bus overvolting (Erista Only).

  • System Settings (Optional)

  • TinyMemBenchNX: DRAM throughput and latency test based on tinymembench

  • MemTesterNX: A userspace utility for testing DRAM faults and stability based on memtester

    • Now with multi-thread support and "stress DRAM" option, it should be able to test DRAM stability with adjusted timings.

Mariko Only

  • CPU/GPU Overclock

    • Safe: CPU/GPU @ 1785/921 MHz (HOS maximum)

      • It has been proved safe without charger (not reaching battery power draw threshold)
    • Unsafe: CPU/GPU @ 2397/1305 MHz

      • Without chargers, CPU/GPU would be capped @ 1963/921 MHz or -/460 MHz (Emulator mode).

      • Without official chargers, GPU would be capped @ 1267 MHz.

      • Why NOT RECOMMENDED?

        • See Current Flow in sys-clk-OC overlay Miscellaneous (on battery) or measure power draw from charger yourself.
        • Currently, there are no protective measures from heavy power draw.
      • CPU: 2397 MHz @ 1220 mV (overvolting from 1120 mV)

        • NVIDIA Official Maximum: 1963.5 MHz
        • Maximum performance depends on CPU speedo.
          • You'd get somewhere between 2360 to 2390 MHz performance for real.
        • This is where floating point performance maxed out.
        • ≥ 2193 MHz will ENABLE OVERVOLTING.
      • GPU: 1305 MHz (no overvolting, less than official threshold 1050 mV)

        • NVIDIA Official Maximum: 1267.2 MHz
        • Tested with deko3d compute shaders converted from Maxwell SASS assembly. Single-precision floating point (FP32 FFMA) performance maxes out at 1305 MHz.
  • Modded sys-clk and ReverseNX(-RT)

    • Permanent global clock override

      • Expected usage: set maximum DRAM clocks for all games and profiles.
    • Miscellaneous

      • Auto CPU Boost: For faster game loading

        • Enable CPU Boost (1785 MHz, could be configured higher) when CPU Core#3 (System Core) is stressed, especially when the game is loading assets from eMMC/SD card (I/O ops).
        • Auto-Boost will be enabled only when charger is connected.
      • Sync ReverseNX Mode: No need to change clocks manually after toggling modes in ReverseNX

      • View charger & battery info, toggle charging/fast-charging(2A) in overlay

        • Extend battery life expectancy by maintaining battery charge at 40% - 60% and disabling fast charging if possible.
        • Known issue: Fast charging toggle will be reset in-game.

Installation

  1. Download latest release.

  2. Mariko Only: Copy all files in SdOut to the root of SD card.

  • Erista: Use official sys-clk instead. Only loader.kip and some benchmark homebrew are available.
  1. Grab x.x.x_loader.kip for your Atmosphere version, rename it to loader.kip and place it in /atmosphere/kips/.

  2. Customization

    Defaults Mariko Erista
    CPU OC 2397 MHz Max Disabled
    CPU Boost 1785 MHz N/A
    CPU Volt 1220 mV Max Disabled
    GPU OC 1305 MHz Max N/A
    RAM OC 1996 MHz Max 1862 MHz Max
    RAM Volt N/A Disabled
    RAM Timing Auto-Adjusted Disabled
  • Loader configurator
    • Grab ldr_config.py and modify values in cust_conf dict.
    • python ldr_config.py loader.kip -s will save your configuration in-place.
  1. Hekate-ipl bootloader

    • Rename the kip to loader.kip and add kip1=atmosphere/kips/loader.kip in bootloader/hekate_ipl.ini
    • Erista: Minerva module conflicts with HOS DRAM training. Recompile with frequency changed is recommeded, although you could simply remove bootloader/sys/libsys_minerva.bso.

    Atmosphere Fusee bootloader:

    • Fusee will load any kips in /atmosphere/kips/ automatically.

Patching sysmodules manually

This method is only served as reference.

Patched sysmodules would be persistent until pcv or ptm was updated in new HOS (usually in x.0.0).

Tools:

  1. Dump prod.keys with Lockpick_RCM
  2. Dump HOS firmware with TegraExplorer
  3. Configure and run test.sh in /Source/Atmosphere/stratosphere/loader/source/oc/ to generate patched pcv & ptm
  4. Replace nca in SYSTEM:/Contents/registered/ with TegraExplorer
  5. ValidateAcidSignature() should be stubbed to allow unsigned sysmodules to load (a.k.a. loader_patch)

Build

Loader KIP

Grab necessary patches from the repo, then compile sys-clk, ReverseNX-RT and Atmosphere loader with devkitpro.

If you are to install nro forwarders, remove R_TRY(ValidateAcidSignature(std::addressof(g_original_meta_cache.meta))); in Atmosphere/stratosphere/loader/source/ldr_meta.cpp to make them work again.

Uncompress the kip to make it work with config editor: hactool -t kip1 Atmosphere/stratosphere/loader/loader.kip --uncompress=Atmosphere/stratosphere/loader/loader.kip

Acknowledgement

  • CTCaer for Hekate-ipl bootloader, RE and hardware research
  • devkitPro for All-In-One homebrew toolchains
  • masagrator for ReverseNX-RT and info on BatteryChargeInfoFields in psm module
  • Nvidia for Tegra X1 Technical Reference Manual
  • RetroNX team for sys-clk
  • SciresM and Reswitched Team for the state-of-the-art Atmosphere CFW of Switch
  • Switchbrew wiki for Switch in-depth info
  • ZatchyCatGames for RE and original OC loader patches for Atmosphere
Description
An open source overclocking tool for Nintendo Switch consoles running Atmosphere custom firmware
Readme GPL-2.0 139 MiB
Languages
C++ 66%
C 28.1%
NASL 2.3%
Makefile 1.8%
Shell 1.3%
Other 0.5%