ConnectX-7 network cards disappear after DGX Spark system update due to cx7-pcie-hotplug driver issue

SYSTEM CONFIGURATION:

  • Model: NVIDIA DGX Spark (Founders Edition)
  • Affected Units: 2 identical systems
  • Firmware Version: ConnectX-7 28.45.4028
  • Issue: All ConnectX-7 NICs disappear 20-22 seconds after boot

PROBLEM DESCRIPTION:
Both DGX Spark systems experience identical failures after recent system update.
All four ConnectX-7 network cards become completely inaccessible after boot.

SYMPTOMS:

  1. Boot sequence initially normal:

    • All 4 ConnectX-7 ports detected (0000:01:00.0/1, 0002:01:00.0/1)
    • Firmware loads successfully (28.45.4028)
    • Interfaces renamed correctly (enp1s0f0np0, enp1s0f1np1, etc.)
  2. At 20-22 seconds after boot:

    • dmesg: “cx7-pcie-hotplug MTKP0001:00: Cable removal”
    • All ConnectX-7 devices vanish from lspci
    • Network interfaces unavailable
    • Devices don’t return without full power cycle

KEY LOG ENTRIES:
[ 20.409369] cx7-pcie-hotplug MTKP0001:00: Cable removal
[ 1.618306] mlx5_core 0000:01:00.0: mlx5_pcie_event:326:(pid 12):
Detected insufficient power on the PCIe slot (27W)
[ 22.457897] cx7-pcie-hotplug MTKP0001:00: Cable removal

TROUBLESHOOTING ATTEMPTED:
✓ Cold reboot (full power cycle)
✓ Disabled PCIe power management (pcie_port_pm=off pcie_aspm=off in GRUB)
✓ Verified firmware version: 28.45.4028
✗ Issue persists - NICs still disappear

QUESTIONS:

  1. Is this a known issue with recent DGX OS updates?
  2. Is cx7-pcie-hotplug incorrectly triggering power-saving mode?
  3. Can this hotplug feature be safely disabled?
  4. Is firmware/driver resynchronization needed?

Both systems worked perfectly before the recent update. No physical hardware
changes were made. This appears to be a software/firmware issue rather than
hardware failure.

Full diagnostic logs available if needed.

UPDATE (2026-06-25): Technical Investigation regarding Cable Compatibility

Upon further investigation into the ⁠cx7-pcie-hotplug⁠ driver behavior, I have identified a variable in my system setup: I am currently using FS-branded MCP1650-V00AE30 (0.5m QSFP56) cables. While these were marketed as compatible with DGX Spark, I am concerned about potential I2C/EEPROM validation mismatches with the ⁠cx7-pcie-hotplug⁠ driver.

I have observed that the ⁠Cable removal⁠ events consistently trigger on these ports. I would like to clarify:

1. Is it possible that the ⁠cx7-pcie-hotplug⁠ driver is enforcing a strict EEPROM/Vendor ID validation that results in this ⁠NO-CARRIER⁠ state when using these specific FS cables?

2. Does NVIDIA provide an Official LinkX Interoperability Matrix or a Qualified Cable List (QCL) for the DGX Spark platform? I want to ensure my current setup aligns with the required electrical and authentication specifications.

Any guidance on whether this cable model is known to trigger such hotplug initialization deadlocks would be greatly appreciated, as I am currently unable to maintain network link stability.

DGX_Spark_Issue_Evidence_c3e1.tar.gz (30.0 KB)

DGX_Spark_Issue_Evidence_spark62d9.tar.gz (27.8 KB)

Adding a data point from Dell-branded hardware, since this thread is Founders Edition so far.
We have the same failure, and we have an accidental control unit that appears to isolate it
to the kernel version rather than to cables or power.

Hardware: two Dell Pro Max with GB10 (FCM1253, SKU 0DA7) — the Dell-badged DGX Spark.
Same BIOS 5.36_4.0.0, same DGX OS build 7.2.3, same ConnectX-7 firmware 28.45.4028 on both.

One of them updated to kernel 6.17.0-1029-nvidia. The other still runs the kernel it
shipped with, 6.11.0-1016-nvidia, because its upgrade was interrupted — the
linux-image-6.17.0-1029-nvidia package is sitting in install ok unpacked with no initrd
generated, so it has never actually booted the new kernel.

That gives a clean single-variable comparison:

6.11.0-1016-nvidia 6.17.0-1029-nvidia
CX7 enumerates at boot yes, 4 functions 15b3:1021 @ 0.07s yes, 4 functions @ 0.07s
mlx5_core binds, netdevs created yes yes
Detected insufficient power on the PCIe slot (27W) yes, all 4 functions yes, all 4 functions
Port module event: ... Cable unplugged yes, all 4 ports yes, all 4 ports
CX7 root-port link speed 32.0 GT/s (Gen5) 2.5 GT/s (Gen1)
CX7 present on the PCIe bus yes — present across four consecutive boots, incl. one 5-day run no — removed ~5.7s into every boot

Three things this seems to settle:

1. The 27W message is not the fault. It fires four times on the working unit. Same
message, same count, healthy card. It looks like normal platform noise on GB10 rather than a
power-delivery problem. It is worth being clear about that, because on its own the message
reads like a power-delivery fault and can send you toward replacing a PSU or a mainboard.

2. Cable state is not the discriminator either. Both of our units have had
electrically empty ports their entire lives — across every boot on record for the working
unit, four of them, the count is 0 Cable plugged events and 4 Cable unplugged. No
module has ever been detected in either cage. ethtool -m confirms it at firmware level:
mlx5_query_mcia: query_mcia_reg failed: status: 0x3, surfacing as -EIO.

So the removal on the newer kernel happens with no module ever presented to the NIC —
there is no EEPROM and no vendor ID available to validate. Whatever cx7-pcie-hotplug is
doing on our hardware, it cannot be triggered by rejecting a cable’s identity, because it
never read one. That doesn’t rule out cable validation being a trigger on your setup, but
it can’t be the only path in. Worth someone reproducing it with the ports genuinely empty.

3. The Gen1 link speed is downstream, not upstream. The faulted unit’s CX7 root ports
read 2.5 GT/s against a 32.0 GT/s max, which looks alarming and initially sent us toward a
power/link-training theory. The working unit trains both CX7 root ports at the full 32.0
GT/s. The Gen1 reading is just what a root port reports once the endpoint is gone — a
consequence of the removal, not a cause of it.

On the teardown timing: ours goes at roughly 5.7s, with the E-Switch unload/disable/cleanup
sequence immediately preceding the devices leaving the bus. This thread reports 20–22s. Same
end state, different timing, which might mean two paths into the same removal, or just
different service ordering between images. Curious whether anyone else can pin down which.

On your Qualified Cable List question — there is a published list, and it is short.
NVIDIA’s DGX Spark documentation states the ConnectX-7 ports are QSFP112 and names three
validated cables:

Vendor Part Length
Amphenol NJAAKK-N911 400 mm
Amphenol NJAAKK0006 0.5 m
Luxshare LMTQF022-SD-R 400 mm

Source: ConnectX-7 Networking — DGX Spark User Guide — the same page carries the
insertion guidance (“should slide in smoothly without force”, and a warning that forcing a
misaligned connector can damage the port). Every validated length is 400 mm or 0.5 m, which is
worth knowing before planning a physical layout. Note that this list is QSFP112 while the
MCP1650-V00AE30 discussed upthread is QSFP56 — mechanically the same single-density family,
so that shouldn’t be a seating issue, but it is not on the published list either.

One warning for anyone else troubleshooting this: echo 1 > /sys/bus/pci/rescan to try
to rebind the card hard-crashed the machine — no panic, no oops, nothing in pstore, and
it needed a power cycle. The platform reports watchdog: Hard watchdog permanently disabled
and NMI not fully supported, so nothing recovers it automatically. Don’t do it on a machine
you can’t physically reach.

Questions for NVIDIA:

  1. Is the removal on 6.17.0-1029-nvidia a known regression, and is a fixed kernel or
    firmware in flight? This thread has had no official response since June.
  2. Is holding at 6.11.0-1016-nvidia a supported interim position, and what is given up by
    staying there?
  3. Is there a way to disable the cable-presence/hotplug behavior on the newer kernel — a
    module parameter or boot parameter — so the card stays bound regardless of module state?
    pcie_port_pm=off pcie_aspm=off was reported not to help here, and we have not found
    anything that targets the CX7 hotplug path specifically.

We also have an open support case with Dell on the faulted unit and are corresponding with
them on it. It is not resolved. If anything conclusive comes back through that channel we
will post it here, and we would suggest anyone else seeing this on OEM-branded GB10 hardware
open a case as well — the more units on record, the harder this is to leave unanswered.

