diff mbox series

[1/2] drm/i915: Clean up skl_plane_has_planar()

Message ID 20180824203856.17700-1-dhinakaran.pandiyan@intel.com (mailing list archive)
State New, archived
Headers show
Series [1/2] drm/i915: Clean up skl_plane_has_planar() | expand

Commit Message

Dhinakaran Pandiyan Aug. 24, 2018, 8:38 p.m. UTC
skl_plane_has_planar is hard to read, simplify the logic by checking for
support in the order of platform, pipe and plane.

No change in functionality intended.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 27 +++++++++------------------
 1 file changed, 9 insertions(+), 18 deletions(-)

Comments

Rodrigo Vivi Aug. 24, 2018, 10:15 p.m. UTC | #1
On Fri, Aug 24, 2018 at 01:38:55PM -0700, Dhinakaran Pandiyan wrote:
> skl_plane_has_planar is hard to read, simplify the logic by checking for
> support in the order of platform, pipe and plane.
> 
> No change in functionality intended.
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 27 +++++++++------------------
>  1 file changed, 9 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 30fdfd1a3037..7e18bd8b21b8 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -13622,24 +13622,15 @@ static bool skl_plane_has_fbc(struct drm_i915_private *dev_priv,
>  bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
>  			  enum pipe pipe, enum plane_id plane_id)
>  {
> -	if (plane_id == PLANE_PRIMARY) {
> -		if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> -			return false;
> -		else if ((INTEL_GEN(dev_priv) == 9 && pipe == PIPE_C) &&
> -			 !IS_GEMINILAKE(dev_priv))
> -			return false;
> -	} else if (plane_id >= PLANE_SPRITE0) {
> -		if (plane_id == PLANE_CURSOR)
> -			return false;
> -		if (IS_GEMINILAKE(dev_priv) || INTEL_GEN(dev_priv) == 10) {
> -			if (plane_id != PLANE_SPRITE0)
> -				return false;
> -		} else {
> -			if (plane_id != PLANE_SPRITE0 || pipe == PIPE_C ||
> -			    IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> -				return false;
> -		}
> -	}
> +	if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> +		return false;

The current code is indeed ugly, but I'm afraid it doesn't always return
false for these platforms.

for instance plane_id = PLANE_SPRITE0

> +
> +	if (INTEL_GEN(dev_priv) == 9 && !IS_GEMINILAKE(dev_priv) && pipe == PIPE_C)
> +		return false;
> +
> +	if (plane_id == PLANE_CURSOR || plane_id != PLANE_SPRITE0)
> +		return false;
> +
>  	return true;
>  }
>  
> -- 
> 2.17.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Dhinakaran Pandiyan Aug. 24, 2018, 10:27 p.m. UTC | #2
On Fri, 2018-08-24 at 15:15 -0700, Rodrigo Vivi wrote:
> On Fri, Aug 24, 2018 at 01:38:55PM -0700, Dhinakaran Pandiyan wrote:
> > skl_plane_has_planar is hard to read, simplify the logic by
> > checking for
> > support in the order of platform, pipe and plane.
> > 
> > No change in functionality intended.
> > 
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_display.c | 27 +++++++++---------------
> > ---
> >  1 file changed, 9 insertions(+), 18 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_display.c
> > b/drivers/gpu/drm/i915/intel_display.c
> > index 30fdfd1a3037..7e18bd8b21b8 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -13622,24 +13622,15 @@ static bool skl_plane_has_fbc(struct
> > drm_i915_private *dev_priv,
> >  bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
> >  			  enum pipe pipe, enum plane_id plane_id)
> >  {
> > -	if (plane_id == PLANE_PRIMARY) {
> > -		if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> > -			return false;
> > -		else if ((INTEL_GEN(dev_priv) == 9 && pipe ==
> > PIPE_C) &&
> > -			 !IS_GEMINILAKE(dev_priv))
> > -			return false;
> > -	} else if (plane_id >= PLANE_SPRITE0) {
> > -		if (plane_id == PLANE_CURSOR)
> > -			return false;
> > -		if (IS_GEMINILAKE(dev_priv) || INTEL_GEN(dev_priv)
> > == 10) {
> > -			if (plane_id != PLANE_SPRITE0)
> > -				return false;
> > -		} else {
> > -			if (plane_id != PLANE_SPRITE0 || pipe ==
> > PIPE_C ||
> > -			    IS_SKYLAKE(dev_priv) ||
> > IS_BROXTON(dev_priv))
> > -				return false;
^ Here it does, or am I not seeing the paranthesis correctly.

> > -		}
> > -	}
> > +	if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> > +		return false;
> 
> The current code is indeed ugly, but I'm afraid it doesn't always
> return
> false for these platforms.
> 
> for instance plane_id = PLANE_SPRITE0
> 
> > +
> > +	if (INTEL_GEN(dev_priv) == 9 && !IS_GEMINILAKE(dev_priv)
> > && pipe == PIPE_C)
> > +		return false;
> > +
> > +	if (plane_id == PLANE_CURSOR || plane_id != PLANE_SPRITE0)
> > +		return false;
> > +
> >  	return true;
> >  }
> >  
> > -- 
> > 2.17.1
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Rodrigo Vivi Aug. 24, 2018, 11:16 p.m. UTC | #3
On Fri, Aug 24, 2018 at 10:27:09PM +0000, Pandiyan, Dhinakaran wrote:
> 
> 
> On Fri, 2018-08-24 at 15:15 -0700, Rodrigo Vivi wrote:
> > On Fri, Aug 24, 2018 at 01:38:55PM -0700, Dhinakaran Pandiyan wrote:
> > > skl_plane_has_planar is hard to read, simplify the logic by
> > > checking for
> > > support in the order of platform, pipe and plane.
> > > 
> > > No change in functionality intended.
> > > 
> > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/intel_display.c | 27 +++++++++---------------
> > > ---
> > >  1 file changed, 9 insertions(+), 18 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/intel_display.c
> > > b/drivers/gpu/drm/i915/intel_display.c
> > > index 30fdfd1a3037..7e18bd8b21b8 100644
> > > --- a/drivers/gpu/drm/i915/intel_display.c
> > > +++ b/drivers/gpu/drm/i915/intel_display.c
> > > @@ -13622,24 +13622,15 @@ static bool skl_plane_has_fbc(struct
> > > drm_i915_private *dev_priv,
> > >  bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
> > >  			  enum pipe pipe, enum plane_id plane_id)
> > >  {
> > > -	if (plane_id == PLANE_PRIMARY) {
> > > -		if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> > > -			return false;
> > > -		else if ((INTEL_GEN(dev_priv) == 9 && pipe ==
> > > PIPE_C) &&
> > > -			 !IS_GEMINILAKE(dev_priv))
> > > -			return false;
> > > -	} else if (plane_id >= PLANE_SPRITE0) {
> > > -		if (plane_id == PLANE_CURSOR)
> > > -			return false;
> > > -		if (IS_GEMINILAKE(dev_priv) || INTEL_GEN(dev_priv)
> > > == 10) {
> > > -			if (plane_id != PLANE_SPRITE0)
> > > -				return false;
> > > -		} else {
> > > -			if (plane_id != PLANE_SPRITE0 || pipe ==
> > > PIPE_C ||
> > > -			    IS_SKYLAKE(dev_priv) ||
> > > IS_BROXTON(dev_priv))
> > > -				return false;
> ^ Here it does, or am I not seeing the paranthesis correctly.

dam... it is so bad that I got confused when drawing a
table here...

nip: The name of the function seems wrong since "skl_" always
return false....
but I don't have a better suggestion ... maybe just "intel_"
and can be in a follow up patch...

so,

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> 
> > > -		}
> > > -	}
> > > +	if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> > > +		return false;
> > 
> > The current code is indeed ugly, but I'm afraid it doesn't always
> > return
> > false for these platforms.
> > 
> > for instance plane_id = PLANE_SPRITE0
> > 
> > > +
> > > +	if (INTEL_GEN(dev_priv) == 9 && !IS_GEMINILAKE(dev_priv)
> > > && pipe == PIPE_C)
> > > +		return false;
> > > +
> > > +	if (plane_id == PLANE_CURSOR || plane_id != PLANE_SPRITE0)
> > > +		return false;
> > > +
> > >  	return true;
> > >  }
> > >  
> > > -- 
> > > 2.17.1
> > > 
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Dhinakaran Pandiyan Aug. 24, 2018, 11:38 p.m. UTC | #4
On Fri, 2018-08-24 at 16:16 -0700, Rodrigo Vivi wrote:
> On Fri, Aug 24, 2018 at 10:27:09PM +0000, Pandiyan, Dhinakaran wrote:
> > 
> > 
> > On Fri, 2018-08-24 at 15:15 -0700, Rodrigo Vivi wrote:
> > > On Fri, Aug 24, 2018 at 01:38:55PM -0700, Dhinakaran Pandiyan
> > > wrote:
> > > > skl_plane_has_planar is hard to read, simplify the logic by
> > > > checking for
> > > > support in the order of platform, pipe and plane.
> > > > 
> > > > No change in functionality intended.
> > > > 
> > > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.c
> > > > om>
> > > > ---
> > > >  drivers/gpu/drm/i915/intel_display.c | 27 +++++++++-----------
> > > > ----
> > > > ---
> > > >  1 file changed, 9 insertions(+), 18 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/i915/intel_display.c
> > > > b/drivers/gpu/drm/i915/intel_display.c
> > > > index 30fdfd1a3037..7e18bd8b21b8 100644
> > > > --- a/drivers/gpu/drm/i915/intel_display.c
> > > > +++ b/drivers/gpu/drm/i915/intel_display.c
> > > > @@ -13622,24 +13622,15 @@ static bool skl_plane_has_fbc(struct
> > > > drm_i915_private *dev_priv,
> > > >  bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
> > > >  			  enum pipe pipe, enum plane_id
> > > > plane_id)
> > > >  {
> > > > -	if (plane_id == PLANE_PRIMARY) {
> > > > -		if (IS_SKYLAKE(dev_priv) ||
> > > > IS_BROXTON(dev_priv))
> > > > -			return false;
> > > > -		else if ((INTEL_GEN(dev_priv) == 9 && pipe ==
> > > > PIPE_C) &&
> > > > -			 !IS_GEMINILAKE(dev_priv))
> > > > -			return false;
> > > > -	} else if (plane_id >= PLANE_SPRITE0) {
> > > > -		if (plane_id == PLANE_CURSOR)
> > > > -			return false;
> > > > -		if (IS_GEMINILAKE(dev_priv) ||
> > > > INTEL_GEN(dev_priv)
> > > > == 10) {
> > > > -			if (plane_id != PLANE_SPRITE0)
> > > > -				return false;
> > > > -		} else {
> > > > -			if (plane_id != PLANE_SPRITE0 || pipe
> > > > ==
> > > > PIPE_C ||
> > > > -			    IS_SKYLAKE(dev_priv) ||
> > > > IS_BROXTON(dev_priv))
> > > > -				return false;
> > 
> > ^ Here it does, or am I not seeing the paranthesis correctly.
> 
> dam... it is so bad that I got confused when drawing a
> table here...
> 
> nip: The name of the function seems wrong since "skl_" always
> return false....
Looks like the first versions of the patch implementing nv12 did
include SKL, not clear what happened later.

> but I don't have a better suggestion ... maybe just "intel_"
> and can be in a follow up patch...
> 
> so,
> 
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

Thanks!

-DK

> 
> > 
> > > > -		}
> > > > -	}
> > > > +	if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> > > > +		return false;
> > > 
> > > The current code is indeed ugly, but I'm afraid it doesn't always
> > > return
> > > false for these platforms.
> > > 
> > > for instance plane_id = PLANE_SPRITE0
> > > 
> > > > +
> > > > +	if (INTEL_GEN(dev_priv) == 9 &&
> > > > !IS_GEMINILAKE(dev_priv)
> > > > && pipe == PIPE_C)
> > > > +		return false;
> > > > +
> > > > +	if (plane_id == PLANE_CURSOR || plane_id !=
> > > > PLANE_SPRITE0)
> > > > +		return false;
> > > > +
> > > >  	return true;
> > > >  }
> > > >  
> > > > -- 
> > > > 2.17.1
> > > > 
> > > > _______________________________________________
> > > > Intel-gfx mailing list
> > > > Intel-gfx@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Ville Syrjälä Aug. 27, 2018, 11:56 a.m. UTC | #5
On Fri, Aug 24, 2018 at 01:38:55PM -0700, Dhinakaran Pandiyan wrote:
> skl_plane_has_planar is hard to read, simplify the logic by checking for
> support in the order of platform, pipe and plane.

I had a slightly different version of this somewhere. But this one might
be even better.

> 
> No change in functionality intended.
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 27 +++++++++------------------
>  1 file changed, 9 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 30fdfd1a3037..7e18bd8b21b8 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -13622,24 +13622,15 @@ static bool skl_plane_has_fbc(struct drm_i915_private *dev_priv,
>  bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
>  			  enum pipe pipe, enum plane_id plane_id)
>  {
> -	if (plane_id == PLANE_PRIMARY) {
> -		if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> -			return false;
> -		else if ((INTEL_GEN(dev_priv) == 9 && pipe == PIPE_C) &&
> -			 !IS_GEMINILAKE(dev_priv))
> -			return false;
> -	} else if (plane_id >= PLANE_SPRITE0) {
> -		if (plane_id == PLANE_CURSOR)
> -			return false;
> -		if (IS_GEMINILAKE(dev_priv) || INTEL_GEN(dev_priv) == 10) {
> -			if (plane_id != PLANE_SPRITE0)
> -				return false;
> -		} else {
> -			if (plane_id != PLANE_SPRITE0 || pipe == PIPE_C ||
> -			    IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> -				return false;
> -		}
> -	}
> +	if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> +		return false;
> +
> +	if (INTEL_GEN(dev_priv) == 9 && !IS_GEMINILAKE(dev_priv) && pipe == PIPE_C)
> +		return false;
> +
> +	if (plane_id == PLANE_CURSOR || plane_id != PLANE_SPRITE0)
> +		return false;

The cursor check is rather redundant here. IIRC I put it at the very
start of the function to make it obvious that cursor never supports
this. But we could just as well drop the check entirely.

This also disables NV12 for the primary plane which isn't correct.

> +
>  	return true;
>  }
>  
> -- 
> 2.17.1
Dhinakaran Pandiyan Aug. 27, 2018, 5:53 p.m. UTC | #6
On Mon, 2018-08-27 at 14:56 +0300, Ville Syrjälä wrote:
> On Fri, Aug 24, 2018 at 01:38:55PM -0700, Dhinakaran Pandiyan wrote:
> > skl_plane_has_planar is hard to read, simplify the logic by
> > checking for
> > support in the order of platform, pipe and plane.
> 
> I had a slightly different version of this somewhere. But this one
> might
> be even better.
> 
> > 
> > No change in functionality intended.
> > 
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_display.c | 27 +++++++++---------------
> > ---
> >  1 file changed, 9 insertions(+), 18 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_display.c
> > b/drivers/gpu/drm/i915/intel_display.c
> > index 30fdfd1a3037..7e18bd8b21b8 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -13622,24 +13622,15 @@ static bool skl_plane_has_fbc(struct
> > drm_i915_private *dev_priv,
> >  bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
> >  			  enum pipe pipe, enum plane_id plane_id)
> >  {
> > -	if (plane_id == PLANE_PRIMARY) {
> > -		if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> > -			return false;
> > -		else if ((INTEL_GEN(dev_priv) == 9 && pipe ==
> > PIPE_C) &&
> > -			 !IS_GEMINILAKE(dev_priv))
> > -			return false;
> > -	} else if (plane_id >= PLANE_SPRITE0) {
> > -		if (plane_id == PLANE_CURSOR)
> > -			return false;
> > -		if (IS_GEMINILAKE(dev_priv) || INTEL_GEN(dev_priv)
> > == 10) {
> > -			if (plane_id != PLANE_SPRITE0)
> > -				return false;
> > -		} else {
> > -			if (plane_id != PLANE_SPRITE0 || pipe ==
> > PIPE_C ||
> > -			    IS_SKYLAKE(dev_priv) ||
> > IS_BROXTON(dev_priv))
> > -				return false;
> > -		}
> > -	}
> > +	if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
> > +		return false;
> > +
> > +	if (INTEL_GEN(dev_priv) == 9 && !IS_GEMINILAKE(dev_priv)
> > && pipe == PIPE_C)
> > +		return false;
> > +
> > +	if (plane_id == PLANE_CURSOR || plane_id != PLANE_SPRITE0)
> > +		return false;
> 
> The cursor check is rather redundant here. IIRC I put it at the very
> start of the function to make it obvious that cursor never supports
> this. But we could just as well drop the check entirely.
> 
> This also disables NV12 for the primary plane which isn't correct.
That's a good catch, thanks.
Switch the condition to
	if (plane_id != PLANE_PRIMARY && plane_id != PLANE_SPRITE0)
		
return false;
?

> 
> > +
> >  	return true;
> >  }
> >  
> > -- 
> > 2.17.1
> 
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 30fdfd1a3037..7e18bd8b21b8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13622,24 +13622,15 @@  static bool skl_plane_has_fbc(struct drm_i915_private *dev_priv,
 bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
 			  enum pipe pipe, enum plane_id plane_id)
 {
-	if (plane_id == PLANE_PRIMARY) {
-		if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
-			return false;
-		else if ((INTEL_GEN(dev_priv) == 9 && pipe == PIPE_C) &&
-			 !IS_GEMINILAKE(dev_priv))
-			return false;
-	} else if (plane_id >= PLANE_SPRITE0) {
-		if (plane_id == PLANE_CURSOR)
-			return false;
-		if (IS_GEMINILAKE(dev_priv) || INTEL_GEN(dev_priv) == 10) {
-			if (plane_id != PLANE_SPRITE0)
-				return false;
-		} else {
-			if (plane_id != PLANE_SPRITE0 || pipe == PIPE_C ||
-			    IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
-				return false;
-		}
-	}
+	if (IS_SKYLAKE(dev_priv) || IS_BROXTON(dev_priv))
+		return false;
+
+	if (INTEL_GEN(dev_priv) == 9 && !IS_GEMINILAKE(dev_priv) && pipe == PIPE_C)
+		return false;
+
+	if (plane_id == PLANE_CURSOR || plane_id != PLANE_SPRITE0)
+		return false;
+
 	return true;
 }