drm/nouveau/dp: use alternate lane mask for nvaf
authorBen Skeggs <bskeggs@redhat.com>
Fri, 5 Aug 2011 01:09:21 +0000 (11:09 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 20 Sep 2011 06:11:00 +0000 (16:11 +1000)
Naturally...  Because Macs can't just be the same as everything else
now can they?

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_dp.c

index 55782bd..7eb841c 100644 (file)
@@ -342,16 +342,25 @@ dp_set_training_pattern(struct drm_device *dev, struct dp_state *dp, u8 tp)
        auxch_tx(dev, dp->auxch, 8, DP_TRAINING_PATTERN_SET, &tp, 1);
 }
 
+static const u8 nv50_lane_map[] = { 16, 8, 0, 24 };
+static const u8 nvaf_lane_map[] = { 24, 16, 8, 0 };
+
 static int
 dp_link_train_commit(struct drm_device *dev, struct dp_state *dp)
 {
+       struct drm_nouveau_private *dev_priv = dev->dev_private;
        u32 mask = 0, drv = 0, pre = 0, unk = 0;
-       u8  shifts[4] = { 16, 8, 0, 24 };
        u8  *bios, *last, headerlen;
+       const u8 *shifts;
        int link = dp->link;
        int or = dp->or;
        int i;
 
+       if (dev_priv->chipset != 0xaf)
+               shifts = nv50_lane_map;
+       else
+               shifts = nvaf_lane_map;
+
        bios = nouveau_bios_dp_table(dev, dp->dcb, &headerlen);
        last = bios + headerlen + (bios[4] * 5);
        for (i = 0; i < dp->link_nr; i++) {