All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915/cnl: Add support for horizontal plane flipping
@ 2017-12-15 21:38 Rodrigo Vivi
  2017-12-15 22:04 ` ✓ Fi.CI.BAT: success for drm/i915/cnl: Add support for horizontal plane flipping (rev2) Patchwork
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Rodrigo Vivi @ 2017-12-15 21:38 UTC (permalink / raw)
  To: intel-gfx; +Cc: Rodrigo Vivi

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;
+	} else if (INTEL_GEN(dev_priv) >= 9) {
 		supported_rotations =
 			DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 |
 			DRM_MODE_ROTATE_180 | DRM_MODE_ROTATE_270;
-- 
2.13.6

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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* ✓ Fi.CI.BAT: success for drm/i915/cnl: Add support for horizontal plane flipping (rev2)
  2017-12-15 21:38 [PATCH] drm/i915/cnl: Add support for horizontal plane flipping Rodrigo Vivi
@ 2017-12-15 22:04 ` Patchwork
  2017-12-15 22:22 ` [PATCH] drm/i915/cnl: Add support for horizontal plane flipping Chris Wilson
  2017-12-15 23:33 ` ✓ Fi.CI.IGT: success for drm/i915/cnl: Add support for horizontal plane flipping (rev2) Patchwork
  2 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2017-12-15 22:04 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/cnl: Add support for horizontal plane flipping (rev2)
URL   : https://patchwork.freedesktop.org/series/29114/
State : success

== Summary ==

Series 29114v2 drm/i915/cnl: Add support for horizontal plane flipping
https://patchwork.freedesktop.org/api/1.0/series/29114/revisions/2/mbox/

Test debugfs_test:
        Subgroup read_all_entries:
                dmesg-fail -> DMESG-WARN (fi-elk-e7500) fdo#103989
Test kms_frontbuffer_tracking:
        Subgroup basic:
                pass       -> FAIL       (fi-glk-1) fdo#103167
Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-b:
                incomplete -> PASS       (fi-snb-2520m) fdo#103713
Test kms_psr_sink_crc:
        Subgroup psr_basic:
                dmesg-warn -> PASS       (fi-skl-6700hq) fdo#101144

fdo#103989 https://bugs.freedesktop.org/show_bug.cgi?id=103989
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713
fdo#101144 https://bugs.freedesktop.org/show_bug.cgi?id=101144

fi-bdw-5557u     total:288  pass:267  dwarn:0   dfail:0   fail:0   skip:21  time:427s
fi-bdw-gvtdvm    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:440s
fi-blb-e6850     total:288  pass:222  dwarn:1   dfail:1   fail:0   skip:64  time:392s
fi-bsw-n3050     total:288  pass:242  dwarn:0   dfail:0   fail:0   skip:46  time:500s
fi-bwr-2160      total:288  pass:183  dwarn:0   dfail:0   fail:0   skip:105 time:276s
fi-bxt-dsi       total:288  pass:258  dwarn:0   dfail:0   fail:0   skip:30  time:494s
fi-bxt-j4205     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:494s
fi-byt-j1900     total:288  pass:253  dwarn:0   dfail:0   fail:0   skip:35  time:480s
fi-byt-n2820     total:288  pass:249  dwarn:0   dfail:0   fail:0   skip:39  time:469s
fi-elk-e7500     total:224  pass:163  dwarn:15  dfail:0   fail:0   skip:45 
fi-glk-1         total:288  pass:259  dwarn:0   dfail:0   fail:1   skip:28  time:527s
fi-hsw-4770      total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:403s
fi-hsw-4770r     total:288  pass:261  dwarn:0   dfail:0   fail:0   skip:27  time:416s
fi-ilk-650       total:288  pass:228  dwarn:0   dfail:0   fail:0   skip:60  time:388s
fi-ivb-3520m     total:288  pass:259  dwarn:0   dfail:0   fail:0   skip:29  time:470s
fi-ivb-3770      total:288  pass:255  dwarn:0   dfail:0   fail:0   skip:33  time:427s
fi-kbl-7500u     total:288  pass:263  dwarn:1   dfail:0   fail:0   skip:24  time:475s
fi-kbl-7560u     total:288  pass:268  dwarn:1   dfail:0   fail:0   skip:19  time:519s
fi-kbl-7567u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:464s
fi-kbl-r         total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:523s
fi-pnv-d510      total:288  pass:221  dwarn:1   dfail:0   fail:1   skip:65  time:597s
fi-skl-6260u     total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:444s
fi-skl-6600u     total:288  pass:260  dwarn:1   dfail:0   fail:0   skip:27  time:531s
fi-skl-6700hq    total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:560s
fi-skl-6770hq    total:288  pass:268  dwarn:0   dfail:0   fail:0   skip:20  time:496s
fi-skl-gvtdvm    total:288  pass:265  dwarn:0   dfail:0   fail:0   skip:23  time:448s
fi-snb-2520m     total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:552s
fi-snb-2600      total:288  pass:248  dwarn:0   dfail:0   fail:0   skip:40  time:412s
Blacklisted hosts:
fi-cfl-s2        total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:591s
fi-cnl-y         total:288  pass:262  dwarn:0   dfail:0   fail:0   skip:26  time:646s
fi-glk-dsi       total:288  pass:152  dwarn:1   dfail:4   fail:0   skip:131 time:289s
fi-skl-6700k2    total:288  pass:264  dwarn:0   dfail:0   fail:0   skip:24  time:514s

