|
@@ -11584,6 +11584,21 @@ intel_primary_plane_setplane(struct drm_plane *plane, struct drm_crtc *crtc,
|
|
|
.x2 = intel_crtc->active ? intel_crtc->config.pipe_src_w : 0,
|
|
|
.y2 = intel_crtc->active ? intel_crtc->config.pipe_src_h : 0,
|
|
|
};
|
|
|
+ const struct {
|
|
|
+ int crtc_x, crtc_y;
|
|
|
+ unsigned int crtc_w, crtc_h;
|
|
|
+ uint32_t src_x, src_y, src_w, src_h;
|
|
|
+ } orig = {
|
|
|
+ .crtc_x = crtc_x,
|
|
|
+ .crtc_y = crtc_y,
|
|
|
+ .crtc_w = crtc_w,
|
|
|
+ .crtc_h = crtc_h,
|
|
|
+ .src_x = src_x,
|
|
|
+ .src_y = src_y,
|
|
|
+ .src_w = src_w,
|
|
|
+ .src_h = src_h,
|
|
|
+ };
|
|
|
+ struct intel_plane *intel_plane = to_intel_plane(plane);
|
|
|
bool visible;
|
|
|
int ret;
|
|
|
|
|
@@ -11658,15 +11673,24 @@ intel_primary_plane_setplane(struct drm_plane *plane, struct drm_crtc *crtc,
|
|
|
|
|
|
mutex_unlock(&dev->struct_mutex);
|
|
|
|
|
|
- return 0;
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ ret = intel_pipe_set_base(crtc, src.x1, src.y1, fb);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
|
|
|
- ret = intel_pipe_set_base(crtc, src.x1, src.y1, fb);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
+ if (!intel_crtc->primary_enabled)
|
|
|
+ intel_enable_primary_hw_plane(plane, crtc);
|
|
|
+ }
|
|
|
|
|
|
- if (!intel_crtc->primary_enabled)
|
|
|
- intel_enable_primary_hw_plane(plane, crtc);
|
|
|
+ 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;
|
|
|
|
|
|
return 0;
|
|
|
}
|