Fan issues in Gigabyte RTX 4090 on Linux but not Windows

Broken multi-fan control on GeForce RTX 4090 (Gigabyte, 3-fan): fan:1 never driven, and an unenumerated 3rd fan runs at max and never stops.

Summary

On a 3-fan Gigabyte RTX 4090 (AD102), the Linux driver enumerates only 2 fans and mismanages the card in two distinct ways. Both work correctly on Windows with the same board/VBIOS, so this is a Linux driver / GSP-RM fan-control defect, not hardware.

  1. Middle fan is never driven. Enumerated as fan:1; GPUTargetFanSpeed assignments are accepted, but GPUCurrentFanSpeed stays 0 and it never spins, even under load at 90 Β°C.
  2. A third physical fan is not enumerated and is mishandled by GSP’s automatic policy: driven to 100% on spin-up, then neglected (left at 100%) on spin-down, so it stays at max indefinitely. Only a full power cycle (S3/shutdown) resets it, a warm reboot does not.

Environment

β”‚ GPU             β”‚ GeForce RTX 4090 (AD102), 10de:2684 rev a1, GPU part 2684-301-A1
β”‚ Card            β”‚ Gigabyte 3-fan RTX 4090
β”‚ VBIOS           β”‚ 95.02.3C.80.B0
β”‚ Driver          β”‚ 610.43.02 (proprietary, dkms)
β”‚ GSP             β”‚ enabled (GPU Firmware: 610.43.02)
β”‚ Kernel          β”‚ 6.8.0-124-generic
β”‚ Distro          β”‚ Ubuntu 24.04.4 LTS
β”‚ Also reproduces β”‚ driver 400.x / 500.x (565/575/590) β€” not a recent regression     

Bug Report Log

nvidia-bug-report.log.gz (653.1 KB)

nvidia-settings -q fans
2 Fans on mpc:1
[0] mpc:1[fan:0] (Fan 0)
  Has the following name:
    FAN-0
[1] mpc:1[fan:1] (Fan 1)
  Has the following name:
    FAN-1

I was able to observe this behavior ever since version 450, and on all drivers up-to 610.

Observed behavior

nvidia-settings -q fans β†’ 2 Fans though the card has 3.

  • fan:0 (rightmost): works (target honored, current tracks).
  • fan:1 (middle): enumerated but dead: targets accepted, GPUCurrentFanSpeed stays 0, never spins at 30/50/100 or at 90Β°C.
  • Third fan (leftmost, unenumerated): latched at 100% by auto policy on spin-up, never spun down; only a power cycle resets it (warm reboot does not).

Investigated / ruled out

  • Manual control (GPUFanControlState=1) reaches only fan:0, but can’t drive fan:1 or the third fan.
  • Disabling GSP (NVreg_EnableGpuFirmware=0) leaves third fan still stuck, and middle still not driven (worse).
  • No IΒ²C fan MCU on GPU buses (only monitor EDID).
  • BAR0 inspection (THERM 0x20000, PMGR 0x10000, GC6/SCI 0x118000): only measurement registers track the third/middle fans (tach 0x2160c, SCI 0x118ac8), with no host-writable duty register, and with PWM drive being GSP-internal. Writing measurement/status regs doesn’t move the fan.
  • VBIOS: fan/cooler tables present; GPIO map shows a single FAN_PWM (GPIO 16) + single FAN_TACH (GPIO 13).

Comparison to Windows

Same board/VBIOS: Windows (driver + NVAPI clients like Afterburner) drives all three fans correctly. The divergence is in how the Linux driver/GSP-RM parses the fan cooler table and sets up per-fan PWM/tach/GPIO mappings at init, not in the set-speed path.

Impact

Middle fan never runs on Linux causing ineffective cooling due to bad airflow distribution; third fan runs at 100% on an idle desktop until a power cycle (noise, wear, power).

Reproduction

  1. Boot Linux, driver 610.43.02, 3-fan Gigabyte RTX 4090.
  2. nvidia-settings -q fans β†’ only 2 fans.
  3. nvidia-settings -a β€˜[gpu:0]/GPUFanControlState=1’ -a β€˜[fan:1]/GPUTargetFanSpeed=100’ β†’ fan:1 current stays 0; middle fan doesn’t spin.
  4. Load GPU until fans spin, return to idle β†’ third fan stays at 100%; only suspend/shutdown resets it.

I hope nvidia can fix the fan cooler/thermal table parsing and per-fan PWM/tach/GPIO mapping for this 3-fan board so fan:1 is actually driven and all fans are in both the spin-up and spin-down paths, or expose a way for me to handle it. If a registry key (RmFan2XOverride, RMDisableThermOnlyGpio) can force correct enumeration/mapping in the interim, please advise.

1 Like