瀏覽代碼

drm/nv50-nvc0: activate/update ds channel's framebuffer on modesets

The hw doesn't really appear to be designed to be used the way we have to
use it due to DRI2's design.  This leads us to having to keep the flipped
fb support active at all times.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Ben Skeggs 14 年之前
父節點
當前提交
1d3fac0c2a
共有 1 個文件被更改,包括 9 次插入1 次删除
  1. 9 1
      drivers/gpu/drm/nouveau/nv50_crtc.c

+ 9 - 1
drivers/gpu/drm/nouveau/nv50_crtc.c

@@ -487,6 +487,7 @@ nv50_crtc_prepare(struct drm_crtc *crtc)
 
 	NV_DEBUG_KMS(dev, "index %d\n", nv_crtc->index);
 
+	nv50_display_flip_stop(crtc);
 	drm_vblank_pre_modeset(dev, nv_crtc->index);
 	nv50_crtc_blank(nv_crtc, true);
 }
@@ -502,6 +503,7 @@ nv50_crtc_commit(struct drm_crtc *crtc)
 	nv50_crtc_blank(nv_crtc, false);
 	drm_vblank_post_modeset(dev, nv_crtc->index);
 	nv50_crtc_wait_complete(crtc);
+	nv50_display_flip_next(crtc, crtc->fb, NULL);
 }
 
 static bool
@@ -683,11 +685,16 @@ nv50_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
 {
 	int ret;
 
+	nv50_display_flip_stop(crtc);
 	ret = nv50_crtc_do_mode_set_base(crtc, old_fb, x, y, false);
 	if (ret)
 		return ret;
 
-	return nv50_crtc_wait_complete(crtc);
+	ret = nv50_crtc_wait_complete(crtc);
+	if (ret)
+		return ret;
+
+	return nv50_display_flip_next(crtc, crtc->fb, NULL);
 }
 
 static int
@@ -697,6 +704,7 @@ nv50_crtc_mode_set_base_atomic(struct drm_crtc *crtc,
 {
 	int ret;
 
+	nv50_display_flip_stop(crtc);
 	ret = nv50_crtc_do_mode_set_base(crtc, fb, x, y, true);
 	if (ret)
 		return ret;