All of lore.kernel.org
 help / color / mirror / Atom feed
From: ville.syrjala@linux.intel.com
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 09/10] drm/i915: Use fb->pitches[0] in cursor code
Date: Tue,  7 Mar 2017 17:27:08 +0200	[thread overview]
Message-ID: <20170307152709.31957-10-ville.syrjala@linux.intel.com> (raw)
In-Reply-To: <20170307152709.31957-1-ville.syrjala@linux.intel.com>

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The cursor code currently ignores fb->pitches[0] (except when creating
the fb itself), and just uses the cursor_width*4 as the stride. Let's
make sure fb->pitches[0] actually matches what we expect it to be.

We can also relax the stride vs. cursor width relationship on 845/865
since the stride is programmed separately. The only constraint is that
width*cpp doesn't exceed the stride, and that's already been checked
by the core since it makes sure the entire plane fits within the fb.

We can also drop the bo size check as that's already checked when
we create the fb. That is the fb is guaranteed to fit within the bo.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 41cbaee66f1b..17362dc9f438 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9300,8 +9300,6 @@ static int i845_check_cursor(struct intel_plane *plane,
 			     struct intel_plane_state *state)
 {
 	struct drm_framebuffer *fb = state->base.fb;
-	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
-	unsigned stride;
 	int ret;
 
 	ret = drm_plane_helper_check_state(&state->base,
@@ -9313,7 +9311,7 @@ static int i845_check_cursor(struct intel_plane *plane,
 		return ret;
 
 	/* if we want to turn off the cursor ignore width and height */
-	if (!obj)
+	if (!fb)
 		return 0;
 
 	/* Check for which cursor types we support */
@@ -9323,10 +9321,16 @@ static int i845_check_cursor(struct intel_plane *plane,
 		return -EINVAL;
 	}
 
-	stride = roundup_pow_of_two(state->base.crtc_w) * 4;
-	if (obj->base.size < stride * state->base.crtc_h) {
-		DRM_DEBUG_KMS("buffer is too small\n");
-		return -ENOMEM;
+	switch (fb->pitches[0]) {
+	case 256:
+	case 512:
+	case 1024:
+	case 2048:
+		break;
+	default:
+		DRM_DEBUG_KMS("Invalid cursor stride (%u)\n",
+			      fb->pitches[0]);
+		return -EINVAL;
 	}
 
 	if (fb->modifier != DRM_FORMAT_MOD_NONE) {
@@ -9430,9 +9434,7 @@ static int i9xx_check_cursor(struct intel_plane *plane,
 {
 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
 	struct drm_framebuffer *fb = state->base.fb;
-	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 	enum pipe pipe = plane->pipe;
-	unsigned stride;
 	int ret;
 
 	ret = drm_plane_helper_check_state(&state->base,
@@ -9444,7 +9446,7 @@ static int i9xx_check_cursor(struct intel_plane *plane,
 		return ret;
 
 	/* if we want to turn off the cursor ignore width and height */
-	if (!obj)
+	if (!fb)
 		return 0;
 
 	/* Check for which cursor types we support */
@@ -9454,10 +9456,10 @@ static int i9xx_check_cursor(struct intel_plane *plane,
 		return -EINVAL;
 	}
 
-	stride = roundup_pow_of_two(state->base.crtc_w) * 4;
-	if (obj->base.size < stride * state->base.crtc_h) {
-		DRM_DEBUG_KMS("buffer is too small\n");
-		return -ENOMEM;
+	if (fb->pitches[0] != state->base.crtc_w * fb->format->cpp[0]) {
+		DRM_DEBUG_KMS("Invalid cursor stride (%u) (cursor width %d)\n",
+			      fb->pitches[0], state->base.crtc_w);
+		return -EINVAL;
 	}
 
 	if (fb->modifier != DRM_FORMAT_MOD_NONE) {
-- 
2.10.2

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

  parent reply	other threads:[~2017-03-07 15:27 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-07 15:26 [PATCH 00/10] drm/i915: Cursor code cleanup and cursor "FBC" support for IVB+ ville.syrjala
2017-03-07 15:27 ` [PATCH 01/10] drm/i915: Parametrize cursor/primary pipe select bits ville.syrjala
2017-03-07 21:51   ` Chris Wilson
2017-03-07 15:27 ` [PATCH 02/10] drm/i915: Pass intel_plane and intel_crtc to plane hooks ville.syrjala
2017-03-07 21:50   ` Chris Wilson
2017-03-07 15:27 ` [PATCH 03/10] drm/i915: Refactor CURBASE calculation ville.syrjala
2017-03-07 21:56   ` Chris Wilson
2017-03-07 15:27 ` [PATCH 04/10] drm/i915: Clean up cursor junk from intel_crtc ville.syrjala
2017-03-07 22:33   ` Chris Wilson
2017-03-07 15:27 ` [PATCH 05/10] drm/i915: Refactor CURPOS calculation ville.syrjala
2017-03-07 21:49   ` Chris Wilson
2017-03-07 15:27 ` [PATCH 06/10] drm/i915: Move cursor position and base handling into the platform specific functions ville.syrjala
2017-03-07 22:35   ` Chris Wilson
2017-03-07 15:27 ` [PATCH 07/10] drm/i915: Drop useless posting reads from cursor commit ville.syrjala
2017-03-07 22:00   ` Chris Wilson
2017-03-07 15:27 ` [PATCH 08/10] drm/i915: Split cursor check_plane into i845 and i9xx variants ville.syrjala
2017-03-07 22:24   ` Chris Wilson
2017-03-08 10:52     ` Ville Syrjälä
2017-03-07 15:27 ` ville.syrjala [this message]
2017-03-07 22:25   ` [PATCH 09/10] drm/i915: Use fb->pitches[0] in cursor code Chris Wilson
2017-03-07 15:27 ` [PATCH 10/10] drm/i915: Support variable cursor height on ivb+ ville.syrjala
2017-03-07 22:32   ` Chris Wilson
2017-03-08 10:40     ` Ville Syrjälä
2017-03-08 11:00       ` Chris Wilson
2017-03-08 10:45     ` Daniel Vetter
2017-03-07 16:18 ` ✓ Fi.CI.BAT: success for drm/i915: Cursor code cleanup and cursor "FBC" support for IVB+ Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170307152709.31957-10-ville.syrjala@linux.intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.