Replies: 5 comments 1 reply
|
I am having the same issue with a 5070ti Laptop GPU and an external RTX 3090 |
|
Third independent report of this bug — RTX 5080 Laptop stuck at 80 W of a rated 175 W whenever an external NVIDIA GPU is attached. Same signature as @zletpm's 5090 and @dsull111's 5070 Ti + RTX 3090. I disassembled the shipped
Everything below is measured, with the eGPU enabled/disabled as the control. System
Rated TGP for this model is 175 W (vendor spec: CPU 125 W + GPU 175 W, liquid-cooling module). Measurements
The limit flips immediately, no reboot required. Under compute load (fp16 matmul 8192×8192, PyTorch, 100 % utilisation):
The decisive controlWith the enclosure still connected and 12 of its devices enumerated normally (Thunderbolt router, ASMedia controllers, LED controller), disabling only the GPU raises the limit 80 → 175 W instantly. Nothing about power delivery, cabling or the enclosure changes between those two measurements. It is the presence of a second NVIDIA GPU, not the eGPU chassis. Root cause, part 1 — firmware provides no NPCF↔GPU associationThe ACPI device sits directly under The DSDT confirms it: AML references the fully-qualified path This matches the placement described in #1162. So the firmware expresses no association, and the driver must choose a GPU at runtime. Root cause, part 2 — the driver never derives one eitherDisassembly of the shipped The device-arrival handler is at
That is the entire discriminator. Both GPUs run under Suggested fixEvery property needed to tell the two apart is already available on the same PDO, at the exact call site where NPCF queries the service name — no extra enumeration, no new interface:
One additional property query in that handler, preferring the non-removable GPU closest to the root complex, would fix this class of bug on every affected machine. As a safety net, a GPU reporting Not a recent regressionWindows had kept five
Identical across 16 months of NPCF builds. Only the NPCF software device was rebound; the display driver was untouched and the original version restored afterwards. Tested and does not helpEach measured with the eGPU enabled, each reverted afterwards:
The binding-order line is the informative one: NPCF re-evaluates and reassigns the budget the moment the eGPU is enumerated, even though it had granted the full budget to the internal GPU a second earlier. That rules out the whole class of "let NPCF bind first, then attach the eGPU" workarounds. The last line is worth noting too: both GPUs were successfully brought onto a single modified package and the same install section ( MUX is already discrete: the internal panel is attached to the 5080 ( Summary
Happy to run additional diagnostics, provide full ACPI dumps or |
Reproducible Windows root-cause proof: an eGPU becomes the NPCF Dynamic Boost candidate instead of the internal laptop GPUI can reproduce and reversibly control the 95 W / 175 W state without modifying Test system
Both NVIDIA display devices expose: Baseline symptomWith only the internal GPU selected by NPCF, its reported ceiling is 175 W. After nvidia-smi -i 00000000:02:00.0 -q -d POWERMinimal reversible A/B/A procedureThis must run as
The essential mutation/reinitialization sequence is: # Run as SYSTEM. Hardware-specific values shown here.
$egpuInstance = 'PCI\VEN_10DE&DEV_2C02&SUBSYS_89DE1043&REV_A1\BE495C8DD72DB04800'
$egpuKey = "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\$egpuInstance"
$npcfInstance = 'ACPI\NVDA0820\NPCF'
$original = Get-ItemPropertyValue -LiteralPath $egpuKey -Name Service
if ($original -ne 'nvlddmkm') { throw "Unexpected original service: $original" }
try {
Set-ItemProperty -LiteralPath $egpuKey -Name Service -Value 'nvlddmkm_npcf_masked'
# Gate: independently read DEVPKEY_Device_Service through CfgMgr32 and
# SetupAPI here and continue only if both return nvlddmkm_npcf_masked.
# Also verify the exact eGPU by PCI BDF/UUID before touching NPCF.
pnputil.exe /restart-device $npcfInstance
Start-Sleep -Seconds 3
nvidia-smi -i 00000000:02:00.0 -q -d POWER
# Observed Current Power Limit: 175.00 W
}
finally {
Set-ItemProperty -LiteralPath $egpuKey -Name Service -Value $original
}
# Leave NPCF running: internal GPU remains at 175 W while the eGPU service is
# already restored to nvlddmkm and the eGPU remains operational.Important detail: no attempt is made to set the property through Exact observed A/B/A resultReapplying B restores 175 W. A real Windows reboot also reproduced the sequence: Workload validationThe power-limit readback also produces the expected application-level change with
The restored decode values are again within 0.7% / 0.4% of the public RTX 5090 InterpretationThe A/B/A result strongly indicates that NPCF's candidate selection includes the Recovery used during testingBefore changing the value, the original service, instance ID, PCI BDF, and UUID # Run as SYSTEM.
Set-ItemProperty -LiteralPath $egpuKey -Name Service -Value 'nvlddmkm'
pnputil.exe /restart-device $egpuInstance
Start-Sleep -Seconds 3
pnputil.exe /restart-device $npcfInstanceThe complete gated reproducer performs registry + CfgMgr32 + SetupAPI readback, |
AddendumAffected generations (prior reports)This selection bug predates Blackwell. Same symptom signature
If you run an Ada/Ampere laptop + NVIDIA eGPU and can reproduce the Not this bug: if your dGPU also gets capped by a plain USB-C PD Persistence status
Risk note (masking window)If Windows forces a re-enumeration of the eGPU during the brief |
|
Confirmed on a different generation pairing — the masking procedure works here too, and it closes the loop with the static analysis I posted on 10 Aug. Why this is an independent data point: @IamLumae's system is Blackwell laptop + Blackwell eGPU over Thunderbolt 5. Mine is Blackwell laptop + Ampere eGPU over Thunderbolt 3, and the System
The two power readings
After restoring the Under real load, not just the reported ceilingSame workload before and after (LLM inference,
The memory clock is the part that matters most for my workload — inference is bandwidth-bound, and 9001 → 15001 MHz is a 1.67× step. No thermal component in either state: liquid cooling holds 52 °C, This matches the disassembly exactlyIn my 10 Aug comment I traced the shipped @IamLumae's workaround masks precisely that comparison, for exactly the window in which the table is built. So the mechanism is now confirmed from both ends — statically from the binary, and dynamically by reversible A/B/A. I had the discriminator and did not think to temporarily change what it sees; credit where it is due. Not tested here either
I kept the Thanks for chasing this down — three years is a long time, and the fix is small enough that the suggested discriminators ( |
Uh oh!
There was an error while loading. Please reload this page.
RTX 5090 Laptop stuck at 95W when eGPU (RTX 5080) is connected — NPCF Dynamic Boost bug
System:
Problem: When the RTX 5080 eGPU is connected, NPCF (nvpcf.sys) assigns Dynamic Boost to the external desktop GPU instead of the internal laptop GPU. This locks the RTX 5090 Laptop at its base TDP of 95W instead of 175W.
Testing performed:
Condition | 5090 enforced power limit -- | -- eGPU disabled in Device Manager | 175W (correct) eGPU enabled | 95W (incorrect) eGPU enabled + NPCF disabled | 95W (no Dynamic Boost at all) eGPU enabled + NPCF cycled (disable/re-enable) | 95W eGPU enabled + MSI Center profile toggled (Extreme/Balanced/ECO via WMI) | 95W nvidia-smi -pl 175 (admin) | "Changing power management limit is not supported" NVML nvmlDeviceSetPowerManagementLimit | "Not Supported"Conclusion: NPCF is the sole source of Dynamic Boost for the laptop GPU. When two NVIDIA GPUs are present, it targets the wrong one. The desktop eGPU has its own 360W power supply and does not need Dynamic Boost.
Expected behavior: nvpcf.sys should identify the internal laptop GPU by:
and assign Dynamic Boost exclusively to the internal GPU.
Workaround: The only working workaround is disabling the eGPU in Device Manager, which defeats the purpose of having one.
This issue also affects RTX 40-series laptops — see egpu.io thread and GeForce Forums thread.
RTX 5090 Laptop stuck at 95W when eGPU (RTX 5080) is connected — NPCF Dynamic Boost bugSystem:
MSI laptop, Intel Core Ultra 9 275HX
Internal GPU: RTX 5090 Laptop GPU (24GB) — PCI bus 01:00.0, SUBSYS 14741462
External GPU: RTX 5080 (Thunderbolt eGPU) — PCI bus 54:00.0, SUBSYS F3221569
Driver: 32.0.15.9531 (nvpcf.sys 2026-01-13)
Windows 11 Pro 26200
MSI Center: Extreme Performance mode, Discrete Graphics Mode
Problem:
When the RTX 5080 eGPU is connected, NPCF (nvpcf.sys) assigns Dynamic Boost to the external desktop GPU instead of the internal laptop GPU. This locks the RTX 5090 Laptop at its base TDP of 95W instead of 175W.
Testing performed:
Condition 5090 enforced power limit
eGPU disabled in Device Manager 175W (correct)
eGPU enabled 95W (incorrect)
eGPU enabled + NPCF disabled 95W (no Dynamic Boost at all)
eGPU enabled + NPCF cycled (disable/re-enable) 95W
eGPU enabled + MSI Center profile toggled (Extreme/Balanced/ECO via WMI) 95W
nvidia-smi -pl 175 (admin) "Changing power management limit is not supported"
NVML nvmlDeviceSetPowerManagementLimit "Not Supported"
Conclusion:
NPCF is the sole source of Dynamic Boost for the laptop GPU. When two NVIDIA GPUs are present, it targets the wrong one. The desktop eGPU has its own 360W power supply and does not need Dynamic Boost.
Expected behavior:
nvpcf.sys should identify the internal laptop GPU by:
PCI bus topology (01:00.0 = internal, 54:00.0 = Thunderbolt)
Subsystem vendor ID (1462 = MSI OEM = internal GPU)
Or ACPI _DSM presence
and assign Dynamic Boost exclusively to the internal GPU.
Workaround:
The only working workaround is disabling the eGPU in Device Manager, which defeats the purpose of having one.
This issue also affects RTX 40-series laptops — see egpu.io thread and GeForce Forums thread.
All reactions