Op 18-10-18 om 21:59 schreef Ville Syrjala:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
>
> The SKL+ NV12 src width alignment w/a is still living in an odd place.
> Everything else was already relocated closer to the main plane check
> function. Move this workaround as well.
>
> As a bonus we avoid the funky rotated vs. not mess with the src
> coordinates as this now gets checked before we rotate the coordinates.
>
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 25 -------------------------
>  drivers/gpu/drm/i915/intel_sprite.c  | 21 +++++++++++++++++++++
>  2 files changed, 21 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c 
> b/drivers/gpu/drm/i915/intel_display.c
> index fc7e3b0bd95c..940d514cf9d7 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -3049,28 +3049,6 @@ static int skl_check_main_surface(struct 
> intel_plane_state *plane_state)
>       return 0;
>  }
>  
> -static int
> -skl_check_nv12_surface(struct intel_plane_state *plane_state)
> -{
> -     /* Display WA #1106 */
> -     if (plane_state->base.rotation !=
> -         (DRM_MODE_REFLECT_X | DRM_MODE_ROTATE_90) &&
> -         plane_state->base.rotation != DRM_MODE_ROTATE_270)
> -             return 0;
> -
> -     /*
> -      * src coordinates are rotated here.
> -      * We check height but report it as width
> -      */
> -     if (((drm_rect_height(&plane_state->base.src) >> 16) % 4) != 0) {
> -             DRM_DEBUG_KMS("src width must be multiple "
> -                           "of 4 for rotated NV12\n");
> -             return -EINVAL;
> -     }
> -
> -     return 0;
> -}
> -
>  static int skl_check_nv12_aux_surface(struct intel_plane_state *plane_state)
>  {
>       const struct drm_framebuffer *fb = plane_state->base.fb;
> @@ -3153,9 +3131,6 @@ int skl_check_plane_surface(struct intel_plane_state 
> *plane_state)
>        * the main surface setup depends on it.
>        */
>       if (fb->format->format == DRM_FORMAT_NV12) {
> -             ret = skl_check_nv12_surface(plane_state);
> -             if (ret)
> -                     return ret;
>               ret = skl_check_nv12_aux_surface(plane_state);
>               if (ret)
>                       return ret;
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c 
> b/drivers/gpu/drm/i915/intel_sprite.c
> index 7cd59eee5cad..0fe6c664e83c 100644
> --- a/drivers/gpu/drm/i915/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> @@ -1342,6 +1342,23 @@ static int skl_plane_check_dst_coordinates(const 
> struct intel_crtc_state *crtc_s
>       return 0;
>  }
>  
> +static int skl_plane_check_nv12_rotation(const struct intel_plane_state 
> *plane_state)
> +{
> +     const struct drm_framebuffer *fb = plane_state->base.fb;
> +     unsigned int rotation = plane_state->base.rotation;
> +     int src_w = drm_rect_width(&plane_state->base.src) >> 16;
> +
> +     /* Display WA #1106 */
> +     if (fb->format->format == DRM_FORMAT_NV12 && src_w & 3 &&
Could we put more nv12 checks here? I want to pull the scaler SRC W/H checks in 
as well..

Probably stylize it a bit with an early return for !NV12, so all checks come 
after that. :)

~Maarten

Other than that patch 1-2 look good, so have a r-b with or without those 
suggested changes.
> +         (rotation == DRM_MODE_ROTATE_270 ||
> +          rotation == (DRM_MODE_REFLECT_X | DRM_MODE_ROTATE_90))) {
> +             DRM_DEBUG_KMS("src width must be multiple of 4 for rotated 
> NV12\n");
> +             return -EINVAL;
> +     }
> +
> +     return 0;
> +}
> +
>  static int skl_plane_check(struct intel_crtc_state *crtc_state,
>                          struct intel_plane_state *plane_state)
>  {
> @@ -1380,6 +1397,10 @@ static int skl_plane_check(struct intel_crtc_state 
> *crtc_state,
>       if (ret)
>               return ret;
>  
> +     ret = skl_plane_check_nv12_rotation(plane_state);
> +     if (ret)
> +             return ret;
> +
>       ret = skl_check_plane_surface(plane_state);
>       if (ret)
>               return ret;


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to