Skip to content
 
 

Repository files navigation

Morrowmake PCIe P2P fork

This fork tracks upstream master (base 6c442ee). It adds working PCIe peer-to-peer copies on CMP 170HX using the maintainer's P2P branch and opens TRAP31_PLM through the Booter when ForceP2P enables peer reads or writes, allowing the mailbox trap to arm.

The patch set applies to 610.43.02, 610.43.03, 610.57.04 and 615.71.09; the four-card hardware result below was measured with 610.57.04.

With the requirements below installed, run:

sudo ./install.sh --p2p --profile=8gb --no-iommu --no-passthrough

Use --profile=10gb for 10GB cards; omit --no-iommu or --no-passthrough if you want the corresponding setup. The installer writes this combined line and retains P2P on subsequent installs:

options nvidia NVreg_RegistryDwords="RmForceEnableGen2=1;RMPcieLinkSpeed=0x1;ForceP2P=0x11"

Stop GPU workloads before a module reload. The installer attempts a live reload; if the modules remain busy, stop their users and reload the NVIDIA modules, or cold boot. If memory stays at its stock size, power off completely before booting.

Verify actual data movement after loading the patched modules:

python3 tools/p2p-content-check.py

The standalone checker needs Python 3 and the NVIDIA CUDA driver, without PyTorch or a CUDA toolkit. It enables peer access on every ordered pair, copies fresh random bytes at 128 KiB−1/128 KiB/128 KiB+1, 512 KiB−1/512 KiB/512 KiB+1, and 1, 8, 32 MiB, then reads the destination in its owning context and compares every byte. Any unsupported pair, CUDA error, or mismatch exits nonzero. nvidia-smi topo and reported peer support alone do not verify contents. The check covers peer copies; applications using IPC or collectives should also validate their own transfers.

On a four-card CMP 170HX system, the full peer-content checks passed on all 12 ordered pairs. Measured 16 MiB copies on pairs 0↔1 and 0↔2 reached approximately 6.65 GB/s each way, with contents verified (610.57.04, PCIe Gen2 x16). See credits for the P2P code and original trap approach.

Licences and source

This fork retains upstream's GPL version 2 licence. The installer downloads NVIDIA's open kernel-module source, applies the published patches and builds the modules locally. Original NVIDIA copyright, MIT and dual MIT/GPL notices remain in their respective source files.

If you redistribute built modules, provide the complete corresponding source for that exact build, including the applied patches, profile/build inputs and installation scripts, and retain the applicable licence notices. An unmodified upstream link alone does not describe the modified binary. See GPLv2 section 3.


cmpunlocker banner

What is cmpunlocker?

cmpunlocker restores numerous features that are restricted in firmware/OTP configuration of the NVIDIA CMP 170HX. cmpunlocker has been featured by multiple outlets like wccftech, Tom's Hardware and LinusTechTips.

Join our Discord community for support and discussions.


Proof of Concept

Below are memory and performance results after applying the unlock:

Memory Unlock Results
memory unlock
Performance Benchmarks (OpenCL-Benchmark)
performance benchmarks

Requirements

  • Linux (x86-64)
  • Root access
  • NVIDIA CMP 170HX
  • nvidia-open 610.xx.xx+ already installed (libs + firmware)
  • Kernel headers matching the running kernel (linux-headers-$(uname -r) / kernel-devel)
  • Secure Boot disabled (patched modules are unsigned)
  • Network access on first install (downloads matching stock open-gpu-kernel-modules sources)
  • Python 3 (used at build time to select 8GB/10GB geometry)

Install

To install cmpunlocker, run the following command:

sudo ./install.sh

To force a certain memory profile, use the --profile option:

sudo ./install.sh --profile=8gb    # 8GB card → 64GB unlock
sudo ./install.sh --profile=10gb   # 10GB card → 40GB unlock

Then perform a reboot.

What Gets Unlocked

Feature Status
Full SM compute throughput (SS0/SS1) Working ✓
Memory geometry (64GB on 8GB cards, 40GB on 10GB cards) Working ✓
PCIe Gen 2 speeds Working ✓
Full BAR1 Size (64GB) Working ✓
JTAG (Host2Jtag register access) Working ✓
VFIO-based passthrough Working ✓
GPU profiling Working ✓
Persistence across reboot (patched modules) Working ✓

Uninstall

To uninstall cmpunlocker, run the following command:

sudo ./remove.sh --yes

Then perform a reboot.

Contributions

Please read docs/CONTRIBUTING.md before opening a PR.

Support & Community

Having issues? Need help? Join our Discord community to discuss with other users and get support.

About

A tool to unlobotomize your NVIDIA card!

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages