From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 4/7] drm/i915: Use the per-plane rotation property
Date: Wed, 20 Jul 2016 17:13:06 +0300 [thread overview]
Message-ID: <20160720141306.GS4329@intel.com> (raw)
In-Reply-To: <1469023052.11191.10.camel@linux.intel.com>
On Wed, Jul 20, 2016 at 04:57:32PM +0300, Joonas Lahtinen wrote:
> On ke, 2016-07-20 at 16:18 +0300, ville.syrjala@linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > On certain platforms not all planes support the same set of
> > rotations/reflections, so let's use the per-plane property
> > for this.
> >
> > This is already a problem on SKL when we use the legay cursor plane
> > as it only supports 0|180 whereas the universal planes support
> > 0|90|180|270, and it will be a problem on CHV soon.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/intel_display.c | 51 +++++++++++++++++++-----------------
> > drivers/gpu/drm/i915/intel_drv.h | 4 +--
> > drivers/gpu/drm/i915/intel_sprite.c | 12 ++++++++-
> > 3 files changed, 40 insertions(+), 27 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index 08b9f9a19df0..93ecb259c5ce 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -14217,6 +14217,7 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
> > struct intel_plane *primary = NULL;
> > struct intel_plane_state *state = NULL;
> > const uint32_t *intel_primary_formats;
> > + unsigned int supported_rotations;
> > unsigned int num_formats;
> > int ret;
> >
> > @@ -14289,8 +14290,19 @@ static struct drm_plane *intel_primary_plane_create(struct drm_device *dev,
> > if (ret)
> > goto fail;
> >
> > + if (INTEL_INFO(dev)->gen >= 9) {
> > + supported_rotations =
> > + BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_90) |
> > + BIT(DRM_ROTATE_180) | BIT(DRM_ROTATE_270);
> > + } else if (INTEL_INFO(dev)->gen >= 4) {
> > + supported_rotations =
> > + BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_180);
> > + } else {
> > + supported_rotations = BIT(DRM_ROTATE_0);
> > + }
> > +
>
> Might this be more informative if it was;
>
> supported_rotations = BIT(DRM_ROTATE_0);
>
> if (gen >= 4)
> supported_rotations |= BIT(DRM_ROTATE_180);
>
> Then you could exclude too, for special platforms.
I think I prefer to have explicit "these platforms support exactly these things".
Less thinking required.
>
> Also, use INTEL_GEN()
>
> > if (INTEL_INFO(dev)->gen >= 4)
> > - intel_create_rotation_property(dev, primary);
> > + intel_create_rotation_property(primary, supported_rotations);
> >
> > drm_plane_helper_add(&primary->base, &intel_plane_helper_funcs);
> >
> > @@ -14303,22 +14315,20 @@ fail:
> > return NULL;
> > }
> >
> > -void intel_create_rotation_property(struct drm_device *dev, struct intel_plane *plane)
> > +void intel_create_rotation_property(struct intel_plane *plane,
> > + unsigned int supported_rotations)
> > {
> > - if (!dev->mode_config.rotation_property) {
> > - unsigned long flags = BIT(DRM_ROTATE_0) |
> > - BIT(DRM_ROTATE_180);
> > + struct drm_device *dev = plane->base.dev;
> >
> > - if (INTEL_INFO(dev)->gen >= 9)
> > - flags |= BIT(DRM_ROTATE_90) | BIT(DRM_ROTATE_270);
> > + if (!plane->base.rotation_property)
> > + plane->base.rotation_property =
> > + drm_mode_create_rotation_property(dev,
> > + supported_rotations);
> >
> > - dev->mode_config.rotation_property =
> > - drm_mode_create_rotation_property(dev, flags);
> > - }
> > - if (dev->mode_config.rotation_property)
> > + if (plane->base.rotation_property)
> > drm_object_attach_property(&plane->base.base,
> > - dev->mode_config.rotation_property,
> > - plane->base.state->rotation);
> > + plane->base.rotation_property,
> > + plane->base.state->rotation);
> > }
> >
> > static int
> > @@ -14449,17 +14459,10 @@ static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
> > if (ret)
> > goto fail;
> >
> > - if (INTEL_INFO(dev)->gen >= 4) {
> > - if (!dev->mode_config.rotation_property)
> > - dev->mode_config.rotation_property =
> > - drm_mode_create_rotation_property(dev,
> > - BIT(DRM_ROTATE_0) |
> > - BIT(DRM_ROTATE_180));
> > - if (dev->mode_config.rotation_property)
> > - drm_object_attach_property(&cursor->base.base,
> > - dev->mode_config.rotation_property,
> > - state->base.rotation);
> > - }
> > + if (INTEL_INFO(dev)->gen >= 4)
>
> INTEL_GEN() while touching it.
>
> > + intel_create_rotation_property(cursor,
> > + BIT(DRM_ROTATE_0) |
> > + BIT(DRM_ROTATE_180));
> >
> > if (INTEL_INFO(dev)->gen >=9)
> > state->scaler_id = -1;
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 907a72cfdad3..2715aec979fc 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -1255,8 +1255,8 @@ int intel_plane_atomic_calc_changes(struct drm_crtc_state *crtc_state,
> > unsigned int intel_tile_height(const struct drm_i915_private *dev_priv,
> > uint64_t fb_modifier, unsigned int cpp);
> >
> > -void intel_create_rotation_property(struct drm_device *dev,
> > - struct intel_plane *plane);
> > +void intel_create_rotation_property(struct intel_plane *plane,
> > + unsigned int supported_rotations);
> >
> > void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
> > enum pipe pipe);
> > diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> > index cc6af1410d67..bc41c1bba04c 100644
> > --- a/drivers/gpu/drm/i915/intel_sprite.c
> > +++ b/drivers/gpu/drm/i915/intel_sprite.c
> > @@ -1046,6 +1046,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
> > struct intel_plane_state *state = NULL;
> > unsigned long possible_crtcs;
> > const uint32_t *plane_formats;
> > + unsigned int supported_rotations;
> > int num_plane_formats;
> > int ret;
> >
> > @@ -1121,6 +1122,15 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
> > goto fail;
> > }
> >
> > + if (INTEL_INFO(dev)->gen >= 9) {
> > + supported_rotations =
> > + BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_90) |
> > + BIT(DRM_ROTATE_180) | BIT(DRM_ROTATE_270);
> > + } else {
> > + supported_rotations =
> > + BIT(DRM_ROTATE_0) | BIT(DRM_ROTATE_180);
> > + }
> > +
>
> Same here, I'd put the |='s in order so that new gens add features,
> making easier to get a picture of what was added at which point.
>
> Regards, Joonas
>
> > intel_plane->pipe = pipe;
> > intel_plane->plane = plane;
> > intel_plane->frontbuffer_bit = INTEL_FRONTBUFFER_SPRITE(pipe, plane);
> > @@ -1143,7 +1153,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe, int plane)
> > if (ret)
> > goto fail;
> >
> > - intel_create_rotation_property(dev, intel_plane);
> > + intel_create_rotation_property(intel_plane, supported_rotations);
> >
> > drm_plane_helper_add(&intel_plane->base, &intel_plane_helper_funcs);
> >
> --
> Joonas Lahtinen
> Open Source Technology Center
> Intel Corporation
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2016-07-20 14:13 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-20 13:18 [PATCH 0/7] drm/i915: Per-plane rotation, fixes, and mirroring for CHV ville.syrjala
2016-07-20 13:18 ` [PATCH 1/7] drm: Add drm_rotation_90_or_270() ville.syrjala
2016-07-20 13:24 ` Joonas Lahtinen
2016-07-20 13:41 ` [Intel-gfx] " Chris Wilson
2016-07-20 13:18 ` [PATCH 2/7] drm/atomic: Reject attempts to use multiple rotation angles at once ville.syrjala
2016-07-20 13:26 ` Joonas Lahtinen
2016-07-20 13:27 ` Chris Wilson
2016-07-20 13:18 ` [PATCH 3/7] drm: Add support for optional per-plane rotation property ville.syrjala
2016-07-20 13:31 ` [Intel-gfx] " Chris Wilson
2016-07-20 13:51 ` Joonas Lahtinen
2016-07-20 14:08 ` Ville Syrjälä
2016-07-20 14:13 ` Joonas Lahtinen
2016-07-20 13:18 ` [PATCH 4/7] drm/i915: Use the " ville.syrjala
2016-07-20 13:34 ` Chris Wilson
2016-07-20 13:57 ` Joonas Lahtinen
2016-07-20 14:13 ` Ville Syrjälä [this message]
2016-07-20 13:18 ` [PATCH 5/7] drm/i915: Use & instead if == to check for rotations ville.syrjala
2016-07-20 13:35 ` [Intel-gfx] " Chris Wilson
2016-07-20 14:01 ` Joonas Lahtinen
2016-07-20 14:14 ` Ville Syrjälä
2016-07-20 13:18 ` [PATCH 6/7] drm/i915: Clean up rotation DSPCNTR/DVSCNTR/etc. setup ville.syrjala
2016-07-20 13:37 ` Chris Wilson
2016-07-20 14:03 ` Joonas Lahtinen
2016-07-20 13:18 ` [PATCH 7/7] drm/i915: Add horizontal mirroring support for CHV pipe B planes ville.syrjala
2016-07-21 10:30 ` Joonas Lahtinen
2016-07-20 13:18 ` [PATCH i-g-t] tests/kms_rotation_crc: Add bad-rotation subtest ville.syrjala
2016-07-21 10:32 ` Joonas Lahtinen
2016-07-21 11:05 ` Ville Syrjälä
2016-07-22 12:52 ` Matthew Auld
2016-07-22 13:23 ` Ville Syrjälä
2016-07-20 14:17 ` ✓ Ro.CI.BAT: success for drm/i915: Per-plane rotation, fixes, and mirroring for CHV 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=20160720141306.GS4329@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=joonas.lahtinen@linux.intel.com \
/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.