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, Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: Re: [PATCH] drm/i915/cnl: Add support for horizontal plane flipping
Date: Sat, 16 Dec 2017 17:25:01 +0200	[thread overview]
Message-ID: <20171216152501.GF10981@intel.com> (raw)
In-Reply-To: <151337654561.2682.6712307470962702622@mail.alporthouse.com>

On Fri, Dec 15, 2017 at 10:22:25PM +0000, Chris Wilson wrote:
> Quoting Rodrigo Vivi (2017-12-15 21:38:00)
> > From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> > 
> > CNL supports horizontal plane flipping on non-linear plane formats.
> > 
> > v2:
> > - Avoid BUG unlike elsewhere in the code (Ville)
> > - Hoist the rotation-tiling restriction check (Ville)
> > 
> > v3 (Rodrigo):
> > - Rebased after a while.
> > - Fix small indentation issues.
> > 
> > Bspec: 7656
> > Suggested-by: Anusha Srivatsa <anusha.srivatsa@intel.com>
> > Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
> > Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> > Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_reg.h      |  1 +
> >  drivers/gpu/drm/i915/intel_display.c | 40 +++++++++++++++++++++++++++++++-----
> >  2 files changed, 36 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> > index 09bf043c1c2e..14ade8f88dcc 100644
> > --- a/drivers/gpu/drm/i915/i915_reg.h
> > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > @@ -6329,6 +6329,7 @@ enum {
> >  #define   PLANE_CTL_TILED_X                    (  1 << 10)
> >  #define   PLANE_CTL_TILED_Y                    (  4 << 10)
> >  #define   PLANE_CTL_TILED_YF                   (  5 << 10)
> > +#define   PLANE_CTL_FLIP_HORIZONTAL            (  1 << 8)
> >  #define   PLANE_CTL_ALPHA_MASK                 (0x3 << 4) /* Pre-GLK */
> >  #define   PLANE_CTL_ALPHA_DISABLE              (  0 << 4)
> >  #define   PLANE_CTL_ALPHA_SW_PREMULTIPLY       (  2 << 4)
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index efa6c6d19664..fb5ee413dc30 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -3073,6 +3073,12 @@ int skl_check_plane_surface(struct intel_plane_state *plane_state)
> >         unsigned int rotation = plane_state->base.rotation;
> >         int ret;
> >  
> > +       if (rotation & DRM_MODE_REFLECT_X &&
> > +           fb->modifier == DRM_FORMAT_MOD_LINEAR) {
> > +               DRM_DEBUG_KMS("horizontal flip is not supported with linear surface formats\n");
> > +               return -EINVAL;
> > +       }
> > +
> >         if (!plane_state->base.visible)
> >                 return 0;
> >  
> > @@ -3453,9 +3459,9 @@ static u32 skl_plane_ctl_tiling(uint64_t fb_modifier)
> >         return 0;
> >  }
> >  
> > -static u32 skl_plane_ctl_rotation(unsigned int rotation)
> > +static u32 skl_plane_ctl_rotate(unsigned int rotate)
> >  {
> > -       switch (rotation) {
> > +       switch (rotate) {
> >         case DRM_MODE_ROTATE_0:
> >                 break;
> >         /*
> > @@ -3469,7 +3475,22 @@ static u32 skl_plane_ctl_rotation(unsigned int rotation)
> >         case DRM_MODE_ROTATE_270:
> >                 return PLANE_CTL_ROTATE_90;
> >         default:
> > -               MISSING_CASE(rotation);
> > +               MISSING_CASE(rotate);
> > +       }
> > +
> > +       return 0;
> > +}
> > +
> > +static u32 cnl_plane_ctl_flip(unsigned int reflect)
> > +{
> > +       switch (reflect) {
> > +       case 0:
> > +               break;
> > +       case DRM_MODE_REFLECT_X:
> > +               return PLANE_CTL_FLIP_HORIZONTAL;
> > +       case DRM_MODE_REFLECT_Y:
> > +       default:
> > +               MISSING_CASE(reflect);
> >         }
> >  
> >         return 0;
> > @@ -3497,7 +3518,11 @@ u32 skl_plane_ctl(const struct intel_crtc_state *crtc_state,
> >  
> >         plane_ctl |= skl_plane_ctl_format(fb->format->format);
> >         plane_ctl |= skl_plane_ctl_tiling(fb->modifier);
> > -       plane_ctl |= skl_plane_ctl_rotation(rotation);
> > +       plane_ctl |= skl_plane_ctl_rotate(rotation & DRM_MODE_ROTATE_MASK);
> > +
> > +       if (INTEL_GEN(dev_priv) >= 10)
> > +               plane_ctl |= cnl_plane_ctl_flip(rotation &
> > +                                               DRM_MODE_REFLECT_MASK);
> >  
> >         if (key->flags & I915_SET_COLORKEY_DESTINATION)
> >                 plane_ctl |= PLANE_CTL_KEY_ENABLE_DESTINATION;
> > @@ -13300,7 +13325,12 @@ intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
> >         if (ret)
> >                 goto fail;
> >  
> > -       if (INTEL_GEN(dev_priv) >= 9) {
> > +       if (INTEL_GEN(dev_priv) >= 10) {
> > +               supported_rotations =
> > +                       DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 |
> > +                       DRM_MODE_ROTATE_180 | DRM_MODE_ROTATE_270 |
> > +                       DRM_MODE_REFLECT_X;
> 
> REFLECT_Y == ROTATE_180 | REFLECT_X
> 
> Where does that conversion belong? Should the kernel just say it
> supports REFLECT_Y and fixup skl_plane_ctl(), that seems pretty simple.

We have drm_rotation_simplify() for that exactly. I hooked it up for
msm some time ago: 574a37b1bb07 ("drm/msm/mdp5: Advertize 180 degree
rotation")

I guess we could even move that into to the core, but that would
require duplicating supported_rotations and plane_state->rotation
into user visible and internal values.

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2017-12-16 15:25 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-15 21:38 [PATCH] drm/i915/cnl: Add support for horizontal plane flipping Rodrigo Vivi
2017-12-15 22:04 ` ✓ Fi.CI.BAT: success for drm/i915/cnl: Add support for horizontal plane flipping (rev2) Patchwork
2017-12-15 22:22 ` [PATCH] drm/i915/cnl: Add support for horizontal plane flipping Chris Wilson
2017-12-16 15:25   ` Ville Syrjälä [this message]
2017-12-18 22:46     ` Rodrigo Vivi
2017-12-15 23:33 ` ✓ Fi.CI.IGT: success for drm/i915/cnl: Add support for horizontal plane flipping (rev2) Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2017-08-21 23:58 [PATCH] drm/i915/cnl: Add support for horizontal plane flipping Rodrigo Vivi

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=20171216152501.GF10981@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=rodrigo.vivi@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.