[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