struct drm_i915_gem_object *obj = intel_fb_obj(fb);
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
struct drm_plane *primary = crtc->primary;
- struct intel_plane *intel_plane = to_intel_plane(primary);
enum pipe pipe = intel_crtc->pipe;
struct intel_unpin_work *work;
struct intel_engine_cs *ring;
if (ret == -EIO) {
out_hang:
- ret = primary->funcs->update_plane(primary, crtc, fb,
- intel_plane->crtc_x,
- intel_plane->crtc_y,
- intel_plane->crtc_h,
- intel_plane->crtc_w,
- intel_plane->src_x,
- intel_plane->src_y,
- intel_plane->src_h,
- intel_plane->src_w);
+ ret = intel_plane_restore(primary);
if (ret == 0 && event) {
spin_lock_irq(&dev->event_lock);
drm_send_vblank_event(dev, pipe, event);
crtc->x = src->x1 >> 16;
crtc->y = src->y1 >> 16;
- intel_plane->crtc_x = state->base.crtc_x;
- intel_plane->crtc_y = state->base.crtc_y;
- intel_plane->crtc_w = state->base.crtc_w;
- intel_plane->crtc_h = state->base.crtc_h;
- intel_plane->src_x = state->base.src_x;
- intel_plane->src_y = state->base.src_y;
- intel_plane->src_w = state->base.src_w;
- intel_plane->src_h = state->base.src_h;
intel_plane->obj = obj;
if (intel_crtc->active) {
crtc->cursor_x = state->base.crtc_x;
crtc->cursor_y = state->base.crtc_y;
- intel_plane->crtc_x = state->base.crtc_x;
- intel_plane->crtc_y = state->base.crtc_y;
- intel_plane->crtc_w = state->base.crtc_w;
- intel_plane->crtc_h = state->base.crtc_h;
- intel_plane->src_x = state->base.src_x;
- intel_plane->src_y = state->base.src_y;
- intel_plane->src_w = state->base.src_w;
- intel_plane->src_h = state->base.src_h;
intel_plane->obj = obj;
if (intel_crtc->cursor_bo == obj)
struct drm_i915_gem_object *obj;
bool can_scale;
int max_downscale;
- int crtc_x, crtc_y;
- unsigned int crtc_w, crtc_h;
- uint32_t src_x, src_y;
- uint32_t src_w, src_h;
unsigned int rotation;
/* Since we need to change the watermarks before/after
unsigned int crtc_w, crtc_h;
uint32_t src_x, src_y, src_w, src_h;
- intel_plane->crtc_x = state->base.crtc_x;
- intel_plane->crtc_y = state->base.crtc_y;
- intel_plane->crtc_w = state->base.crtc_w;
- intel_plane->crtc_h = state->base.crtc_h;
- intel_plane->src_x = state->base.src_x;
- intel_plane->src_y = state->base.src_y;
- intel_plane->src_w = state->base.src_w;
- intel_plane->src_h = state->base.src_h;
-
crtc = crtc ? crtc : plane->crtc;
intel_crtc = to_intel_crtc(crtc);
int intel_plane_restore(struct drm_plane *plane)
{
- struct intel_plane *intel_plane = to_intel_plane(plane);
-
if (!plane->crtc || !plane->fb)
return 0;
return plane->funcs->update_plane(plane, plane->crtc, plane->fb,
- intel_plane->crtc_x, intel_plane->crtc_y,
- intel_plane->crtc_w, intel_plane->crtc_h,
- intel_plane->src_x, intel_plane->src_y,
- intel_plane->src_w, intel_plane->src_h);
+ plane->state->crtc_x, plane->state->crtc_y,
+ plane->state->crtc_w, plane->state->crtc_h,
+ plane->state->src_x, plane->state->src_y,
+ plane->state->src_w, plane->state->src_h);
}
static const struct drm_plane_funcs intel_sprite_plane_funcs = {