summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2011-08-05 05:09:21 +0400
committerBen Skeggs <bskeggs@redhat.com>2011-09-20 10:11:00 +0400
commit1b45dbe0bc5af68b87d4a535c520eec542c45447 (patch)
tree0eb1a56c87ea4b838ba635302a31e4d957744eb4 /drivers/gpu/drm/nouveau
parent856ed888754e98b5933878f56b9c540b68dab1d6 (diff)
downloadlinux-1b45dbe0bc5af68b87d4a535c520eec542c45447.tar.xz
drm/nouveau/dp: use alternate lane mask for nvaf
Naturally... Because Macs can't just be the same as everything else now can they? Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_dp.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c
index 55782bd7df0f..7eb841c8ddd9 100644
--- a/drivers/gpu/drm/nouveau/nouveau_dp.c
+++ b/drivers/gpu/drm/nouveau/nouveau_dp.c
@@ -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++) {