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_jessz...@quicinc.com>
Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 46 +++++------------------
 1 file changed, 10 insertions(+), 36 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index ab9f93f15536..32b4b08ffe35 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -1211,20 +1211,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)
 {
@@ -1394,7 +1380,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,
@@ -1422,35 +1407,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;
 
@@ -1480,8 +1458,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);
 }
-- 
2.39.2

Reply via email to