mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 21:44:23 -04:00
drm/msm/dpu: use drmm-managed allocation for dpu_plane
Change struct dpu_plane allocation to use drmm_universal_plane_alloc(). This removes the need to perform any actions on plane destruction. Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Patchwork: https://patchwork.freedesktop.org/patch/570042/ Link: https://lore.kernel.org/r/20231201211845.1026967-10-dmitry.baryshkov@linaro.org
This commit is contained in:
@@ -1214,20 +1214,6 @@ static void dpu_plane_atomic_update(struct drm_plane *plane,
|
||||
}
|
||||
}
|
||||
|
||||
static void dpu_plane_destroy(struct drm_plane *plane)
|
||||
{
|
||||
struct dpu_plane *pdpu = plane ? to_dpu_plane(plane) : NULL;
|
||||
|
||||
DPU_DEBUG_PLANE(pdpu, "\n");
|
||||
|
||||
if (pdpu) {
|
||||
/* this will destroy the states as well */
|
||||
drm_plane_cleanup(plane);
|
||||
|
||||
kfree(pdpu);
|
||||
}
|
||||
}
|
||||
|
||||
static void dpu_plane_destroy_state(struct drm_plane *plane,
|
||||
struct drm_plane_state *state)
|
||||
{
|
||||
@@ -1397,7 +1383,6 @@ static bool dpu_plane_format_mod_supported(struct drm_plane *plane,
|
||||
static const struct drm_plane_funcs dpu_plane_funcs = {
|
||||
.update_plane = drm_atomic_helper_update_plane,
|
||||
.disable_plane = drm_atomic_helper_disable_plane,
|
||||
.destroy = dpu_plane_destroy,
|
||||
.reset = dpu_plane_reset,
|
||||
.atomic_duplicate_state = dpu_plane_duplicate_state,
|
||||
.atomic_destroy_state = dpu_plane_destroy_state,
|
||||
@@ -1425,35 +1410,28 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev,
|
||||
struct dpu_hw_sspp *pipe_hw;
|
||||
uint32_t num_formats;
|
||||
uint32_t supported_rotations;
|
||||
int ret = -EINVAL;
|
||||
|
||||
/* create and zero local structure */
|
||||
pdpu = kzalloc(sizeof(*pdpu), GFP_KERNEL);
|
||||
if (!pdpu) {
|
||||
DPU_ERROR("[%u]failed to allocate local plane struct\n", pipe);
|
||||
ret = -ENOMEM;
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/* cache local stuff for later */
|
||||
plane = &pdpu->base;
|
||||
pdpu->pipe = pipe;
|
||||
int ret;
|
||||
|
||||
/* initialize underlying h/w driver */
|
||||
pipe_hw = dpu_rm_get_sspp(&kms->rm, pipe);
|
||||
if (!pipe_hw || !pipe_hw->cap || !pipe_hw->cap->sblk) {
|
||||
DPU_ERROR("[%u]SSPP is invalid\n", pipe);
|
||||
goto clean_plane;
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
format_list = pipe_hw->cap->sblk->format_list;
|
||||
num_formats = pipe_hw->cap->sblk->num_formats;
|
||||
|
||||
ret = drm_universal_plane_init(dev, plane, 0xff, &dpu_plane_funcs,
|
||||
pdpu = drmm_universal_plane_alloc(dev, struct dpu_plane, base,
|
||||
0xff, &dpu_plane_funcs,
|
||||
format_list, num_formats,
|
||||
supported_format_modifiers, type, NULL);
|
||||
if (ret)
|
||||
goto clean_plane;
|
||||
if (IS_ERR(pdpu))
|
||||
return ERR_CAST(pdpu);
|
||||
|
||||
/* cache local stuff for later */
|
||||
plane = &pdpu->base;
|
||||
pdpu->pipe = pipe;
|
||||
|
||||
pdpu->catalog = kms->catalog;
|
||||
|
||||
@@ -1483,8 +1461,4 @@ struct drm_plane *dpu_plane_init(struct drm_device *dev,
|
||||
DPU_DEBUG("%s created for pipe:%u id:%u\n", plane->name,
|
||||
pipe, plane->base.id);
|
||||
return plane;
|
||||
|
||||
clean_plane:
|
||||
kfree(pdpu);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user