[Intel-gfx] [PATCH v4 09/12] drm/i915: Extract skl_universal_plane_init()

Lisovskiy, Stanislav stanislav.lisovskiy at intel.com
Fri Jul 6 11:20:53 UTC 2018


On Fri, 2018-06-01 at 21:39 +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> There's not much point in following the primary vs. sprite split
> for the SKL+ universal plane init code. The only difference is
> of our own doing in the form of the .check_plane(). Let's make
> a small exception for that little detail and otherwise share
> the same code to initialize all the universal planes.
> 
> Eventually we should eliminate the mess around .check_plane()
> as well, but for now let's be happy with some code reduction.
> 
> v2: Remember to set up plane->has_fbc
>     Make skl_plane_has_ccs() static
> v3: Rebase due to NV12, rename some variables
> v4: Don't leave the color_encoding/range props behind
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy at intel.com>

> ---
>  drivers/gpu/drm/i915/intel_display.c | 220 +++--------------------
> ------------
>  drivers/gpu/drm/i915/intel_drv.h     |  12 +-
>  drivers/gpu/drm/i915/intel_sprite.c  | 201 +++++++++++++++++++++++
> ---------
>  3 files changed, 167 insertions(+), 266 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c
> b/drivers/gpu/drm/i915/intel_display.c
> index 13de4e9e276a..2549fec31c79 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -73,55 +73,6 @@ static const uint64_t i9xx_format_modifiers[] = {
>  	DRM_FORMAT_MOD_INVALID
>  };
>  
> -static const uint32_t skl_primary_formats[] = {
> -	DRM_FORMAT_C8,
> -	DRM_FORMAT_RGB565,
> -	DRM_FORMAT_XRGB8888,
> -	DRM_FORMAT_XBGR8888,
> -	DRM_FORMAT_ARGB8888,
> -	DRM_FORMAT_ABGR8888,
> -	DRM_FORMAT_XRGB2101010,
> -	DRM_FORMAT_XBGR2101010,
> -	DRM_FORMAT_YUYV,
> -	DRM_FORMAT_YVYU,
> -	DRM_FORMAT_UYVY,
> -	DRM_FORMAT_VYUY,
> -};
> -
> -static const uint32_t skl_pri_planar_formats[] = {
> -	DRM_FORMAT_C8,
> -	DRM_FORMAT_RGB565,
> -	DRM_FORMAT_XRGB8888,
> -	DRM_FORMAT_XBGR8888,
> -	DRM_FORMAT_ARGB8888,
> -	DRM_FORMAT_ABGR8888,
> -	DRM_FORMAT_XRGB2101010,
> -	DRM_FORMAT_XBGR2101010,
> -	DRM_FORMAT_YUYV,
> -	DRM_FORMAT_YVYU,
> -	DRM_FORMAT_UYVY,
> -	DRM_FORMAT_VYUY,
> -	DRM_FORMAT_NV12,
> -};
> -
> -static const uint64_t skl_format_modifiers_noccs[] = {
> -	I915_FORMAT_MOD_Yf_TILED,
> -	I915_FORMAT_MOD_Y_TILED,
> -	I915_FORMAT_MOD_X_TILED,
> -	DRM_FORMAT_MOD_LINEAR,
> -	DRM_FORMAT_MOD_INVALID
> -};
> -
> -static const uint64_t skl_format_modifiers_ccs[] = {
> -	I915_FORMAT_MOD_Yf_TILED_CCS,
> -	I915_FORMAT_MOD_Y_TILED_CCS,
> -	I915_FORMAT_MOD_Yf_TILED,
> -	I915_FORMAT_MOD_Y_TILED,
> -	I915_FORMAT_MOD_X_TILED,
> -	DRM_FORMAT_MOD_LINEAR,
> -	DRM_FORMAT_MOD_INVALID
> -};
> -
>  /* Cursor formats */
>  static const uint32_t intel_cursor_formats[] = {
>  	DRM_FORMAT_ARGB8888,
> @@ -13273,57 +13224,6 @@ static bool
> i965_plane_format_mod_supported(struct drm_plane *_plane,
>  	}
>  }
>  
> -static bool skl_plane_format_mod_supported(struct drm_plane *_plane,
> -					   u32 format, u64 modifier)
> -{
> -	struct intel_plane *plane = to_intel_plane(_plane);
> -
> -	switch (modifier) {
> -	case DRM_FORMAT_MOD_LINEAR:
> -	case I915_FORMAT_MOD_X_TILED:
> -	case I915_FORMAT_MOD_Y_TILED:
> -	case I915_FORMAT_MOD_Yf_TILED:
> -		break;
> -	case I915_FORMAT_MOD_Y_TILED_CCS:
> -	case I915_FORMAT_MOD_Yf_TILED_CCS:
> -		if (!plane->has_ccs)
> -			return false;
> -		break;
> -	default:
> -		return false;
> -	}
> -
> -	switch (format) {
> -	case DRM_FORMAT_XRGB8888:
> -	case DRM_FORMAT_XBGR8888:
> -	case DRM_FORMAT_ARGB8888:
> -	case DRM_FORMAT_ABGR8888:
> -		if (modifier == I915_FORMAT_MOD_Yf_TILED_CCS ||
> -		    modifier == I915_FORMAT_MOD_Y_TILED_CCS)
> -			return true;
> -		/* fall through */
> -	case DRM_FORMAT_RGB565:
> -	case DRM_FORMAT_XRGB2101010:
> -	case DRM_FORMAT_XBGR2101010:
> -	case DRM_FORMAT_YUYV:
> -	case DRM_FORMAT_YVYU:
> -	case DRM_FORMAT_UYVY:
> -	case DRM_FORMAT_VYUY:
> -	case DRM_FORMAT_NV12:
> -		if (modifier == I915_FORMAT_MOD_Yf_TILED)
> -			return true;
> -		/* fall through */
> -	case DRM_FORMAT_C8:
> -		if (modifier == DRM_FORMAT_MOD_LINEAR ||
> -		    modifier == I915_FORMAT_MOD_X_TILED ||
> -		    modifier == I915_FORMAT_MOD_Y_TILED)
> -			return true;
> -		/* fall through */
> -	default:
> -		return false;
> -	}
> -}
> -
>  static bool intel_cursor_format_mod_supported(struct drm_plane
> *_plane,
>  					      u32 format, u64
> modifier)
>  {
> @@ -13331,17 +13231,6 @@ static bool
> intel_cursor_format_mod_supported(struct drm_plane *_plane,
>  		format == DRM_FORMAT_ARGB8888;
>  }
>  
> -static const struct drm_plane_funcs skl_plane_funcs = {
> -	.update_plane = drm_atomic_helper_update_plane,
> -	.disable_plane = drm_atomic_helper_disable_plane,
> -	.destroy = intel_plane_destroy,
> -	.atomic_get_property = intel_plane_atomic_get_property,
> -	.atomic_set_property = intel_plane_atomic_set_property,
> -	.atomic_duplicate_state = intel_plane_duplicate_state,
> -	.atomic_destroy_state = intel_plane_destroy_state,
> -	.format_mod_supported = skl_plane_format_mod_supported,
> -};
> -
>  static const struct drm_plane_funcs i965_plane_funcs = {
>  	.update_plane = drm_atomic_helper_update_plane,
>  	.disable_plane = drm_atomic_helper_disable_plane,
> @@ -13506,39 +13395,6 @@ static bool i9xx_plane_has_fbc(struct
> drm_i915_private *dev_priv,
>  		return i9xx_plane == PLANE_A;
>  }
>  
> -static bool skl_plane_has_fbc(struct drm_i915_private *dev_priv,
> -			      enum pipe pipe, enum plane_id
> plane_id)
> -{
> -	if (!HAS_FBC(dev_priv))
> -		return false;
> -
> -	return pipe == PIPE_A && plane_id == PLANE_PRIMARY;
> -}
> -
> -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;
> -		}
> -	}
> -	return true;
> -}
> -
>  static struct intel_plane *
>  intel_primary_plane_create(struct drm_i915_private *dev_priv, enum
> pipe pipe)
>  {
> @@ -13551,14 +13407,24 @@ intel_primary_plane_create(struct
> drm_i915_private *dev_priv, enum pipe pipe)
>  	const uint64_t *modifiers;
>  	int ret;
>  
> +	if (INTEL_GEN(dev_priv) >= 9) {
> +		primary = skl_universal_plane_create(dev_priv, pipe,
> +						     PLANE_PRIMARY);
> +		if (IS_ERR(primary))
> +			return primary;
> +
> +		/* FIXME unify */
> +		primary->check_plane = intel_check_primary_plane;
> +
> +		return primary;
> +	}
> +
>  	primary = intel_plane_alloc();
>  	if (IS_ERR(primary))
>  		return primary;
>  
>  	primary->can_scale = false;
>  	primary->max_downscale = 1;
> -	if (INTEL_GEN(dev_priv) >= 9)
> -		primary->can_scale = true;
>  	primary->pipe = pipe;
>  	/*
>  	 * On gen2/3 only plane A can do FBC, but the panel fitter
> and LVDS
> @@ -13571,14 +13437,7 @@ intel_primary_plane_create(struct
> drm_i915_private *dev_priv, enum pipe pipe)
>  	primary->id = PLANE_PRIMARY;
>  	primary->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, primary-
> >id);
>  
> -	if (INTEL_GEN(dev_priv) >= 9)
> -		primary->has_fbc = skl_plane_has_fbc(dev_priv,
> -						     primary->pipe,
> -						     primary->id);
> -	else
> -		primary->has_fbc = i9xx_plane_has_fbc(dev_priv,
> -						      primary-
> >i9xx_plane);
> -
> +	primary->has_fbc = i9xx_plane_has_fbc(dev_priv, primary-
> >i9xx_plane);
>  	if (primary->has_fbc) {
>  		struct intel_fbc *fbc = &dev_priv->fbc;
>  
> @@ -13587,29 +13446,7 @@ intel_primary_plane_create(struct
> drm_i915_private *dev_priv, enum pipe pipe)
>  
>  	primary->check_plane = intel_check_primary_plane;
>  
> -	if (INTEL_GEN(dev_priv) >= 9) {
> -		primary->has_ccs = skl_plane_has_ccs(dev_priv, pipe,
> -						     PLANE_PRIMARY);
> -
> -		if (skl_plane_has_planar(dev_priv, pipe,
> PLANE_PRIMARY)) {
> -			intel_primary_formats =
> skl_pri_planar_formats;
> -			num_formats =
> ARRAY_SIZE(skl_pri_planar_formats);
> -		} else {
> -			intel_primary_formats = skl_primary_formats;
> -			num_formats =
> ARRAY_SIZE(skl_primary_formats);
> -		}
> -
> -		if (primary->has_ccs)
> -			modifiers = skl_format_modifiers_ccs;
> -		else
> -			modifiers = skl_format_modifiers_noccs;
> -
> -		primary->update_plane = skl_update_plane;
> -		primary->disable_plane = skl_disable_plane;
> -		primary->get_hw_state = skl_plane_get_hw_state;
> -
> -		plane_funcs = &skl_plane_funcs;
> -	} else if (INTEL_GEN(dev_priv) >= 4) {
> +	if (INTEL_GEN(dev_priv) >= 4) {
>  		intel_primary_formats = i965_primary_formats;
>  		num_formats = ARRAY_SIZE(i965_primary_formats);
>  		modifiers = i9xx_format_modifiers;
> @@ -13633,14 +13470,7 @@ intel_primary_plane_create(struct
> drm_i915_private *dev_priv, enum pipe pipe)
>  
>  	possible_crtcs = BIT(pipe);
>  
> -	if (INTEL_GEN(dev_priv) >= 9)
> -		ret = drm_universal_plane_init(&dev_priv->drm,
> &primary->base,
> -					       possible_crtcs,
> plane_funcs,
> -					       intel_primary_formats
> , num_formats,
> -					       modifiers,
> -					       DRM_PLANE_TYPE_PRIMAR
> Y,
> -					       "plane 1%c",
> pipe_name(pipe));
> -	else if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv))
> +	if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv))
>  		ret = drm_universal_plane_init(&dev_priv->drm,
> &primary->base,
>  					       possible_crtcs,
> plane_funcs,
>  					       intel_primary_formats
> , num_formats,
> @@ -13658,16 +13488,7 @@ intel_primary_plane_create(struct
> drm_i915_private *dev_priv, enum pipe pipe)
>  	if (ret)
>  		goto fail;
>  
> -	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;
> -	} else if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) {
> +	if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) {
>  		supported_rotations =
>  			DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 |
>  			DRM_MODE_REFLECT_X;
> @@ -13683,15 +13504,6 @@ intel_primary_plane_create(struct
> drm_i915_private *dev_priv, enum pipe pipe)
>  						   DRM_MODE_ROTATE_0
> ,
>  						   supported_rotatio
> ns);
>  
> -	if (INTEL_GEN(dev_priv) >= 9)
> -		drm_plane_create_color_properties(&primary->base,
> -						  BIT(DRM_COLOR_YCBC
> R_BT601) |
> -						  BIT(DRM_COLOR_YCBC
> R_BT709),
> -						  BIT(DRM_COLOR_YCBC
> R_LIMITED_RANGE) |
> -						  BIT(DRM_COLOR_YCBC
> R_FULL_RANGE),
> -						  DRM_COLOR_YCBCR_BT
> 709,
> -						  DRM_COLOR_YCBCR_LI
> MITED_RANGE);
> -
>  	drm_plane_helper_add(&primary->base,
> &intel_plane_helper_funcs);
>  
>  	return primary;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index 88adf31ef1c2..3d5281a3cf1e 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -2081,18 +2081,12 @@ int intel_sprite_set_colorkey_ioctl(struct
> drm_device *dev, void *data,
>  				    struct drm_file *file_priv);
>  void intel_pipe_update_start(const struct intel_crtc_state
> *new_crtc_state);
>  void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state);
> -void skl_update_plane(struct intel_plane *plane,
> -		      const struct intel_crtc_state *crtc_state,
> -		      const struct intel_plane_state *plane_state);
> -void skl_disable_plane(struct intel_plane *plane, struct intel_crtc
> *crtc);
> -bool skl_plane_get_hw_state(struct intel_plane *plane, enum pipe
> *pipe);
> -bool skl_plane_has_ccs(struct drm_i915_private *dev_priv,
> -		       enum pipe pipe, enum plane_id plane_id);
>  bool intel_format_is_yuv(uint32_t format);
> -bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
> -			  enum pipe pipe, enum plane_id plane_id);
>  struct intel_plane *intel_plane_alloc(void);
>  void intel_plane_free(struct intel_plane *plane);
> +struct intel_plane *
> +skl_universal_plane_create(struct drm_i915_private *dev_priv,
> +			   enum pipe pipe, enum plane_id plane_id);
>  
>  
>  /* intel_tv.c */
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
> b/drivers/gpu/drm/i915/intel_sprite.c
> index cc78d6b14bf0..21b6ff63d15d 100644
> --- a/drivers/gpu/drm/i915/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> @@ -230,7 +230,7 @@ void intel_pipe_update_end(struct
> intel_crtc_state *new_crtc_state)
>  #endif
>  }
>  
> -void
> +static void
>  skl_update_plane(struct intel_plane *plane,
>  		 const struct intel_crtc_state *crtc_state,
>  		 const struct intel_plane_state *plane_state)
> @@ -330,7 +330,7 @@ skl_update_plane(struct intel_plane *plane,
>  	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
>  }
>  
> -void
> +static void
>  skl_disable_plane(struct intel_plane *plane, struct intel_crtc
> *crtc)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(plane-
> >base.dev);
> @@ -348,7 +348,7 @@ skl_disable_plane(struct intel_plane *plane,
> struct intel_crtc *crtc)
>  	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
>  }
>  
> -bool
> +static bool
>  skl_plane_get_hw_state(struct intel_plane *plane,
>  		       enum pipe *pipe)
>  {
> @@ -1440,8 +1440,41 @@ static const struct drm_plane_funcs
> skl_plane_funcs = {
>  	.format_mod_supported = skl_plane_format_mod_supported,
>  };
>  
> -bool skl_plane_has_ccs(struct drm_i915_private *dev_priv,
> -		       enum pipe pipe, enum plane_id plane_id)
> +static bool skl_plane_has_fbc(struct drm_i915_private *dev_priv,
> +			      enum pipe pipe, enum plane_id
> plane_id)
> +{
> +	if (!HAS_FBC(dev_priv))
> +		return false;
> +
> +	return pipe == PIPE_A && plane_id == PLANE_PRIMARY;
> +}
> +
> +static 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;
> +		}
> +	}
> +	return true;
> +}
> +
> +static bool skl_plane_has_ccs(struct drm_i915_private *dev_priv,
> +			      enum pipe pipe, enum plane_id
> plane_id)
>  {
>  	if (plane_id == PLANE_CURSOR)
>  		return false;
> @@ -1486,6 +1519,98 @@ void intel_plane_free(struct intel_plane
> *plane)
>  	kfree(plane);
>  }
>  
> +struct intel_plane *
> +skl_universal_plane_create(struct drm_i915_private *dev_priv,
> +			   enum pipe pipe, enum plane_id plane_id)
> +{
> +	struct intel_plane *plane;
> +	enum drm_plane_type plane_type;
> +	unsigned int supported_rotations;
> +	unsigned int possible_crtcs;
> +	const u64 *modifiers;
> +	const u32 *formats;
> +	int num_formats;
> +	int ret;
> +
> +	plane = intel_plane_alloc();
> +	if (IS_ERR(plane))
> +		return plane;
> +
> +	plane->pipe = pipe;
> +	plane->id = plane_id;
> +	plane->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, plane_id);
> +
> +	plane->can_scale = true;
> +
> +	plane->has_fbc = skl_plane_has_fbc(dev_priv, pipe,
> plane_id);
> +	if (plane->has_fbc) {
> +		struct intel_fbc *fbc = &dev_priv->fbc;
> +
> +		fbc->possible_framebuffer_bits |= plane-
> >frontbuffer_bit;
> +	}
> +
> +	plane->update_plane = skl_update_plane;
> +	plane->disable_plane = skl_disable_plane;
> +	plane->get_hw_state = skl_plane_get_hw_state;
> +
> +	if (skl_plane_has_planar(dev_priv, pipe, plane_id)) {
> +		formats = skl_planar_formats;
> +		num_formats = ARRAY_SIZE(skl_planar_formats);
> +	} else {
> +		formats = skl_plane_formats;
> +		num_formats = ARRAY_SIZE(skl_plane_formats);
> +	}
> +
> +	if (skl_plane_has_ccs(dev_priv, pipe, plane_id))
> +		modifiers = skl_plane_format_modifiers_ccs;
> +	else
> +		modifiers = skl_plane_format_modifiers_noccs;
> +
> +	if (plane_id == PLANE_PRIMARY)
> +		plane_type = DRM_PLANE_TYPE_PRIMARY;
> +	else
> +		plane_type = DRM_PLANE_TYPE_OVERLAY;
> +
> +	possible_crtcs = BIT(pipe);
> +
> +	ret = drm_universal_plane_init(&dev_priv->drm, &plane->base,
> +				       possible_crtcs,
> &skl_plane_funcs,
> +				       formats, num_formats,
> modifiers,
> +				       plane_type,
> +				       "plane %d%c", plane_id + 1,
> +				       pipe_name(pipe));
> +	if (ret)
> +		goto fail;
> +
> +	supported_rotations =
> +		DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 |
> +		DRM_MODE_ROTATE_180 | DRM_MODE_ROTATE_270;
> +
> +	if (INTEL_GEN(dev_priv) >= 10)
> +		supported_rotations |= DRM_MODE_REFLECT_X;
> +
> +	drm_plane_create_rotation_property(&plane->base,
> +					   DRM_MODE_ROTATE_0,
> +					   supported_rotations);
> +
> +	drm_plane_create_color_properties(&plane->base,
> +					  BIT(DRM_COLOR_YCBCR_BT601)
> |
> +					  BIT(DRM_COLOR_YCBCR_BT709)
> ,
> +					  BIT(DRM_COLOR_YCBCR_LIMITE
> D_RANGE) |
> +					  BIT(DRM_COLOR_YCBCR_FULL_R
> ANGE),
> +					  DRM_COLOR_YCBCR_BT709,
> +					  DRM_COLOR_YCBCR_LIMITED_RA
> NGE);
> +
> +	drm_plane_helper_add(&plane->base,
> &intel_plane_helper_funcs);
> +
> +	return plane;
> +
> +fail:
> +	intel_plane_free(plane);
> +
> +	return ERR_PTR(ret);
> +}
> +
>  struct intel_plane *
>  intel_sprite_plane_create(struct drm_i915_private *dev_priv,
>  			  enum pipe pipe, int plane)
> @@ -1499,36 +1624,23 @@ intel_sprite_plane_create(struct
> drm_i915_private *dev_priv,
>  	int num_plane_formats;
>  	int ret;
>  
> -	intel_plane = intel_plane_alloc();
> -	if (IS_ERR(intel_plane))
> -		return intel_plane;
> -
>  	if (INTEL_GEN(dev_priv) >= 9) {
> -		intel_plane->can_scale = true;
> -
> -		intel_plane->has_ccs = skl_plane_has_ccs(dev_priv,
> pipe,
> +		intel_plane = skl_universal_plane_create(dev_priv,
> pipe,
>  							 PLANE_SPRIT
> E0 + plane);
> +		if (IS_ERR(intel_plane))
> +			return intel_plane;
>  
> -		intel_plane->update_plane = skl_update_plane;
> -		intel_plane->disable_plane = skl_disable_plane;
> -		intel_plane->get_hw_state = skl_plane_get_hw_state;
> +		/* FIXME unify */
> +		intel_plane->check_plane = intel_check_sprite_plane;
>  
> -		if (skl_plane_has_planar(dev_priv, pipe,
> -					 PLANE_SPRITE0 + plane)) {
> -			plane_formats = skl_planar_formats;
> -			num_plane_formats =
> ARRAY_SIZE(skl_planar_formats);
> -		} else {
> -			plane_formats = skl_plane_formats;
> -			num_plane_formats =
> ARRAY_SIZE(skl_plane_formats);
> -		}
> +		return intel_plane;
> +	}
>  
> -		if (intel_plane->has_ccs)
> -			modifiers = skl_plane_format_modifiers_ccs;
> -		else
> -			modifiers =
> skl_plane_format_modifiers_noccs;
> +	intel_plane = intel_plane_alloc();
> +	if (IS_ERR(intel_plane))
> +		return intel_plane;
>  
> -		plane_funcs = &skl_plane_funcs;
> -	} else if (IS_VALLEYVIEW(dev_priv) ||
> IS_CHERRYVIEW(dev_priv)) {
> +	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
>  		intel_plane->can_scale = false;
>  		intel_plane->max_downscale = 1;
>  
> @@ -1581,16 +1693,7 @@ intel_sprite_plane_create(struct
> drm_i915_private *dev_priv,
>  		}
>  	}
>  
> -	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;
> -	} else if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) {
> +	if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) {
>  		supported_rotations =
>  			DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 |
>  			DRM_MODE_REFLECT_X;
> @@ -1606,20 +1709,12 @@ intel_sprite_plane_create(struct
> drm_i915_private *dev_priv,
>  
>  	possible_crtcs = BIT(pipe);
>  
> -	if (INTEL_GEN(dev_priv) >= 9)
> -		ret = drm_universal_plane_init(&dev_priv->drm,
> &intel_plane->base,
> -					       possible_crtcs,
> plane_funcs,
> -					       plane_formats,
> num_plane_formats,
> -					       modifiers,
> -					       DRM_PLANE_TYPE_OVERLA
> Y,
> -					       "plane %d%c", plane +
> 2, pipe_name(pipe));
> -	else
> -		ret = drm_universal_plane_init(&dev_priv->drm,
> &intel_plane->base,
> -					       possible_crtcs,
> plane_funcs,
> -					       plane_formats,
> num_plane_formats,
> -					       modifiers,
> -					       DRM_PLANE_TYPE_OVERLA
> Y,
> -					       "sprite %c",
> sprite_name(pipe, plane));
> +	ret = drm_universal_plane_init(&dev_priv->drm, &intel_plane-
> >base,
> +				       possible_crtcs, plane_funcs,
> +				       plane_formats,
> num_plane_formats,
> +				       modifiers,
> +				       DRM_PLANE_TYPE_OVERLAY,
> +				       "sprite %c",
> sprite_name(pipe, plane));
>  	if (ret)
>  		goto fail;
>  
-- 
Best Regards,

Lisovskiy Stanislav


More information about the Intel-gfx mailing list