OSDN Git Service

drm/i915: Use drm_mode_get_hv_timing() to populate plane clip rectangle
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 23 Nov 2017 19:04:49 +0000 (21:04 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 23 Jan 2018 15:41:29 +0000 (17:41 +0200)
Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
No functional changes since pipe_src_w/h are already filled via
drm_mode_get_hv_timing().

Once everyone agrees on this we can move the clip handling into
drm_atomic_helper_check_plane_state().

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171123190502.28449-3-ville.syrjala@linux.intel.com
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/i915/intel_atomic_plane.c
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_drv.h
drivers/gpu/drm/i915/intel_sprite.c

index 8e6dc15..c7984a8 100644 (file)
@@ -129,14 +129,6 @@ int intel_plane_atomic_check_with_state(const struct intel_crtc_state *old_crtc_
        if (!intel_state->base.crtc && !old_plane_state->base.crtc)
                return 0;
 
-       /* Clip all planes to CRTC size, or 0x0 if CRTC is disabled */
-       intel_state->clip.x1 = 0;
-       intel_state->clip.y1 = 0;
-       intel_state->clip.x2 =
-               crtc_state->base.enable ? crtc_state->pipe_src_w : 0;
-       intel_state->clip.y2 =
-               crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
-
        if (state->fb && drm_rotation_90_or_270(state->rotation)) {
                struct drm_format_name_buf format_name;
 
index dc84a3b..eb23221 100644 (file)
@@ -9317,13 +9317,18 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
                              struct intel_plane_state *plane_state)
 {
        const struct drm_framebuffer *fb = plane_state->base.fb;
+       struct drm_rect clip = {};
        int src_x, src_y;
        u32 offset;
        int ret;
 
+       if (crtc_state->base.enable)
+               drm_mode_get_hv_timing(&crtc_state->base.mode,
+                                      &clip.x2, &clip.y2);
+
        ret = drm_atomic_helper_check_plane_state(&plane_state->base,
                                                  &crtc_state->base,
-                                                 &plane_state->clip,
+                                                 &clip,
                                                  DRM_PLANE_HELPER_NO_SCALING,
                                                  DRM_PLANE_HELPER_NO_SCALING,
                                                  true, true);
@@ -12752,6 +12757,7 @@ intel_check_primary_plane(struct intel_plane *plane,
        int min_scale = DRM_PLANE_HELPER_NO_SCALING;
        int max_scale = DRM_PLANE_HELPER_NO_SCALING;
        bool can_position = false;
+       struct drm_rect clip = {};
        int ret;
 
        if (INTEL_GEN(dev_priv) >= 9) {
@@ -12763,9 +12769,13 @@ intel_check_primary_plane(struct intel_plane *plane,
                can_position = true;
        }
 
+       if (crtc_state->base.enable)
+               drm_mode_get_hv_timing(&crtc_state->base.mode,
+                                      &clip.x2, &clip.y2);
+
        ret = drm_atomic_helper_check_plane_state(&state->base,
                                                  &crtc_state->base,
-                                                 &state->clip,
+                                                 &clip,
                                                  min_scale, max_scale,
                                                  can_position, true);
        if (ret)
index 30f791f..af2646d 100644 (file)
@@ -406,7 +406,6 @@ struct intel_atomic_state {
 
 struct intel_plane_state {
        struct drm_plane_state base;
-       struct drm_rect clip;
        struct i915_vma *vma;
 
        struct {
index dd485f5..cffa7a8 100644 (file)
@@ -864,7 +864,7 @@ intel_check_sprite_plane(struct intel_plane *plane,
        uint32_t src_x, src_y, src_w, src_h;
        struct drm_rect *src = &state->base.src;
        struct drm_rect *dst = &state->base.dst;
-       const struct drm_rect *clip = &state->clip;
+       struct drm_rect clip = {};
        int hscale, vscale;
        int max_scale, min_scale;
        bool can_scale;
@@ -922,7 +922,11 @@ intel_check_sprite_plane(struct intel_plane *plane,
        vscale = drm_rect_calc_vscale_relaxed(src, dst, min_scale, max_scale);
        BUG_ON(vscale < 0);
 
-       state->base.visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
+       if (crtc_state->base.enable)
+               drm_mode_get_hv_timing(&crtc_state->base.mode,
+                                      &clip.x2, &clip.y2);
+
+       state->base.visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
 
        crtc_x = dst->x1;
        crtc_y = dst->y1;