All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] Primary plane rotation regressions
Date: Mon, 22 Sep 2014 11:28:04 +0300	[thread overview]
Message-ID: <20140922082804.GS12416@intel.com> (raw)
In-Reply-To: <1411323609-2110-1-git-send-email-chris@chris-wilson.co.uk>

On Sun, Sep 21, 2014 at 07:20:09PM +0100, Chris Wilson wrote:
> If you attempt to use xrandr --rotation inverted at the moment, the
> kernel disables the output when attempting to update the plane
> rotation. This is because the primary plane src/dst rectangle is never
> initialised and so it attempts to restore a 0x0 sized plane.
> 
> There is also a lack of debug trace through the new plane KMS functions,
> and a lack of error propagation.
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c  |  5 +++--
>  drivers/gpu/drm/i915/intel_display.c | 28 ++++++++++++++++++++++------
>  2 files changed, 25 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index af0ee7b60979..6f56b19b244a 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -2471,9 +2471,10 @@ static void intel_crtc_info(struct seq_file *m, struct intel_crtc *intel_crtc)
>  	struct intel_encoder *intel_encoder;
>  
>  	if (crtc->primary->fb)
> -		seq_printf(m, "\tfb: %d, pos: %dx%d, size: %dx%d\n",
> +		seq_printf(m, "\tfb: %d, pos: %dx%d, size: %dx%d, rotation %x\n",
>  			   crtc->primary->fb->base.id, crtc->x, crtc->y,
> -			   crtc->primary->fb->width, crtc->primary->fb->height);
> +			   crtc->primary->fb->width, crtc->primary->fb->height,
> +			   to_intel_plane(crtc->primary)->rotation);
>  	else
>  		seq_puts(m, "\tprimary plane disabled\n");
>  	for_each_encoder_on_crtc(dev, crtc, intel_encoder)
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 22fc782449ee..1774b1941bbe 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -7361,6 +7361,17 @@ static void ironlake_get_plane_config(struct intel_crtc *crtc,
>  	crtc->base.primary->fb->width = ((val >> 16) & 0xfff) + 1;
>  	crtc->base.primary->fb->height = ((val >> 0) & 0xfff) + 1;
>  
> +	to_intel_plane(crtc->base.primary)->src_x = 0;
> +	to_intel_plane(crtc->base.primary)->src_y = 0;
> +	to_intel_plane(crtc->base.primary)->src_w = crtc->base.primary->fb->width;
> +	to_intel_plane(crtc->base.primary)->src_h = crtc->base.primary->fb->height;
> +
> +	/* XXX from offset */
> +	to_intel_plane(crtc->base.primary)->crtc_x = 0;
> +	to_intel_plane(crtc->base.primary)->crtc_y = 0;
> +	to_intel_plane(crtc->base.primary)->crtc_w = crtc->base.primary->fb->width;
> +	to_intel_plane(crtc->base.primary)->crtc_h = crtc->base.primary->fb->height;

I'm thinking that for now these would be better placed in
intel_modeset_readout_hw_state() where we read out the primary plane
enabled state as well, and there you could use pipe_src_w/h.
Also the src coords need <<16.

.get_plane_config() should really be renamed to .get_primary_plane_fb()
or something...

> +
>  	val = I915_READ(DSPSTRIDE(pipe));
>  	crtc->base.primary->fb->pitches[0] = val & 0xffffffc0;
>  
> @@ -11497,6 +11508,8 @@ intel_primary_plane_disable(struct drm_plane *plane)
>  	if (!plane->fb)
>  		return 0;
>  
> +	DRM_DEBUG_KMS("CRTC:%d\n", plane->crtc->base.id);
> +
>  	BUG_ON(!plane->crtc);
>  
>  	intel_crtc = to_intel_crtc(plane->crtc);
> @@ -11559,6 +11572,8 @@ intel_commit_primary_plane(struct drm_plane *plane,
>  	struct drm_rect *src = &state->src;
>  	int ret;
>  
> +	DRM_DEBUG_KMS("CRTC:%d visible?=%d\n", crtc->base.id, state->visible);
> +
>  	intel_crtc_wait_for_pending_flips(crtc);
>  
>  	/*
> @@ -11646,6 +11661,10 @@ intel_primary_plane_setplane(struct drm_plane *plane, struct drm_crtc *crtc,
>  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
>  	int ret;
>  
> +	DRM_DEBUG_KMS("src=(%d, %d)x(%d, %d), crtc=(%d, %d)x(%d, %d), crtc active?=%d\n",
> +		      src_x, src_y, src_w, src_h, crtc_x, crtc_y, crtc_w, crtc_h,
> +		      intel_crtc->active);

I don't think I like having this much debug spew from plane operations.
So if you want to add these things I'd prefer DRM_DEBUG().

Also the src coords are 16.16 here, and I'd prefer we use the same fake
X geometry notation that's used in __setplane_internal() and
drm_rect_debug_print().

> +
>  	state.crtc = crtc;
>  	state.fb = fb;
>  
> @@ -11670,12 +11689,9 @@ intel_primary_plane_setplane(struct drm_plane *plane, struct drm_crtc *crtc,
>  	state.orig_dst = state.dst;
>  
>  	ret = intel_check_primary_plane(plane, &state);
> -	if (ret)
> -		return ret;
> -
> -	intel_commit_primary_plane(plane, &state);
> -
> -	return 0;
> +	if (ret == 0)
> +		ret = intel_commit_primary_plane(plane, &state);
> +	return ret;

Just 'return intel_commit_primary_plane()' ? Matches the sprite code
which is a plus since we'll probably want to unify this stuff even
more.

>  }
>  
>  /* Common destruction function for both primary and cursor planes */
> -- 
> 2.1.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC

      reply	other threads:[~2014-09-22  8:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-21 18:20 [PATCH] Primary plane rotation regressions Chris Wilson
2014-09-22  8:28 ` Ville Syrjälä [this message]

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=20140922082804.GS12416@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --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.