Happy to provide full journalctl -b -k -o short-monotonic captures from both units. We are
holding the working one at 6.11 as a control and are willing to run a specific test on it
before we change anything, if that would help isolate this.

Following up on my first post with what I think settles the cause, plus a better
mitigation than the rollback I was originally going to suggest.

Short version: 6.14.0-1015-nvidia is clean. It is newer than the kernel these units
shipped with, it is in the archive now, and the ConnectX-7 comes up and stays up on it. I
have four GB10 units all running it with all four CX7 functions present and stable. Nobody
needs to sit on the ship-date 6.11 to keep their card.

Same-machine A/B. I rolled the originally faulted unit back to its shipped kernel using
a one-shot grub-reboot, so nothing was uninstalled. Same board, same BIOS, same CX7
firmware 28.45.4028, same cabling, same PSU, same physical placement — the kernel is the
only thing that differs between these two boots:

6.17.0-1029-nvidia 6.11.0-1016-nvidia
CX7 functions on the PCIe bus 0 4
CX7 root-port link speed 2.5 GT/s (Gen1) 32.0 GT/s (Gen5), equal to max
mlx5 netdevs none all four
E-Switch: Unload/Disable/cleanup yes, from t+5.74s none
Detected insufficient power (27W) 4x 4x
Port module event: Cable unplugged 4x 4x

The window, bounded on both sides. Every row is a boot I actually performed:

kernel units booted CX7 functions E-Switch teardown
6.11.0-1016-nvidia (shipped) 3 4 none
6.14.0-1015-nvidia 4 4 none
6.17.0-1021-nvidia 2 0 yes
6.17.0-1029-nvidia 1 0 yes

So it lands after 6.14.0-1015 and by 6.17.0-1021, and it is not specific to one
kernel build — -1021 and -1029 both do it. If anyone has a unit on a build between
those two, that data point is the gap nobody has filled. I have 6.17.0-1008 installed on
one unit and will boot it shortly to try to close it further.

(Correction to my own earlier working notes: I had 6.17.0-1008 listed as faulted. I have
never booted it. It is not part of the evidence above.)

What a healthy 6.14 boot looks like, identical on all four units:

[    1.205183] mlx5_core 0000:01:00.0: firmware version: 28.45.4028
[    1.205205] mlx5_core 0000:01:00.0: 126.028 Gb/s available PCIe bandwidth (32.0 GT/s PCIe x4 link)

Binds at t+1.2s, zero E-Switch teardown events, and current_link_speed =
max_link_speed = 32.0 GT/s hours later. The bind is indistinguishable from the faulted
kernels — same moment, same firmware, same full Gen5 bandwidth. The difference is only that
on 6.17 something comes along afterwards and takes the card away.

On the 20-22s vs ~5.7s discrepancy — same event, measured at different ends. The
teardown is sequential, one PCI function at a time:

  • one unit: first Unload vfs at t+7.045s on 0000:01:00.0, final cleanup on
    0002:01:00.1 at t+25.370s
  • the other: t+5.733s through t+17.466s

My earlier “~5.7 seconds” was the first function going; the 20-22s in the original report
is consistent with the last one. I no longer think there are two failure paths here.

Two things this rules out, from a new direction. Both Detected insufficient power (27W) and Port module event: Cable unplugged fire four times each on every kernel I
have booted
, including the ones where everything works — on the very machine that was
faulted an hour earlier. Three kernels, and neither message has tracked the fault on any of
them. If you are chasing either one, you are chasing platform noise. And since the -1021
units bind at full Gen5 before being torn down, the Gen1 link speed is a consequence of
the endpoint disappearing, not a cause.

There was never any firmware problem either. Booted on a healthy kernel with the card
present, nvidia-spark-mlnx-firmware-manager ran to completion by itself — found the
device, reported firmware already current at 28.45.4028, had nothing to install, and
disabled its own service. Its “Cable is not connected” message on the faulted kernel was
reporting device absence, not a cable.

Moving to 6.14

sudo apt-get install -y linux-image-6.14.0-1015-nvidia linux-modules-6.14.0-1015-nvidia \
                        linux-modules-nvidia-580-open-6.14.0-1015-nvidia

That third package is not optional. The NVIDIA kernel module is built per kernel
version. Install the kernel without it and you boot into a working ConnectX-7 and a dead
GPU
— nvidia-smi reports “couldn’t communicate with the NVIDIA driver,” which looks
alarming and is simply a missing module. Check which build matches your userspace first;
mine needed the +6 build, and picking the wrong one drags the whole
nvidia-driver-580-open chain forward and can pull a 6.17 kernel back in behind it. Run
apt-get -s install ... first and read what it intends to do.

Three more things worth knowing:

  • Pin the entry explicitly, with the submenu path. GRUB_DEFAULT=0 means “newest,”
    which is how you end up back on 6.17. Per-kernel entries live inside “Advanced options,”
    and GRUB only resolves a nested id written as <submenu id>><entry id> — a bare nested
    id silently matches nothing and you boot the default anyway. Get the ids with
    grep -oP "\$menuentry_id_option .\K[^']+" /boot/grub/grub.cfg as root. Also apt-mark hold the kernel packages, or the next upgrade moves you regardless of GRUB.
  • The GPU needs a power cycle, not just modprobe. After installing the module into a
    running system, mine loaded fine and created all five /dev/nvidia* nodes — and
    nvidia-smi still said “No devices were found,” with
    ksec2PrepareBootCommands: SEC2 secure boot partition timed out in the kernel log. SEC2
    bootstraps once per device power cycle. A reboot cleared it completely. Don’t go hunting
    for a driver or signing problem; check journalctl -k -b | grep NVRM and reboot.
  • Secure Boot can stay enabled. The archive module is signed by Canonical and the shim
    already trusts it. If the install pulls dkms in and you get the “Configuring Secure
    Boot” MOK prompt, you do not need to enroll anything.

If you would rather test before committing, a one-shot boot changes nothing permanently and
reverts by itself:

sudo grub-reboot "gnulinux-advanced-<uuid>>gnulinux-6.14.0-1015-nvidia-advanced-<uuid>"
sudo reboot

@Lausanne — on the cables and the EEPROM

Your follow-up went down the FS-branded-cable and EEPROM-validation route. I think our data
retires that line: our units log Port module event: Cable unplugged four times per boot on
every kernel, including the ones where the card works perfectly and stays on the bus for
hours. On the faulted kernels the card is gone from the PCIe bus entirely — lspci shows
nothing at 15b3:1021 — which is not something a cable or a module EEPROM can cause. A DAC
that fails validation gets you a port that will not link; it does not get you a PCIe endpoint
that unbinds itself and disappears.

If you still have both kernels installed, the one-shot boot below will tell you in ten minutes
whether yours is the same bug.

Questions still open for NVIDIA

  1. Is this a known regression between 6.14.0-1015-nvidia and 6.17.0-1021-nvidia, and is
    a fixed kernel in flight?
  2. Is holding at 6.14.0-1015-nvidia a supported interim position, and what is given up?
  3. Is there a module option or boot parameter that disables the cable-presence/hotplug
    behaviour on the newer kernels so the card stays bound regardless of module state?

Happy to provide full journalctl -b -k -o short-monotonic captures from all four units on
every kernel, faulted and healthy, and to run a specific test on request.

Correction to my earlier post in this thread: I was wrong, and the cable theory in this
thread was right.

Earlier I posted a single-variable kernel comparison arguing that the ConnectX-7 removal was a
regression in the 6.17.x-nvidia kernels, because 6.11 and 6.14 kept the card and 6.17 removed
it. That comparison was real and reproducible. The conclusion I drew from it was still wrong,
and since other people in this thread have been working from it, I want to correct it properly
rather than let it stand.

It was the cable. Specifically, a cable that never asserted module presence, on a system
whose driver correctly responded to that by powering the card off.

What actually happens

cx7-pcie-hotplug powers off the ConnectX-7 and removes it from the PCI bus when it detects no
transceiver in the cage. That is intentional behavior, not a fault. The reason kernel version
correlates so convincingly is that the kernels differ in which driver binds the ACPI device
MTKP0001
, and only one of them acts:

kernel module platform driver behavior
6.11.0-1016 (none) — nothing binds; card stays
6.14.0-1015 drivers/pinctrl/mediatek/mtk-eint-hotplug.ko cx7_hp binds, but exposes no pcie_hotplug/ sysfs; the udev rules in 90-mtk-hotplug.rules match DRIVER=="cx7-pcie-hotplug" and therefore never fire; card stays
6.17.0-1021 / -1029 drivers/platform/arm64/nvidia/mtk-pcie-hotplug.ko cx7-pcie-hotplug binds, arms, evaluates presence, removes the card if no module is detected

So the older kernels were never healthy. They were blind to a condition that was genuinely
present.
Every A/B any of us ran across kernel versions was confounded by that, mine included.

The test that settled it

Same physical machine, same kernel build (6.17.0-1021-nvidia), cold power cycle both times,
cable the only changed variable. The hotplug feature was left fully enabled for the second
run – /etc/nvidia/cx7-hotplug-enabled in place, hotplug_enabled reading 1. No workaround
applied.

                          non-validated cable      QSFP112 cable
MTKP0001 driver           cx7-pcie-hotplug         cx7-pcie-hotplug   (identical)
"Cable plugged" events    0                        4
PCI teardown              t+7.045s -> t+25.37s     none
"Cable removal"           yes                      no
CX7 functions on bus      0                        4
Links                     none                     4 x 200 Gb/s

Driver messages on the working boot:

[6.682521] cx7-pcie-hotplug MTKP0001:00: PCIe hotplug driver initialized successfully
[6.724739] cx7-pcie-hotplug MTKP0001:00: Hotplug enabled

…and nothing after. On the failing boots, teardown began at t+7.045s – about 300 ms after
that same “Hotplug enabled” line. The driver evaluates presence the instant it arms.

Check your own system in about 30 seconds

If your card is disappearing, check presence detection before you touch anything else:

# Has this machine EVER seen a transceiver? (persistent journal)
journalctl -k --no-pager | grep -c 'Cable plugged'

# Which driver owns MTKP0001 on the running kernel?
basename "$(readlink -f /sys/devices/platform/MTKP0001:00/driver)"

If the first number is 0 across the machine’s whole history, the card is not seeing your
cable, and no kernel change will fix that. That was our situation on four systems for two weeks.

Cables

NVIDIA’s validated list for these QSFP112 cages is short:

Vendor Part Length
Amphenol NJAAKK-N911 400 mm
Amphenol NJAAKK0006 0.5 m
Luxshare LMTQF022-SD-R 400 mm

The part we had been using was a Luxshare L56DD002-SD-R – same vendor, similar-looking part
number, different product line, and not on that list. It produced zero presence events on
any node on any boot. A NADDOD Q112-400G-CU0-5 (0.5 m QSFP112, not on the validated list
either) worked on the first insertion and is what all the “working” numbers above came from.

Two mechanical notes, since both cost us time: the pull-tab faces up, and NVIDIA’s own
guidance is that the cable should slide in without force. We spent days on symptoms caused
by inserting a module upside down, which seats roughly 8 mm shallower and never grounds ModPrsL
while still feeling inserted.

Specific things I posted earlier that were wrong

  • “Module presence is electrically absent on both units, so EEPROM/vendor-ID validation cannot
    be the only trigger.”
    This was reasoned from a premise I had wrong. Presence really was
    absent, on every port, on every boot – that was the whole problem, not evidence against the
    cable theory.
  • The kernel-regression framing generally. There is no regression to report. Please don’t
    open cases on that basis.

Still accurate from earlier posts

  • The Detected insufficient power on the PCIe slot (27W) message is benign. It appears
    four times per boot on systems whose card is healthy, linked at 32 GT/s Gen5 and passing
    traffic. It is not a power-delivery indicator, and an OEM telling you it indicates a hardware
    fault will send you toward an unnecessary mainboard or PSU replacement.
  • The Gen1 link speed is a consequence, not a cause. A root port reports 2.5 GT/s once its
    endpoint is gone. Healthy ports train at 32 GT/s Gen5.
  • A global echo 1 > /sys/bus/pci/rescan hard-crashed these machines for us. Note that
    NVIDIA’s own handler does targeted per-root-port rescans instead
    (/sys/bus/pci/devices/0000:00:00.0/rescan), which is the supported path.

Also worth knowing

Each QSFP112 cage is shared by two ConnectX-7 controllers in separate PCIe domains – one
400G-class cable yields two independent 200 Gb/s links. And each domain is PCIe Gen5 x4, so
mlx5_core reports 126.028 Gb/s available PCIe bandwidth per controller. Two 200G ports per
domain means the ports are roughly 3.2x oversubscribed against PCIe; realistic per-node
throughput is about 252 Gb/s, not the 800 Gb/s the port count suggests. Worth knowing before
anyone sizes a switch for this.

An OEM escalation identified the hotplug mechanism for us; the diagnosis above is the result of
testing their explanation. Apologies to anyone who spent time chasing the kernel theory on my
account – the cable theory raised early in this thread was correct, and I should have taken it
more seriously than I did.