All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Imre Deak <imre.deak@intel.com>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 9/9] drm/i915: Add rotation property for sprites
Date: Mon, 14 Oct 2013 17:39:25 +0300	[thread overview]
Message-ID: <20131014143925.GF13047@intel.com> (raw)
In-Reply-To: <1381759153.12668.67.camel@intelbox>

On Mon, Oct 14, 2013 at 04:59:13PM +0300, Imre Deak wrote:
> On Mon, 2013-09-30 at 17:44 +0300, ville.syrjala@linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Sprite planes support 180 degree rotation. The lower layers are now in
> > place, so hook in the standard rotation property to expose the feature
> > to the users.
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_drv.h     |  1 +
> >  drivers/gpu/drm/i915/intel_sprite.c | 42 ++++++++++++++++++++++++++++++++++++-
> >  2 files changed, 42 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 08e96a8..48d4d5f 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -1356,6 +1356,7 @@ typedef struct drm_i915_private {
> >  
> >  	struct drm_property *broadcast_rgb_property;
> >  	struct drm_property *force_audio_property;
> > +	struct drm_property *rotation_property;
> >  
> >  	bool hw_contexts_disabled;
> >  	uint32_t hw_context_size;
> > diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> > index 028a979..49f8238 100644
> > --- a/drivers/gpu/drm/i915/intel_sprite.c
> > +++ b/drivers/gpu/drm/i915/intel_sprite.c
> > @@ -1033,6 +1033,30 @@ out_unlock:
> >  	return ret;
> >  }
> >  
> > +static int intel_plane_set_property(struct drm_plane *plane,
> > +				    struct drm_property *prop,
> > +				    uint64_t val)
> > +{
> > +	struct drm_i915_private *dev_priv = plane->dev->dev_private;
> > +	struct intel_plane *intel_plane = to_intel_plane(plane);
> > +	uint64_t old_val;
> > +	int ret = -ENOENT;
> > +
> > +	if (prop == dev_priv->rotation_property) {
> > +		/* exactly one rotation angle please */
> > +		if (hweight32(val & 0xf) != 1)
> > +			return -EINVAL;
> > +
> > +		old_val = intel_plane->rotation;
> > +		intel_plane->rotation = val;
> > +		ret = intel_plane_restore(plane);
> > +		if (ret)
> > +			intel_plane->rotation = old_val;
> > +	}
> > +
> > +	return ret;
> > +}
> > +
> >  int intel_plane_restore(struct drm_plane *plane)
> >  {
> >  	struct intel_plane *intel_plane = to_intel_plane(plane);
> > @@ -1059,6 +1083,7 @@ static const struct drm_plane_funcs intel_plane_funcs = {
> >  	.update_plane = intel_update_plane,
> >  	.disable_plane = intel_disable_plane,
> >  	.destroy = intel_destroy_plane,
> > +	.set_property = intel_plane_set_property,
> >  };
> >  
> >  static uint32_t ilk_plane_formats[] = {
> > @@ -1095,6 +1120,7 @@ static uint32_t vlv_plane_formats[] = {
> >  int
> >  intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
> >  {
> > +	struct drm_i915_private *dev_priv = dev->dev_private;
> >  	struct intel_plane *intel_plane;
> >  	unsigned long possible_crtcs;
> >  	const uint32_t *plane_formats;
> > @@ -1168,8 +1194,22 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
> >  			     &intel_plane_funcs,
> >  			     plane_formats, num_plane_formats,
> >  			     false);
> > -	if (ret)
> > +	if (ret) {
> >  		kfree(intel_plane);
> > +		goto out;
> > +	}
> > +
> > +	if (!dev_priv->rotation_property)
> > +		dev_priv->rotation_property =
> > +			drm_mode_create_rotation_property(dev,
> > +							  BIT(DRM_ROTATE_0) |
> > +							  BIT(DRM_ROTATE_180));
> > +
> > +	if (dev_priv->rotation_property)
> > +		drm_object_attach_property(&intel_plane->base.base,
> > +					   dev_priv->rotation_property,
> > +					   intel_plane->rotation);
> 
> drm_mode_create_rotation_property() can fail silently, I think we should
> handle it.

I figured I'd just move it to intel_modeset_init() but turns out we
don't really handle errors there either. Frankly this looks like
another rathole. Seeing as we already ignore property creation errors
in other places (in a way that could oops even), I'm just going to
run away before the urge to fix it all takes over.

-- 
Ville Syrjälä
Intel OTC

  reply	other threads:[~2013-10-14 14:39 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-30 14:44 [PATCH 0/9] drm/i915: Plane rotation support ville.syrjala
2013-09-30 14:44 ` [PATCH 1/9] drm: Move DRM_ROTATE bits out of omapdrm into drm_crtc.h ville.syrjala
2013-09-30 14:44 ` [PATCH 2/9] drm: Add support_bits parameter to drm_property_create_bitmask() ville.syrjala
2013-09-30 14:44 ` [PATCH 3/9] drm: Add drm_mode_create_rotation_property() ville.syrjala
2013-09-30 14:44 ` [PATCH 4/9] drm/omap: Switch omapdrm over to drm_mode_create_rotation_property() ville.syrjala
2013-09-30 14:44 ` [PATCH 5/9] drm: Add drm_rect rotation functions ville.syrjala
2013-09-30 14:44 ` [PATCH 6/9] drm: Add drm_rotation_simplify() ville.syrjala
2013-10-14 13:46   ` [Intel-gfx] " Imre Deak
2013-10-14 13:50     ` Ville Syrjälä
2013-09-30 14:44 ` [PATCH 7/9] drm/i915: Add 180 degree sprite rotation support ville.syrjala
2013-10-01 13:22   ` [PATCH v2 " ville.syrjala
2013-09-30 14:44 ` [PATCH 8/9] drm/i915: Make intel_plane_restore() return an error ville.syrjala
2013-09-30 14:44 ` [PATCH 9/9] drm/i915: Add rotation property for sprites ville.syrjala
2013-10-14 13:59   ` Imre Deak
2013-10-14 14:39     ` Ville Syrjälä [this message]
2013-10-14 15:10       ` Imre Deak
2013-09-30 16:15 ` [PATCH 0/9] drm/i915: Plane rotation support Rob Clark
2013-09-30 17:09   ` Ville Syrjälä
2013-09-30 17:46     ` Rob Clark
2013-09-30 18:21       ` Daniel Vetter
2013-09-30 18:36         ` Ville Syrjälä
2013-09-30 18:31       ` Ville Syrjälä

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=20131014143925.GF13047@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=imre.deak@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.