drm/nouveau/kms/nv50-: Don't create MSTMs for eDP connectors
authorLyude Paul <lyude@redhat.com>
Fri, 13 Sep 2019 22:03:50 +0000 (18:03 -0400)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 17 Sep 2019 04:50:15 +0000 (14:50 +1000)
On the ThinkPad P71, we have one eDP connector exposed along with 5 DP
connectors, resulting in a total of 11 TMDS encoders. Since the GPU on
this system is also capable of MST, we create an additional 4 fake MST
encoders for each DP port. Unfortunately, we also do this for the eDP
port as well, resulting in:

  1 eDP port: +1 TMDS encoder
              +4 DPMST encoders
  5 DP ports: +2 TMDS encoders
              +4 DPMST encoders
      *5 ports
      == 35 encoders

Which breaks things, since DRM has a hard coded limit of 32 encoders.
So, fix this by not creating MSTMs for any eDP connectors. This brings
us down to 31 encoders, although we can do better.

This fixes driver probing for nouveau on the ThinkPad P71.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/dispnv50/disp.c

index f1dbc7852414a0a88a1ca0d09fd8841bbc8650fa..064a69d161e3d2a855d20de5914a204bb20c0908 100644 (file)
@@ -1599,7 +1599,8 @@ nv50_sor_create(struct drm_connector *connector, struct dcb_output *dcbe)
                        nv_encoder->aux = aux;
                }
 
-               if ((data = nvbios_dp_table(bios, &ver, &hdr, &cnt, &len)) &&
+               if (nv_connector->type != DCB_CONNECTOR_eDP &&
+                   (data = nvbios_dp_table(bios, &ver, &hdr, &cnt, &len)) &&
                    ver >= 0x40 && (nvbios_rd08(bios, data + 0x08) & 0x04)) {
                        ret = nv50_mstm_new(nv_encoder, &nv_connector->aux, 16,
                                            nv_connector->base.base.id,