drm/nouveau/dp: preserve non-pattern bits in DP_TRAINING_PATTERN_SET
authorBen Skeggs <bskeggs@redhat.com>
Fri, 5 Aug 2011 05:56:53 +0000 (15:56 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 20 Sep 2011 06:11:09 +0000 (16:11 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nouveau_dp.c

index 7eb841c8ddd9aa6e5dc13da94f9e8cf5c4c99b8b..d3552e76664737ec33333afc94d4119b49870a9b 100644 (file)
@@ -337,9 +337,16 @@ dp_set_link_config(struct drm_device *dev, struct dp_state *dp)
 static void
 dp_set_training_pattern(struct drm_device *dev, struct dp_state *dp, u8 tp)
 {
+       u8 sink_tp;
+
        NV_DEBUG_KMS(dev, "training pattern %d\n", tp);
+
        nv_mask(dev, NV50_SOR_DP_CTRL(dp->or, dp->link), 0x0f000000, tp << 24);
-       auxch_tx(dev, dp->auxch, 8, DP_TRAINING_PATTERN_SET, &tp, 1);
+
+       auxch_tx(dev, dp->auxch, 9, DP_TRAINING_PATTERN_SET, &sink_tp, 1);
+       sink_tp &= ~DP_TRAINING_PATTERN_MASK;
+       sink_tp |= tp;
+       auxch_tx(dev, dp->auxch, 8, DP_TRAINING_PATTERN_SET, &sink_tp, 1);
 }
 
 static const u8 nv50_lane_map[] = { 16, 8, 0, 24 };