e62100b705b3eb079c6acd60c25a8d54d92b7dac drm-tip: 2017y-12m-15d-21h-18m-47s UTC integration manifest
57bbe8d09489 drm/i915/cnl: Add support for horizontal plane flipping

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7511/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/i915/cnl: Add support for horizontal plane flipping
  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 ` Chris Wilson
  2017-12-16 15:25   ` Ville Syrjälä
  2017-12-15 23:33 ` ✓ Fi.CI.IGT: success for drm/i915/cnl: Add support for horizontal plane flipping (rev2) Patchwork
  2 siblings, 1 reply; 7+ messages in thread
From: Chris Wilson @ 2017-12-15 22:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: Rodrigo Vivi

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.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* ✓ Fi.CI.IGT: success for drm/i915/cnl: Add support for horizontal plane flipping (rev2)
  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-15 23:33 ` Patchwork
  2 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2017-12-15 23:33 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/cnl: Add support for horizontal plane flipping (rev2)
URL   : https://patchwork.freedesktop.org/series/29114/
State : success

== Summary ==

Warning: bzip CI_DRM_3525/shard-glkb6/results10.json.bz2 wasn't in correct JSON format
Test gem_eio:
        Subgroup in-flight:
                dmesg-warn -> PASS       (shard-snb) fdo#104058
Test kms_frontbuffer_tracking:
        Subgroup fbc-1p-offscren-pri-shrfb-draw-render:
                pass       -> FAIL       (shard-snb) fdo#101623

fdo#104058 https://bugs.freedesktop.org/show_bug.cgi?id=104058
fdo#101623 https://bugs.freedesktop.org/show_bug.cgi?id=101623

shard-hsw        total:2635 pass:1490 dwarn:1   dfail:0   fail:9   skip:1135 time:9077s
shard-snb        total:2712 pass:1308 dwarn:1   dfail:0   fail:12  skip:1391 time:8027s
Blacklisted hosts:
shard-apl        total:2712 pass:1682 dwarn:1   dfail:1   fail:27  skip:1001 time:13828s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7511/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/i915/cnl: Add support for horizontal plane flipping
  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ä
  2017-12-18 22:46     ` Rodrigo Vivi
  0 siblings, 1 reply; 7+ messages in thread
From: Ville Syrjälä @ 2017-12-16 15:25 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, Rodrigo Vivi

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] drm/i915/cnl: Add support for horizontal plane flipping
  2017-12-16 15:25   ` Ville Syrjälä
@ 2017-12-18 22:46     ` Rodrigo Vivi
  0 siblings, 0 replies; 7+ messages in thread
From: Rodrigo Vivi @ 2017-12-18 22:46 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

On Sat, Dec 16, 2017 at 03:25:01PM +0000, Ville Syrjälä wrote:
> 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.

Ok... So I'm taking this as good enough for now and merging the patch.

We can continue the discussion, but for following up patches if we
decided we need something different...

Thanks,
Rodrigo.

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] drm/i915/cnl: Add support for horizontal plane flipping
@ 2017-08-21 23:58 Rodrigo Vivi
  0 siblings, 0 replies; 7+ messages in thread
From: Rodrigo Vivi @ 2017-08-21 23:58 UTC (permalink / raw)
  To: intel-gfx; +Cc: Rodrigo Vivi

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)

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>
---
 drivers/gpu/drm/i915/i915_reg.h      |  1 +
 drivers/gpu/drm/i915/intel_display.c | 39 +++++++++++++++++++++++++++++++-----
 2 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index d4ecb1905ad8..d7621622b58b 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -6268,6 +6268,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)
 #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 3b95cf953335..e312096273c0 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3139,6 +3139,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;
 
@@ -3480,9 +3486,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;
 	/*
@@ -3496,7 +3502,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;
@@ -3523,7 +3544,10 @@ 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;
@@ -13249,7 +13273,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;
+	} else if (INTEL_GEN(dev_priv) >= 9) {
 		supported_rotations =
 			DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 |
 			DRM_MODE_ROTATE_180 | DRM_MODE_ROTATE_270;
-- 
2.13.2

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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-12-18 22:46 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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ä
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

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.