drm/msm/dpu: use devres-managed allocation for MDP TOP
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Fri, 1 Dec 2023 21:18:37 +0000 (00:18 +0300)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tue, 5 Dec 2023 19:14:33 +0000 (22:14 +0300)
Use devm_kzalloc to create MDP TOP structure. This allows us to remove
corresponding kfree and drop dpu_hw_mdp_destroy() function.

Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/570047/
Link: https://lore.kernel.org/r/20231201211845.1026967-6-dmitry.baryshkov@linaro.org
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.h
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c

index 24e734768a727663bb16184aadd1f130dbbb82c0..05e48cf4ec1d24a3e7f03432c25b04872af8d26d 100644 (file)
@@ -2,6 +2,8 @@
 /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
  */
 
+#include <drm/drm_managed.h>
+
 #include "dpu_hwio.h"
 #include "dpu_hw_catalog.h"
 #include "dpu_hw_top.h"
@@ -247,16 +249,17 @@ static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
                ops->intf_audio_select = dpu_hw_intf_audio_select;
 }
 
-struct dpu_hw_mdp *dpu_hw_mdptop_init(const struct dpu_mdp_cfg *cfg,
-               void __iomem *addr,
-               const struct dpu_mdss_cfg *m)
+struct dpu_hw_mdp *dpu_hw_mdptop_init(struct drm_device *dev,
+                                     const struct dpu_mdp_cfg *cfg,
+                                     void __iomem *addr,
+                                     const struct dpu_mdss_cfg *m)
 {
        struct dpu_hw_mdp *mdp;
 
        if (!addr)
                return ERR_PTR(-EINVAL);
 
-       mdp = kzalloc(sizeof(*mdp), GFP_KERNEL);
+       mdp = drmm_kzalloc(dev, sizeof(*mdp), GFP_KERNEL);
        if (!mdp)
                return ERR_PTR(-ENOMEM);
 
@@ -271,9 +274,3 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(const struct dpu_mdp_cfg *cfg,
 
        return mdp;
 }
-
-void dpu_hw_mdp_destroy(struct dpu_hw_mdp *mdp)
-{
-       kfree(mdp);
-}
-
index 8b1463d2b2f0b0cba20d81ab7591f8d433b37c62..6f3dc98087dfeae3b997d4822f6c59e4398d05e6 100644 (file)
@@ -145,13 +145,15 @@ struct dpu_hw_mdp {
 
 /**
  * dpu_hw_mdptop_init - initializes the top driver for the passed config
+ * @dev:  Corresponding device for devres management
  * @cfg:  MDP TOP configuration from catalog
  * @addr: Mapped register io address of MDP
  * @m:    Pointer to mdss catalog data
  */
-struct dpu_hw_mdp *dpu_hw_mdptop_init(const struct dpu_mdp_cfg *cfg,
-               void __iomem *addr,
-               const struct dpu_mdss_cfg *m);
+struct dpu_hw_mdp *dpu_hw_mdptop_init(struct drm_device *dev,
+                                     const struct dpu_mdp_cfg *cfg,
+                                     void __iomem *addr,
+                                     const struct dpu_mdss_cfg *m);
 
 void dpu_hw_mdp_destroy(struct dpu_hw_mdp *mdp);
 
index a1753c54aaacbf2b11f1f49ac8a8f33fe907bb7d..5fcb256302b2fc0e9ab8778b8c0760bb096fcde3 100644 (file)
@@ -810,8 +810,6 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
 
        dpu_kms->catalog = NULL;
 
-       if (dpu_kms->hw_mdp)
-               dpu_hw_mdp_destroy(dpu_kms->hw_mdp);
        dpu_kms->hw_mdp = NULL;
 }
 
@@ -1090,7 +1088,8 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
 
        dpu_kms->rm_init = true;
 
-       dpu_kms->hw_mdp = dpu_hw_mdptop_init(dpu_kms->catalog->mdp,
+       dpu_kms->hw_mdp = dpu_hw_mdptop_init(dev,
+                                            dpu_kms->catalog->mdp,
                                             dpu_kms->mmio,
                                             dpu_kms->catalog);
        if (IS_ERR(dpu_kms->hw_mdp)) {