Op 18-10-18 om 21:59 schreef Ville Syrjala: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > 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.syrjala@xxxxxxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx