drm/i915: Introduce intel_plane_alloc()
Pull the common plane+plane_state allocation into a small helper. Reduces the amount of boilerplate in the plane initialization functions. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181005125817.22576-9-ville.syrjala@linux.intel.com
This commit is contained in:
parent
2d72dc8b7c
commit
c539b579b6
|
@ -13759,8 +13759,7 @@ bool skl_plane_has_planar(struct drm_i915_private *dev_priv,
|
|||
static struct intel_plane *
|
||||
intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
|
||||
{
|
||||
struct intel_plane *primary = NULL;
|
||||
struct intel_plane_state *state = NULL;
|
||||
struct intel_plane *primary;
|
||||
const struct drm_plane_funcs *plane_funcs;
|
||||
const uint32_t *intel_primary_formats;
|
||||
unsigned int supported_rotations;
|
||||
|
@ -13769,19 +13768,9 @@ intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
|
|||
const uint64_t *modifiers;
|
||||
int ret;
|
||||
|
||||
primary = kzalloc(sizeof(*primary), GFP_KERNEL);
|
||||
if (!primary) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
state = intel_create_plane_state(&primary->base);
|
||||
if (!state) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
primary->base.state = &state->base;
|
||||
primary = intel_plane_alloc();
|
||||
if (IS_ERR(primary))
|
||||
return primary;
|
||||
|
||||
primary->pipe = pipe;
|
||||
/*
|
||||
|
@ -13932,8 +13921,7 @@ intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
|
|||
return primary;
|
||||
|
||||
fail:
|
||||
kfree(state);
|
||||
kfree(primary);
|
||||
intel_plane_free(primary);
|
||||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
@ -13942,24 +13930,13 @@ static struct intel_plane *
|
|||
intel_cursor_plane_create(struct drm_i915_private *dev_priv,
|
||||
enum pipe pipe)
|
||||
{
|
||||
struct intel_plane *cursor = NULL;
|
||||
struct intel_plane_state *state = NULL;
|
||||
unsigned int possible_crtcs;
|
||||
struct intel_plane *cursor;
|
||||
int ret;
|
||||
|
||||
cursor = kzalloc(sizeof(*cursor), GFP_KERNEL);
|
||||
if (!cursor) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
state = intel_create_plane_state(&cursor->base);
|
||||
if (!state) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
cursor->base.state = &state->base;
|
||||
cursor = intel_plane_alloc();
|
||||
if (IS_ERR(cursor))
|
||||
return cursor;
|
||||
|
||||
cursor->pipe = pipe;
|
||||
cursor->i9xx_plane = (enum i9xx_plane_id) pipe;
|
||||
|
@ -14009,8 +13986,7 @@ intel_cursor_plane_create(struct drm_i915_private *dev_priv,
|
|||
return cursor;
|
||||
|
||||
fail:
|
||||
kfree(state);
|
||||
kfree(cursor);
|
||||
intel_plane_free(cursor);
|
||||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
|
|
@ -2141,6 +2141,8 @@ int skl_plane_check(struct intel_crtc_state *crtc_state,
|
|||
int intel_plane_check_stride(const struct intel_plane_state *plane_state);
|
||||
int intel_plane_check_src_coordinates(struct intel_plane_state *plane_state);
|
||||
int chv_plane_check_rotation(const struct intel_plane_state *plane_state);
|
||||
struct intel_plane *intel_plane_alloc(void);
|
||||
void intel_plane_free(struct intel_plane *plane);
|
||||
|
||||
/* intel_tv.c */
|
||||
void intel_tv_init(struct drm_i915_private *dev_priv);
|
||||
|
|
|
@ -1793,12 +1793,40 @@ bool skl_plane_has_ccs(struct drm_i915_private *dev_priv,
|
|||
plane_id == PLANE_SPRITE0);
|
||||
}
|
||||
|
||||
struct intel_plane *intel_plane_alloc(void)
|
||||
{
|
||||
struct intel_plane_state *plane_state;
|
||||
struct intel_plane *plane;
|
||||
|
||||
plane = kzalloc(sizeof(*plane), GFP_KERNEL);
|
||||
if (!plane)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
plane_state = intel_create_plane_state(&plane->base);
|
||||
if (!plane_state) {
|
||||
kfree(plane);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
plane->base.state = &plane_state->base;
|
||||
|
||||
return plane;
|
||||
}
|
||||
|
||||
void intel_plane_free(struct intel_plane *plane)
|
||||
{
|
||||
struct intel_plane_state *plane_state =
|
||||
to_intel_plane_state(plane->base.state);
|
||||
|
||||
kfree(plane_state);
|
||||
kfree(plane);
|
||||
}
|
||||
|
||||
struct intel_plane *
|
||||
intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
||||
enum pipe pipe, int plane)
|
||||
{
|
||||
struct intel_plane *intel_plane = NULL;
|
||||
struct intel_plane_state *state = NULL;
|
||||
struct intel_plane *intel_plane;
|
||||
const struct drm_plane_funcs *plane_funcs;
|
||||
unsigned long possible_crtcs;
|
||||
const uint32_t *plane_formats;
|
||||
|
@ -1807,18 +1835,9 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
|||
int num_plane_formats;
|
||||
int ret;
|
||||
|
||||
intel_plane = kzalloc(sizeof(*intel_plane), GFP_KERNEL);
|
||||
if (!intel_plane) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
state = intel_create_plane_state(&intel_plane->base);
|
||||
if (!state) {
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
intel_plane->base.state = &state->base;
|
||||
intel_plane = intel_plane_alloc();
|
||||
if (IS_ERR(intel_plane))
|
||||
return intel_plane;
|
||||
|
||||
if (INTEL_GEN(dev_priv) >= 9) {
|
||||
intel_plane->has_ccs = skl_plane_has_ccs(dev_priv, pipe,
|
||||
|
@ -1957,8 +1976,7 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
|||
return intel_plane;
|
||||
|
||||
fail:
|
||||
kfree(state);
|
||||
kfree(intel_plane);
|
||||
intel_plane_free(intel_plane);
|
||||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue