提交 098ebd6b 编写于 作者: V Ville Syrjälä 提交者: Daniel Vetter

drm/i915: Save user requested plane coordinates only on success

If the setplane operation fails, we shouldn't save the user's requested
plane coordinates. Since we adjust the coordinates during the clipping
process, make a copy of the originals, and once the operation has
succeeded save them for later reuse when the plane gets re-enabled.
Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 2afd9efd
...@@ -658,15 +658,20 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, ...@@ -658,15 +658,20 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
.x2 = intel_crtc->active ? intel_crtc->config.pipe_src_w : 0, .x2 = intel_crtc->active ? intel_crtc->config.pipe_src_w : 0,
.y2 = intel_crtc->active ? intel_crtc->config.pipe_src_h : 0, .y2 = intel_crtc->active ? intel_crtc->config.pipe_src_h : 0,
}; };
const struct {
intel_plane->crtc_x = crtc_x; int crtc_x, crtc_y;
intel_plane->crtc_y = crtc_y; unsigned int crtc_w, crtc_h;
intel_plane->crtc_w = crtc_w; uint32_t src_x, src_y, src_w, src_h;
intel_plane->crtc_h = crtc_h; } orig = {
intel_plane->src_x = src_x; .crtc_x = crtc_x,
intel_plane->src_y = src_y; .crtc_y = crtc_y,
intel_plane->src_w = src_w; .crtc_w = crtc_w,
intel_plane->src_h = src_h; .crtc_h = crtc_h,
.src_x = src_x,
.src_y = src_y,
.src_w = src_w,
.src_h = src_h,
};
/* Don't modify another pipe's plane */ /* Don't modify another pipe's plane */
if (intel_plane->pipe != intel_crtc->pipe) { if (intel_plane->pipe != intel_crtc->pipe) {
...@@ -818,6 +823,14 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, ...@@ -818,6 +823,14 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
if (ret) if (ret)
return ret; return ret;
intel_plane->crtc_x = orig.crtc_x;
intel_plane->crtc_y = orig.crtc_y;
intel_plane->crtc_w = orig.crtc_w;
intel_plane->crtc_h = orig.crtc_h;
intel_plane->src_x = orig.src_x;
intel_plane->src_y = orig.src_y;
intel_plane->src_w = orig.src_w;
intel_plane->src_h = orig.src_h;
intel_plane->obj = obj; intel_plane->obj = obj;
if (intel_crtc->active) { if (intel_crtc->active) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册