On Fri, 2018-06-01 at 21:39 +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrj...@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.syrj...@linux.intel.com>

Reviewed-by: Stanislav Lisovskiy <stanislav.lisovs...@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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to