[Nouveau] DP MST with GK107 and lenovo ultra dock

Jasmin jasmin.pm at protonmail.com
Mon Jul 27 12:10:50 UTC 2020


Hi,

meanwhile I figured out why displayport MST did not work with nouveau on GK107 with Lenovo W540 and Lenovo Ultra Dock.

Nouveau does not try to establish MST, if the connector type is recognized as eDP (embedded displayport), which does not support MST.

The connector type is recognized by reading DCB connector table from the VBIOS.
http://download.nvidia.com/open-gpu-doc/DCB/
In this case, the DCB connector table header seemed to contain "version 0" (zero in the version field), so it was not used and nouveau tried to determine the connectors automatically, which wrongly resulted in eDP instead of DP.

But the VBIOS itself did _not_ contain this "version 0". Instead, this was a result produced by nouveau itself when parsing the DCB beforehand:
nouveau_bios.c:dcb_fake_connectors(struct nvbios *bios)

>        /* heuristic: if we ever get a non-zero connector field, assume
>         * that all the indices are valid and we don't need fake them.
>         *

At least if the laptop's dedicated nvidia GPU is configured (in UEFI) to supply the docking station with displayport-signals (advanced mode), the connector field for both DCB-entries is "zero" – an it is valid/correct, because there is no other connector than this "zero" one.

So the heuristical determination of valid connector data fails in this case, and it "disables" the dcb-connector table inadequately by writing version 0 into the db connector table header.

So I managed to fix this by inserting the following at the beginning of dcb_fake_connectors:

+        // has 2 DCB entries with connector index zero (correct)
+        if(nv_match_device(bios->dev, 0x0ff6, 0x17aa, 0x221a))
+                return;

IMHO it makes sense to introduce a module parameter: "alwaysTrustDCBConntab", which could be set to "true" for such cases.

Best
Jasmin


More information about the Nouveau mailing list