[NVC3] Passive DP to HDMI adapter cannot use pixel clocks greater than 165 MHz
Submitted by Andrew Boettcher
Assigned to Nouveau Project
Description
Created attachment 116968
dmesg of full boot + setting external display to mode with 297 MHz clock
Starting from stock linux 4.1.0 source, libdrm 2.4.61, xf86-video-nouveau-1.0.11, xorg-server 1.17.1. The hardware is a Quatro 2000M in a Lenovo W520 laptop setup as an offload sink and output source for an integrated intel display. The external display is a Seiki SE39UY04 connected by HDMI to display port passive adapter.
We attempted to use a 3840x2160@30 mode which has a pixel clock of 297 MHz. This is known to work fine in both the nvidia blob and the windows driver, so the hardware has no issues driving this clock in a single TDMS link.
First the connector detection code will reject this mode from the default list because the maximum TDMS speed is based on pre-HDMI 1.3 spec. Second even if that is worked around the mode is higher than 165 MHz, so the display port connection will enter dual link mode, which must be stopped in this case.
We attempted to allow the mode to pass through to see if it might just work. There were two changes:
drivers/gpu/drm/nouveau/nouvau_connector.c modified get_tmds_link_bandwidth() to return 340000 (HDMI 1.3 spec)
drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c commented out line 1547-1548 to not use dual link mode.
The result is a failure. The screen flickers and does not show anything. A full dmesg log with nouveau.debug=trace is attached.
I am a C programmer but I have no familiarity with any part of the nouveau or DRM parts of the world. Very willing to help, just don't know where to proceed.
Attachment 116968, "dmesg of full boot + setting external display to mode with 297 MHz clock":
dmesg