Message ID | 20230707231251.3849701-12-dmitry.baryshkov@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | drm/msm/dpu: use managed memory allocations | expand |
On 7/7/2023 4:12 PM, Dmitry Baryshkov wrote: > Change struct allocation of encoder's phys backend data to use > drmm_kzalloc(). This removes the need to perform any actions on encoder > destruction. > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 9 ++++---- > .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 8 ++++--- > .../drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c | 15 ++++--------- > .../drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 13 ++++-------- > .../drm/msm/disp/dpu1/dpu_encoder_phys_wb.c | 21 ++++--------------- > 5 files changed, 22 insertions(+), 44 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > index 493905a5b63a..7c2cd9ce8acd 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > @@ -2199,6 +2199,7 @@ static void dpu_encoder_early_unregister(struct drm_encoder *encoder) > } > > static int dpu_encoder_virt_add_phys_encs( > + struct drm_device *dev, > struct msm_display_info *disp_info, > struct dpu_encoder_virt *dpu_enc, > struct dpu_enc_phys_init_params *params) > @@ -2220,7 +2221,7 @@ static int dpu_encoder_virt_add_phys_encs( > > > if (disp_info->intf_type == INTF_WB) { > - enc = dpu_encoder_phys_wb_init(params); > + enc = dpu_encoder_phys_wb_init(dev, params); > > if (IS_ERR(enc)) { > DPU_ERROR_ENC(dpu_enc, "failed to init wb enc: %ld\n", > @@ -2231,7 +2232,7 @@ static int dpu_encoder_virt_add_phys_encs( > dpu_enc->phys_encs[dpu_enc->num_phys_encs] = enc; > ++dpu_enc->num_phys_encs; > } else if (disp_info->is_cmd_mode) { > - enc = dpu_encoder_phys_cmd_init(params); > + enc = dpu_encoder_phys_cmd_init(dev, params); > > if (IS_ERR(enc)) { > DPU_ERROR_ENC(dpu_enc, "failed to init cmd enc: %ld\n", > @@ -2242,7 +2243,7 @@ static int dpu_encoder_virt_add_phys_encs( > dpu_enc->phys_encs[dpu_enc->num_phys_encs] = enc; > ++dpu_enc->num_phys_encs; > } else { > - enc = dpu_encoder_phys_vid_init(params); > + enc = dpu_encoder_phys_vid_init(dev, params); > > if (IS_ERR(enc)) { > DPU_ERROR_ENC(dpu_enc, "failed to init vid enc: %ld\n", > @@ -2333,7 +2334,7 @@ static int dpu_encoder_setup_display(struct dpu_encoder_virt *dpu_enc, > break; > } > > - ret = dpu_encoder_virt_add_phys_encs(disp_info, > + ret = dpu_encoder_virt_add_phys_encs(dpu_kms->dev, disp_info, > dpu_enc, &phys_params); > if (ret) { > DPU_ERROR_ENC(dpu_enc, "failed to add phys encs\n"); > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h > index d48558ede488..4fb0d95f3061 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h > @@ -281,22 +281,24 @@ struct dpu_encoder_wait_info { > * @p: Pointer to init params structure > * Return: Error code or newly allocated encoder > */ > -struct dpu_encoder_phys *dpu_encoder_phys_vid_init( > +struct dpu_encoder_phys *dpu_encoder_phys_vid_init(struct drm_device *dev, > struct dpu_enc_phys_init_params *p); > > /** > * dpu_encoder_phys_cmd_init - Construct a new command mode physical encoder > + * @dev: Corresponding device for devres management > * @p: Pointer to init params structure > * Return: Error code or newly allocated encoder > */ > -struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( > +struct dpu_encoder_phys *dpu_encoder_phys_cmd_init(struct drm_device *dev, > struct dpu_enc_phys_init_params *p); > > /** > * dpu_encoder_phys_wb_init - initialize writeback encoder > + * @dev: Corresponding device for devres management > * @init: Pointer to init info structure with initialization params > */ > -struct dpu_encoder_phys *dpu_encoder_phys_wb_init( > +struct dpu_encoder_phys *dpu_encoder_phys_wb_init(struct drm_device *dev, > struct dpu_enc_phys_init_params *p); > > /** > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c > index b856c6286c85..2958b64e6e5e 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c > @@ -13,6 +13,8 @@ > #include "dpu_trace.h" > #include "disp/msm_disp_snapshot.h" > > +#include <drm/drm_managed.h> > + > #define DPU_DEBUG_CMDENC(e, fmt, ...) DPU_DEBUG("enc%d intf%d " fmt, \ > (e) && (e)->base.parent ? \ > (e)->base.parent->base.id : -1, \ > @@ -563,14 +565,6 @@ static void dpu_encoder_phys_cmd_disable(struct dpu_encoder_phys *phys_enc) > phys_enc->enable_state = DPU_ENC_DISABLED; > } > > -static void dpu_encoder_phys_cmd_destroy(struct dpu_encoder_phys *phys_enc) > -{ > - struct dpu_encoder_phys_cmd *cmd_enc = > - to_dpu_encoder_phys_cmd(phys_enc); > - > - kfree(cmd_enc); > -} > - > static void dpu_encoder_phys_cmd_prepare_for_kickoff( > struct dpu_encoder_phys *phys_enc) > { > @@ -736,7 +730,6 @@ static void dpu_encoder_phys_cmd_init_ops( > ops->atomic_mode_set = dpu_encoder_phys_cmd_atomic_mode_set; > ops->enable = dpu_encoder_phys_cmd_enable; > ops->disable = dpu_encoder_phys_cmd_disable; > - ops->destroy = dpu_encoder_phys_cmd_destroy; > ops->control_vblank_irq = dpu_encoder_phys_cmd_control_vblank_irq; > ops->wait_for_commit_done = dpu_encoder_phys_cmd_wait_for_commit_done; > ops->prepare_for_kickoff = dpu_encoder_phys_cmd_prepare_for_kickoff; > @@ -751,7 +744,7 @@ static void dpu_encoder_phys_cmd_init_ops( > ops->get_line_count = dpu_encoder_phys_cmd_get_line_count; > } > > -struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( > +struct dpu_encoder_phys *dpu_encoder_phys_cmd_init(struct drm_device *dev, > struct dpu_enc_phys_init_params *p) > { > struct dpu_encoder_phys *phys_enc = NULL; > @@ -759,7 +752,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( > > DPU_DEBUG("intf\n"); > > - cmd_enc = kzalloc(sizeof(*cmd_enc), GFP_KERNEL); > + cmd_enc = drmm_kzalloc(dev, sizeof(*cmd_enc), GFP_KERNEL); > if (!cmd_enc) { > DPU_ERROR("failed to allocate\n"); > return ERR_PTR(-ENOMEM); > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c > index 662d74ded1b9..bdfce4ccc0a7 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c > @@ -11,6 +11,8 @@ > #include "dpu_trace.h" > #include "disp/msm_disp_snapshot.h" > > +#include <drm/drm_managed.h> > + > #define DPU_DEBUG_VIDENC(e, fmt, ...) DPU_DEBUG("enc%d intf%d " fmt, \ > (e) && (e)->parent ? \ > (e)->parent->base.id : -1, \ > @@ -438,12 +440,6 @@ static void dpu_encoder_phys_vid_enable(struct dpu_encoder_phys *phys_enc) > phys_enc->enable_state = DPU_ENC_ENABLING; > } > > -static void dpu_encoder_phys_vid_destroy(struct dpu_encoder_phys *phys_enc) > -{ > - DPU_DEBUG_VIDENC(phys_enc, "\n"); > - kfree(phys_enc); > -} > - > static int dpu_encoder_phys_vid_wait_for_vblank( > struct dpu_encoder_phys *phys_enc) > { > @@ -681,7 +677,6 @@ static void dpu_encoder_phys_vid_init_ops(struct dpu_encoder_phys_ops *ops) > ops->atomic_mode_set = dpu_encoder_phys_vid_atomic_mode_set; > ops->enable = dpu_encoder_phys_vid_enable; > ops->disable = dpu_encoder_phys_vid_disable; > - ops->destroy = dpu_encoder_phys_vid_destroy; > ops->control_vblank_irq = dpu_encoder_phys_vid_control_vblank_irq; > ops->wait_for_commit_done = dpu_encoder_phys_vid_wait_for_commit_done; > ops->wait_for_vblank = dpu_encoder_phys_vid_wait_for_vblank; > @@ -694,7 +689,7 @@ static void dpu_encoder_phys_vid_init_ops(struct dpu_encoder_phys_ops *ops) > ops->get_frame_count = dpu_encoder_phys_vid_get_frame_count; > } > > -struct dpu_encoder_phys *dpu_encoder_phys_vid_init( > +struct dpu_encoder_phys *dpu_encoder_phys_vid_init(struct drm_device *dev, > struct dpu_enc_phys_init_params *p) > { > struct dpu_encoder_phys *phys_enc = NULL; > @@ -704,7 +699,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_vid_init( > return ERR_PTR(-EINVAL); > } > > - phys_enc = kzalloc(sizeof(*phys_enc), GFP_KERNEL); > + phys_enc = drmm_kzalloc(dev, sizeof(*phys_enc), GFP_KERNEL); > if (!phys_enc) { > DPU_ERROR("failed to create encoder due to memory allocation error\n"); > return ERR_PTR(-ENOMEM); > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c > index a466ff70a4d6..9a44a1575682 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c > @@ -8,6 +8,7 @@ > #include <linux/debugfs.h> > > #include <drm/drm_framebuffer.h> > +#include <drm/drm_managed.h> > > #include "dpu_encoder_phys.h" > #include "dpu_formats.h" > @@ -552,20 +553,6 @@ static void dpu_encoder_phys_wb_disable(struct dpu_encoder_phys *phys_enc) > phys_enc->enable_state = DPU_ENC_DISABLED; > } > > -/** > - * dpu_encoder_phys_wb_destroy - destroy writeback encoder > - * @phys_enc: Pointer to physical encoder > - */ > -static void dpu_encoder_phys_wb_destroy(struct dpu_encoder_phys *phys_enc) > -{ > - if (!phys_enc) > - return; > - > - DPU_DEBUG("[wb:%d]\n", phys_enc->hw_wb->idx - WB_0); > - > - kfree(phys_enc); > -} > - > static void dpu_encoder_phys_wb_prepare_wb_job(struct dpu_encoder_phys *phys_enc, > struct drm_writeback_job *job) > { > @@ -661,7 +648,6 @@ static void dpu_encoder_phys_wb_init_ops(struct dpu_encoder_phys_ops *ops) > ops->atomic_mode_set = dpu_encoder_phys_wb_atomic_mode_set; > ops->enable = dpu_encoder_phys_wb_enable; > ops->disable = dpu_encoder_phys_wb_disable; > - ops->destroy = dpu_encoder_phys_wb_destroy; > ops->atomic_check = dpu_encoder_phys_wb_atomic_check; > ops->wait_for_commit_done = dpu_encoder_phys_wb_wait_for_commit_done; > ops->prepare_for_kickoff = dpu_encoder_phys_wb_prepare_for_kickoff; > @@ -677,9 +663,10 @@ static void dpu_encoder_phys_wb_init_ops(struct dpu_encoder_phys_ops *ops) > > /** > * dpu_encoder_phys_wb_init - initialize writeback encoder > + * @dev: Corresponding device for devres management > * @p: Pointer to init info structure with initialization params > */ > -struct dpu_encoder_phys *dpu_encoder_phys_wb_init( > +struct dpu_encoder_phys *dpu_encoder_phys_wb_init(struct drm_device *dev, > struct dpu_enc_phys_init_params *p) > { > struct dpu_encoder_phys *phys_enc = NULL; > @@ -692,7 +679,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_wb_init( > return ERR_PTR(-EINVAL); > } > > - wb_enc = kzalloc(sizeof(*wb_enc), GFP_KERNEL); > + wb_enc = drmm_kzalloc(dev, sizeof(*wb_enc), GFP_KERNEL); > if (!wb_enc) { > DPU_ERROR("failed to allocate wb phys_enc enc\n"); > return ERR_PTR(-ENOMEM); > -- > 2.39.2 >
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c index 493905a5b63a..7c2cd9ce8acd 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -2199,6 +2199,7 @@ static void dpu_encoder_early_unregister(struct drm_encoder *encoder) } static int dpu_encoder_virt_add_phys_encs( + struct drm_device *dev, struct msm_display_info *disp_info, struct dpu_encoder_virt *dpu_enc, struct dpu_enc_phys_init_params *params) @@ -2220,7 +2221,7 @@ static int dpu_encoder_virt_add_phys_encs( if (disp_info->intf_type == INTF_WB) { - enc = dpu_encoder_phys_wb_init(params); + enc = dpu_encoder_phys_wb_init(dev, params); if (IS_ERR(enc)) { DPU_ERROR_ENC(dpu_enc, "failed to init wb enc: %ld\n", @@ -2231,7 +2232,7 @@ static int dpu_encoder_virt_add_phys_encs( dpu_enc->phys_encs[dpu_enc->num_phys_encs] = enc; ++dpu_enc->num_phys_encs; } else if (disp_info->is_cmd_mode) { - enc = dpu_encoder_phys_cmd_init(params); + enc = dpu_encoder_phys_cmd_init(dev, params); if (IS_ERR(enc)) { DPU_ERROR_ENC(dpu_enc, "failed to init cmd enc: %ld\n", @@ -2242,7 +2243,7 @@ static int dpu_encoder_virt_add_phys_encs( dpu_enc->phys_encs[dpu_enc->num_phys_encs] = enc; ++dpu_enc->num_phys_encs; } else { - enc = dpu_encoder_phys_vid_init(params); + enc = dpu_encoder_phys_vid_init(dev, params); if (IS_ERR(enc)) { DPU_ERROR_ENC(dpu_enc, "failed to init vid enc: %ld\n", @@ -2333,7 +2334,7 @@ static int dpu_encoder_setup_display(struct dpu_encoder_virt *dpu_enc, break; } - ret = dpu_encoder_virt_add_phys_encs(disp_info, + ret = dpu_encoder_virt_add_phys_encs(dpu_kms->dev, disp_info, dpu_enc, &phys_params); if (ret) { DPU_ERROR_ENC(dpu_enc, "failed to add phys encs\n"); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h index d48558ede488..4fb0d95f3061 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h @@ -281,22 +281,24 @@ struct dpu_encoder_wait_info { * @p: Pointer to init params structure * Return: Error code or newly allocated encoder */ -struct dpu_encoder_phys *dpu_encoder_phys_vid_init( +struct dpu_encoder_phys *dpu_encoder_phys_vid_init(struct drm_device *dev, struct dpu_enc_phys_init_params *p); /** * dpu_encoder_phys_cmd_init - Construct a new command mode physical encoder + * @dev: Corresponding device for devres management * @p: Pointer to init params structure * Return: Error code or newly allocated encoder */ -struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( +struct dpu_encoder_phys *dpu_encoder_phys_cmd_init(struct drm_device *dev, struct dpu_enc_phys_init_params *p); /** * dpu_encoder_phys_wb_init - initialize writeback encoder + * @dev: Corresponding device for devres management * @init: Pointer to init info structure with initialization params */ -struct dpu_encoder_phys *dpu_encoder_phys_wb_init( +struct dpu_encoder_phys *dpu_encoder_phys_wb_init(struct drm_device *dev, struct dpu_enc_phys_init_params *p); /** diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c index b856c6286c85..2958b64e6e5e 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c @@ -13,6 +13,8 @@ #include "dpu_trace.h" #include "disp/msm_disp_snapshot.h" +#include <drm/drm_managed.h> + #define DPU_DEBUG_CMDENC(e, fmt, ...) DPU_DEBUG("enc%d intf%d " fmt, \ (e) && (e)->base.parent ? \ (e)->base.parent->base.id : -1, \ @@ -563,14 +565,6 @@ static void dpu_encoder_phys_cmd_disable(struct dpu_encoder_phys *phys_enc) phys_enc->enable_state = DPU_ENC_DISABLED; } -static void dpu_encoder_phys_cmd_destroy(struct dpu_encoder_phys *phys_enc) -{ - struct dpu_encoder_phys_cmd *cmd_enc = - to_dpu_encoder_phys_cmd(phys_enc); - - kfree(cmd_enc); -} - static void dpu_encoder_phys_cmd_prepare_for_kickoff( struct dpu_encoder_phys *phys_enc) { @@ -736,7 +730,6 @@ static void dpu_encoder_phys_cmd_init_ops( ops->atomic_mode_set = dpu_encoder_phys_cmd_atomic_mode_set; ops->enable = dpu_encoder_phys_cmd_enable; ops->disable = dpu_encoder_phys_cmd_disable; - ops->destroy = dpu_encoder_phys_cmd_destroy; ops->control_vblank_irq = dpu_encoder_phys_cmd_control_vblank_irq; ops->wait_for_commit_done = dpu_encoder_phys_cmd_wait_for_commit_done; ops->prepare_for_kickoff = dpu_encoder_phys_cmd_prepare_for_kickoff; @@ -751,7 +744,7 @@ static void dpu_encoder_phys_cmd_init_ops( ops->get_line_count = dpu_encoder_phys_cmd_get_line_count; } -struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( +struct dpu_encoder_phys *dpu_encoder_phys_cmd_init(struct drm_device *dev, struct dpu_enc_phys_init_params *p) { struct dpu_encoder_phys *phys_enc = NULL; @@ -759,7 +752,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init( DPU_DEBUG("intf\n"); - cmd_enc = kzalloc(sizeof(*cmd_enc), GFP_KERNEL); + cmd_enc = drmm_kzalloc(dev, sizeof(*cmd_enc), GFP_KERNEL); if (!cmd_enc) { DPU_ERROR("failed to allocate\n"); return ERR_PTR(-ENOMEM); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c index 662d74ded1b9..bdfce4ccc0a7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c @@ -11,6 +11,8 @@ #include "dpu_trace.h" #include "disp/msm_disp_snapshot.h" +#include <drm/drm_managed.h> + #define DPU_DEBUG_VIDENC(e, fmt, ...) DPU_DEBUG("enc%d intf%d " fmt, \ (e) && (e)->parent ? \ (e)->parent->base.id : -1, \ @@ -438,12 +440,6 @@ static void dpu_encoder_phys_vid_enable(struct dpu_encoder_phys *phys_enc) phys_enc->enable_state = DPU_ENC_ENABLING; } -static void dpu_encoder_phys_vid_destroy(struct dpu_encoder_phys *phys_enc) -{ - DPU_DEBUG_VIDENC(phys_enc, "\n"); - kfree(phys_enc); -} - static int dpu_encoder_phys_vid_wait_for_vblank( struct dpu_encoder_phys *phys_enc) { @@ -681,7 +677,6 @@ static void dpu_encoder_phys_vid_init_ops(struct dpu_encoder_phys_ops *ops) ops->atomic_mode_set = dpu_encoder_phys_vid_atomic_mode_set; ops->enable = dpu_encoder_phys_vid_enable; ops->disable = dpu_encoder_phys_vid_disable; - ops->destroy = dpu_encoder_phys_vid_destroy; ops->control_vblank_irq = dpu_encoder_phys_vid_control_vblank_irq; ops->wait_for_commit_done = dpu_encoder_phys_vid_wait_for_commit_done; ops->wait_for_vblank = dpu_encoder_phys_vid_wait_for_vblank; @@ -694,7 +689,7 @@ static void dpu_encoder_phys_vid_init_ops(struct dpu_encoder_phys_ops *ops) ops->get_frame_count = dpu_encoder_phys_vid_get_frame_count; } -struct dpu_encoder_phys *dpu_encoder_phys_vid_init( +struct dpu_encoder_phys *dpu_encoder_phys_vid_init(struct drm_device *dev, struct dpu_enc_phys_init_params *p) { struct dpu_encoder_phys *phys_enc = NULL; @@ -704,7 +699,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_vid_init( return ERR_PTR(-EINVAL); } - phys_enc = kzalloc(sizeof(*phys_enc), GFP_KERNEL); + phys_enc = drmm_kzalloc(dev, sizeof(*phys_enc), GFP_KERNEL); if (!phys_enc) { DPU_ERROR("failed to create encoder due to memory allocation error\n"); return ERR_PTR(-ENOMEM); diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c index a466ff70a4d6..9a44a1575682 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c @@ -8,6 +8,7 @@ #include <linux/debugfs.h> #include <drm/drm_framebuffer.h> +#include <drm/drm_managed.h> #include "dpu_encoder_phys.h" #include "dpu_formats.h" @@ -552,20 +553,6 @@ static void dpu_encoder_phys_wb_disable(struct dpu_encoder_phys *phys_enc) phys_enc->enable_state = DPU_ENC_DISABLED; } -/** - * dpu_encoder_phys_wb_destroy - destroy writeback encoder - * @phys_enc: Pointer to physical encoder - */ -static void dpu_encoder_phys_wb_destroy(struct dpu_encoder_phys *phys_enc) -{ - if (!phys_enc) - return; - - DPU_DEBUG("[wb:%d]\n", phys_enc->hw_wb->idx - WB_0); - - kfree(phys_enc); -} - static void dpu_encoder_phys_wb_prepare_wb_job(struct dpu_encoder_phys *phys_enc, struct drm_writeback_job *job) { @@ -661,7 +648,6 @@ static void dpu_encoder_phys_wb_init_ops(struct dpu_encoder_phys_ops *ops) ops->atomic_mode_set = dpu_encoder_phys_wb_atomic_mode_set; ops->enable = dpu_encoder_phys_wb_enable; ops->disable = dpu_encoder_phys_wb_disable; - ops->destroy = dpu_encoder_phys_wb_destroy; ops->atomic_check = dpu_encoder_phys_wb_atomic_check; ops->wait_for_commit_done = dpu_encoder_phys_wb_wait_for_commit_done; ops->prepare_for_kickoff = dpu_encoder_phys_wb_prepare_for_kickoff; @@ -677,9 +663,10 @@ static void dpu_encoder_phys_wb_init_ops(struct dpu_encoder_phys_ops *ops) /** * dpu_encoder_phys_wb_init - initialize writeback encoder + * @dev: Corresponding device for devres management * @p: Pointer to init info structure with initialization params */ -struct dpu_encoder_phys *dpu_encoder_phys_wb_init( +struct dpu_encoder_phys *dpu_encoder_phys_wb_init(struct drm_device *dev, struct dpu_enc_phys_init_params *p) { struct dpu_encoder_phys *phys_enc = NULL; @@ -692,7 +679,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_wb_init( return ERR_PTR(-EINVAL); } - wb_enc = kzalloc(sizeof(*wb_enc), GFP_KERNEL); + wb_enc = drmm_kzalloc(dev, sizeof(*wb_enc), GFP_KERNEL); if (!wb_enc) { DPU_ERROR("failed to allocate wb phys_enc enc\n"); return ERR_PTR(-ENOMEM);
Change struct allocation of encoder's phys backend data to use drmm_kzalloc(). This removes the need to perform any actions on encoder destruction. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 9 ++++---- .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h | 8 ++++--- .../drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c | 15 ++++--------- .../drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 13 ++++-------- .../drm/msm/disp/dpu1/dpu_encoder_phys_wb.c | 21 ++++--------------- 5 files changed, 22 insertions(+), 44 deletions(-)