Message ID | 20170327185546.2977-10-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Mar 27, 2017 at 09:55:40PM +0300, ville.syrjala@linux.intel.com wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > We have the maximum cursor dimensions stored in the mode_config, so > let's just consult that information instead of hardcoding the same > information in multiple places. > > We still need to keep some per-platform checks as the limitations are > quite diverse. > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> > --- > drivers/gpu/drm/i915/intel_display.c | 34 +++++++++++++--------------------- > 1 file changed, 13 insertions(+), 21 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 774f9668076f..4f7a3e3f03e7 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -9169,6 +9169,17 @@ static u32 intel_cursor_position(const struct intel_plane_state *plane_state) > return pos; > } > > +static bool intel_cursor_size_ok(const struct intel_plane_state *plane_state) > +{ > + const struct drm_mode_config *config = > + &plane_state->base.plane->dev->mode_config; > + int width = plane_state->base.crtc_w; > + int height = plane_state->base.crtc_h; > + > + return width > 0 && width <= config->cursor_width && > + height > 0 && height <= config->cursor_height; > +} > + > static int intel_check_cursor(struct intel_crtc_state *crtc_state, > struct intel_plane_state *plane_state) > { > @@ -9221,28 +9232,13 @@ static u32 i845_cursor_ctl(const struct intel_crtc_state *crtc_state, > > static bool i845_cursor_size_ok(const struct intel_plane_state *plane_state) > { > - struct drm_i915_private *dev_priv = > - to_i915(plane_state->base.plane->dev); > int width = plane_state->base.crtc_w; > - int height = plane_state->base.crtc_h; > - > - if (width == 0 || height == 0) > - return false; > > /* > * 845g/865g are only limited by the width of their cursors, > * the height is arbitrary up to the precision of the register. > */ > - if (!IS_ALIGNED(width, 64)) > - return false; > - > - if (width > (IS_I845G(dev_priv) ? 64 : 512)) > - return false; > - > - if (height > 1023) > - return false; > - > - return true; > + return intel_cursor_size_ok(plane_state) && IS_ALIGNED(width, 64); > } > > static int i845_check_cursor(struct intel_plane *plane, > @@ -9378,12 +9374,10 @@ static u32 i9xx_cursor_ctl(const struct intel_crtc_state *crtc_state, > > static bool i9xx_cursor_size_ok(const struct intel_plane_state *plane_state) > { > - struct drm_i915_private *dev_priv = > - to_i915(plane_state->base.plane->dev); > int width = plane_state->base.crtc_w; > int height = plane_state->base.crtc_h; > > - if (width == 0 || height == 0) > + if (!intel_cursor_size_ok(plane_state)) > return false; > > /* > @@ -9393,8 +9387,6 @@ static bool i9xx_cursor_size_ok(const struct intel_plane_state *plane_state) > switch (width | height) { > case 256: > case 128: > - if (IS_GEN2(dev_priv)) > - return false; > case 64: > break; > default: > -- > 2.10.2 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 774f9668076f..4f7a3e3f03e7 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -9169,6 +9169,17 @@ static u32 intel_cursor_position(const struct intel_plane_state *plane_state) return pos; } +static bool intel_cursor_size_ok(const struct intel_plane_state *plane_state) +{ + const struct drm_mode_config *config = + &plane_state->base.plane->dev->mode_config; + int width = plane_state->base.crtc_w; + int height = plane_state->base.crtc_h; + + return width > 0 && width <= config->cursor_width && + height > 0 && height <= config->cursor_height; +} + static int intel_check_cursor(struct intel_crtc_state *crtc_state, struct intel_plane_state *plane_state) { @@ -9221,28 +9232,13 @@ static u32 i845_cursor_ctl(const struct intel_crtc_state *crtc_state, static bool i845_cursor_size_ok(const struct intel_plane_state *plane_state) { - struct drm_i915_private *dev_priv = - to_i915(plane_state->base.plane->dev); int width = plane_state->base.crtc_w; - int height = plane_state->base.crtc_h; - - if (width == 0 || height == 0) - return false; /* * 845g/865g are only limited by the width of their cursors, * the height is arbitrary up to the precision of the register. */ - if (!IS_ALIGNED(width, 64)) - return false; - - if (width > (IS_I845G(dev_priv) ? 64 : 512)) - return false; - - if (height > 1023) - return false; - - return true; + return intel_cursor_size_ok(plane_state) && IS_ALIGNED(width, 64); } static int i845_check_cursor(struct intel_plane *plane, @@ -9378,12 +9374,10 @@ static u32 i9xx_cursor_ctl(const struct intel_crtc_state *crtc_state, static bool i9xx_cursor_size_ok(const struct intel_plane_state *plane_state) { - struct drm_i915_private *dev_priv = - to_i915(plane_state->base.plane->dev); int width = plane_state->base.crtc_w; int height = plane_state->base.crtc_h; - if (width == 0 || height == 0) + if (!intel_cursor_size_ok(plane_state)) return false; /* @@ -9393,8 +9387,6 @@ static bool i9xx_cursor_size_ok(const struct intel_plane_state *plane_state) switch (width | height) { case 256: case 128: - if (IS_GEN2(dev_priv)) - return false; case 64: break; default: