Commit 783ad6e6 authored by Dmitry Baryshkov's avatar Dmitry Baryshkov

drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc

Change struct mdp4_crtc allocation to use drmm_crtc_alloc(). This
removes the need to perform any actions on CRTC destruction.
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/546184/
Link: https://lore.kernel.org/r/20230708010407.3871346-13-dmitry.baryshkov@linaro.org
parent 54f1fbcb
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <drm/drm_crtc.h> #include <drm/drm_crtc.h>
#include <drm/drm_flip_work.h> #include <drm/drm_flip_work.h>
#include <drm/drm_managed.h>
#include <drm/drm_mode.h> #include <drm/drm_mode.h>
#include <drm/drm_probe_helper.h> #include <drm/drm_probe_helper.h>
#include <drm/drm_vblank.h> #include <drm/drm_vblank.h>
...@@ -123,16 +124,6 @@ static void unref_cursor_worker(struct drm_flip_work *work, void *val) ...@@ -123,16 +124,6 @@ static void unref_cursor_worker(struct drm_flip_work *work, void *val)
drm_gem_object_put(val); drm_gem_object_put(val);
} }
static void mdp4_crtc_destroy(struct drm_crtc *crtc)
{
struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
drm_crtc_cleanup(crtc);
drm_flip_work_cleanup(&mdp4_crtc->unref_cursor_work);
kfree(mdp4_crtc);
}
/* statically (for now) map planes to mixer stage (z-order): */ /* statically (for now) map planes to mixer stage (z-order): */
static const int idxs[] = { static const int idxs[] = {
[VG1] = 1, [VG1] = 1,
...@@ -475,7 +466,6 @@ static int mdp4_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) ...@@ -475,7 +466,6 @@ static int mdp4_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
static const struct drm_crtc_funcs mdp4_crtc_funcs = { static const struct drm_crtc_funcs mdp4_crtc_funcs = {
.set_config = drm_atomic_helper_set_config, .set_config = drm_atomic_helper_set_config,
.destroy = mdp4_crtc_destroy,
.page_flip = drm_atomic_helper_page_flip, .page_flip = drm_atomic_helper_page_flip,
.cursor_set = mdp4_crtc_cursor_set, .cursor_set = mdp4_crtc_cursor_set,
.cursor_move = mdp4_crtc_cursor_move, .cursor_move = mdp4_crtc_cursor_move,
...@@ -616,6 +606,13 @@ static const char *dma_names[] = { ...@@ -616,6 +606,13 @@ static const char *dma_names[] = {
"DMA_P", "DMA_S", "DMA_E", "DMA_P", "DMA_S", "DMA_E",
}; };
static void mdp4_crtc_flip_cleanup(struct drm_device *dev, void *ptr)
{
struct mdp4_crtc *mdp4_crtc = ptr;
drm_flip_work_cleanup(&mdp4_crtc->unref_cursor_work);
}
/* initialize crtc */ /* initialize crtc */
struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, struct drm_crtc *mdp4_crtc_init(struct drm_device *dev,
struct drm_plane *plane, int id, int ovlp_id, struct drm_plane *plane, int id, int ovlp_id,
...@@ -623,10 +620,13 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, ...@@ -623,10 +620,13 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev,
{ {
struct drm_crtc *crtc = NULL; struct drm_crtc *crtc = NULL;
struct mdp4_crtc *mdp4_crtc; struct mdp4_crtc *mdp4_crtc;
int ret;
mdp4_crtc = kzalloc(sizeof(*mdp4_crtc), GFP_KERNEL); mdp4_crtc = drmm_crtc_alloc_with_planes(dev, struct mdp4_crtc, base,
if (!mdp4_crtc) plane, NULL,
return ERR_PTR(-ENOMEM); &mdp4_crtc_funcs, NULL);
if (IS_ERR(mdp4_crtc))
return ERR_CAST(mdp4_crtc);
crtc = &mdp4_crtc->base; crtc = &mdp4_crtc->base;
...@@ -648,9 +648,10 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, ...@@ -648,9 +648,10 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev,
drm_flip_work_init(&mdp4_crtc->unref_cursor_work, drm_flip_work_init(&mdp4_crtc->unref_cursor_work,
"unref cursor", unref_cursor_worker); "unref cursor", unref_cursor_worker);
ret = drmm_add_action_or_reset(dev, mdp4_crtc_flip_cleanup, mdp4_crtc);
if (ret)
return ERR_PTR(ret);
drm_crtc_init_with_planes(dev, crtc, plane, NULL, &mdp4_crtc_funcs,
NULL);
drm_crtc_helper_add(crtc, &mdp4_crtc_helper_funcs); drm_crtc_helper_add(crtc, &mdp4_crtc_helper_funcs);
return crtc; return crtc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment