I have found a bug in the Nvidia drivers for both Windows and Linux (Ubuntu 24.04). My laptop is a Lenovo Legion 7 16ACHg6 (with Geforce RTX 3070) connected to 3x Dell 2209WA DVI-D 1680x1050 monitors via a HP G5 USB-C dock. Under both Windows and Linux the external monitors blank continuously when using the Nvidia driver. However, under Ubuntu running the open source Nouveau driver, the external monitors work perfectly! This was a bit of a surprise. I compared the xrandr modelines between Nvidia and Nouveau - and they are exactly the same - the resolution and signal timings are identical. So, it appears there’s something broken in the actual Nvidia driver, rather than it just selecting some different resolution or timing.
Perhaps the issue might be something to do with DSC compression/G-Sync, however, this the blanking is not due to a bandwidth limitation, as the displays still glitch and blank under Windows even if I set all 3 monitors to only 800x600@60 resolution in the Nvidia control panel. It also blanks if I have only two displays active at 1680x1050@60, which is definitely below any DP alt mode bandwidth limits that the hardware has.
I’ve also tested a Dell WD19 dock with the Nvidia drivers - and that works ok. So it appears there is some bug in the Nvidia driver that affects both Windows and Linux, but only with particular USB-C docks.
On Linux I have tested the 550 driver, and on Windows the 566.36 driver. Both fail. But Nouveau works.
nvidia-bug-report.log.gz (509.6 KB) from laptop with the HP G5 dock connected
I tested the 560.35.03 Nvidia Linux driver - the one with the new open source kernel module. It’s different - there are no blackouts but only two monitors can be active at a time.
I also tried testing a DP 1.4 hub plugged in to one of the DisplayPort outputs on the HP Z5 dock - and with this, all 3 external monitors can be activated and work correctly.
So, it looks like this is some kind of bandwidth issue with the Nvidia driver. Nvidia control panel shows 2 lanes @ 8.10Gbps. My guess is that, under both Windows and Linux, the nVidia driver is somehow bandwidth limited (though it shouldn’t be) to something like DisplayPort 1.2 HBR2, and isn’t enabling DSC with the HP G5 dock when using passive adapters. This means three monitors would exceed the 8.10Gbps limit. The open source Nouveau driver might be enabling DisplayPort 1.4 or DSC, which would explain why it can do three monitors simultaneously (? - I’d like to know if this is correct - I can’t think of another explanation for Nouveau working while the Nvidia driver fails, given that the modelines are identical so bandwidth should be the same).
According to the Lenovo Legion 7 16ACHg6 specs, the USB-C port is “3.2 Gen 2 (support data transfer and DisplayPort™ 1.4)” and “supports up to 5120x3200@60Hz”.
According to the HP G5 dock specs, the dock supports “3x 4k @ 60 Hz” with DisplayPort 1.4 and DSC, “3xQHD@60Hz” for DisplayPort 1.2/1.3, and “3xFHD@60Hz” for DisplayPort 1.2. So
this should really all just work - the Nvidia drivers shouldn’t be hitting bandwidth limits and blacking out the monitors with only a 3x1680x1050@60Hz configuration.
I also tested the HP G5 dock with two other laptops - one Intel graphics, the other AMD, and both worked with all three monitors ok. The only thing that fails is the laptop with Nvidia GPU with the Nvidia driver.
There are several threads about this issue on the HP support forums, and Reddit, e.g. this 17-page thread: External monitors often going off and on, so this is a reasonably widespread issue.
HP dock video resolution specs
The laptop when connected to the dock will be in “Multi-Function (default)(DP x2)” mode. Both RTX 3070 and HP G5 dock are DP 1.4 capable and should therefore easily have enough bandwidth for triple 1680x1050. In fact, as documented by HP, triple 1920x1080 should be possible even without DSC. With DSC, 4k+2k+2k should be possible.
My current hypothesis is that the nvidia driver is incorrectly configuring the USB-C DP alt mode video to DP 1.2, and hence hitting the DP 1.2 usable bandwidth limit (around 8,640 Mb/s), whereas the Nouveau driver does not hit this limit, on exactly the same hardware and modelines, so it must be enabling DP 1.4 output. The nvidia driver works with a DP 1.4 MST hub connected to one of the DisplayPort outputs of the G5 dock, so presumably when it sees a DP 1.4 device (1.4 MST hub) it configures DP 1.4 output, but when it sees 3x DP 1.2 devices (individual monitors), it configures DP 1.2 output, and fails.
Is there any way to verify this hypothesis by checking the currently active DisplayPort version (1.2/1.4) configured by the Nvidia driver?
The bug does not occur when using active DP-DVI adaptors (StarTech DP2DVIS) on the two G5 DisplayPort output ports. I have read elsewhere that the G5 dock can only enable DSC when using active DP outputs (not passive cables), and also that the HDMI output is hardwired to a passive HDMI converter and will not use DSC. It may be that, when using two passive DisplayPort outputs and the passive HDMI together, and hence lacking the ability to turn on DSC on any output, the Nvidia driver downgrades the laptop->dock link to DisplayPort 1.2, which causes blackouts due to the lower bandwidth limits of DP 1.2. For some reason the same does not happen with a Dell WD19 dock - maybe it implements active DP conversion internally, so the Nvidia driver keeps the link to the laptop at DP 1.4 speeds.