소스 검색

drm/udl: properly set active_16 flag in udl_crtc_page_flip(). (v2)

When page flipping, we need to mark the new fb as active and unmark the active
flag for the old fb (if different).

Signed-off-by: Haixia Shi <hshi@chromium.org>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Signed-off-by: Dave Airlie <airlied@gmail.com>
Haixia Shi 10 년 전
부모
커밋
6c3912d69b
1개의 변경된 파일8개의 추가작업 그리고 1개의 파일을 삭제
  1. 8 1
      drivers/gpu/drm/udl/udl_modeset.c

+ 8 - 1
drivers/gpu/drm/udl/udl_modeset.c

@@ -340,11 +340,11 @@ static int udl_crtc_mode_set(struct drm_crtc *crtc,
 
 
 	wrptr = udl_dummy_render(wrptr);
 	wrptr = udl_dummy_render(wrptr);
 
 
-	ufb->active_16 = true;
 	if (old_fb) {
 	if (old_fb) {
 		struct udl_framebuffer *uold_fb = to_udl_fb(old_fb);
 		struct udl_framebuffer *uold_fb = to_udl_fb(old_fb);
 		uold_fb->active_16 = false;
 		uold_fb->active_16 = false;
 	}
 	}
+	ufb->active_16 = true;
 	udl->mode_buf_len = wrptr - buf;
 	udl->mode_buf_len = wrptr - buf;
 
 
 	/* damage all of it */
 	/* damage all of it */
@@ -373,6 +373,13 @@ static int udl_crtc_page_flip(struct drm_crtc *crtc,
 	struct drm_device *dev = crtc->dev;
 	struct drm_device *dev = crtc->dev;
 	unsigned long flags;
 	unsigned long flags;
 
 
+	struct drm_framebuffer *old_fb = crtc->primary->fb;
+	if (old_fb) {
+		struct udl_framebuffer *uold_fb = to_udl_fb(old_fb);
+		uold_fb->active_16 = false;
+	}
+	ufb->active_16 = true;
+
 	udl_handle_damage(ufb, 0, 0, fb->width, fb->height);
 	udl_handle_damage(ufb, 0, 0, fb->width, fb->height);
 
 
 	spin_lock_irqsave(&dev->event_lock, flags);
 	spin_lock_irqsave(&dev->event_lock, flags);