Commit 4606eeaf authored by Deepak Rawat's avatar Deepak Rawat Committed by Thomas Hellstrom

drm/vmwgfx: Use the new interface for STDU plane update

With new interface to do plane update on STDU available, use that
instead of old kms_dirty.

v2: Use fence from new resource validation.
Signed-off-by: default avatarDeepak Rawat <drawat@vmware.com>
Reviewed-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
parent bc7be607
...@@ -1673,6 +1673,7 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane, ...@@ -1673,6 +1673,7 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane,
struct drm_crtc *crtc = plane->state->crtc; struct drm_crtc *crtc = plane->state->crtc;
struct vmw_screen_target_display_unit *stdu; struct vmw_screen_target_display_unit *stdu;
struct drm_pending_vblank_event *event; struct drm_pending_vblank_event *event;
struct vmw_fence_obj *fence = NULL;
struct vmw_private *dev_priv; struct vmw_private *dev_priv;
int ret; int ret;
...@@ -1683,7 +1684,6 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane, ...@@ -1683,7 +1684,6 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane,
if (crtc && plane->state->fb) { if (crtc && plane->state->fb) {
struct vmw_framebuffer *vfb = struct vmw_framebuffer *vfb =
vmw_framebuffer_to_vfb(plane->state->fb); vmw_framebuffer_to_vfb(plane->state->fb);
struct drm_vmw_rect vclips;
stdu = vmw_crtc_to_stdu(crtc); stdu = vmw_crtc_to_stdu(crtc);
dev_priv = vmw_priv(crtc->dev); dev_priv = vmw_priv(crtc->dev);
...@@ -1691,23 +1691,17 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane, ...@@ -1691,23 +1691,17 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane,
stdu->content_fb_type = vps->content_fb_type; stdu->content_fb_type = vps->content_fb_type;
stdu->cpp = vps->cpp; stdu->cpp = vps->cpp;
vclips.x = crtc->x;
vclips.y = crtc->y;
vclips.w = crtc->mode.hdisplay;
vclips.h = crtc->mode.vdisplay;
ret = vmw_stdu_bind_st(dev_priv, stdu, &stdu->display_srf->res); ret = vmw_stdu_bind_st(dev_priv, stdu, &stdu->display_srf->res);
if (ret) if (ret)
DRM_ERROR("Failed to bind surface to STDU.\n"); DRM_ERROR("Failed to bind surface to STDU.\n");
if (vfb->bo) if (vfb->bo)
ret = vmw_kms_stdu_dma(dev_priv, NULL, vfb, NULL, NULL, ret = vmw_stdu_plane_update_bo(dev_priv, plane,
&vclips, 1, 1, true, false, old_state, vfb, &fence);
crtc);
else else
ret = vmw_kms_stdu_surface_dirty(dev_priv, vfb, NULL, ret = vmw_stdu_plane_update_surface(dev_priv, plane,
&vclips, NULL, 0, 0, old_state, vfb,
1, 1, NULL, crtc); &fence);
if (ret) if (ret)
DRM_ERROR("Failed to update STDU.\n"); DRM_ERROR("Failed to update STDU.\n");
} else { } else {
...@@ -1740,31 +1734,23 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane, ...@@ -1740,31 +1734,23 @@ vmw_stdu_primary_plane_atomic_update(struct drm_plane *plane,
* In case of failure and other cases, vblank event will be sent in * In case of failure and other cases, vblank event will be sent in
* vmw_du_crtc_atomic_flush. * vmw_du_crtc_atomic_flush.
*/ */
if (event && (ret == 0)) { if (event && fence) {
struct vmw_fence_obj *fence = NULL;
struct drm_file *file_priv = event->base.file_priv; struct drm_file *file_priv = event->base.file_priv;
vmw_execbuf_fence_commands(NULL, dev_priv, &fence, NULL); ret = vmw_event_fence_action_queue(file_priv,
fence,
/* &event->base,
* If fence is NULL, then already sync. &event->event.vbl.tv_sec,
*/ &event->event.vbl.tv_usec,
if (fence) { true);
ret = vmw_event_fence_action_queue( if (ret)
file_priv, fence, &event->base, DRM_ERROR("Failed to queue event on fence.\n");
&event->event.vbl.tv_sec, else
&event->event.vbl.tv_usec, crtc->state->event = NULL;
true);
if (ret)
DRM_ERROR("Failed to queue event on fence.\n");
else
crtc->state->event = NULL;
vmw_fence_obj_unreference(&fence);
}
} else {
(void) vmw_fifo_flush(dev_priv, false);
} }
if (fence)
vmw_fence_obj_unreference(&fence);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment