* [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations
@ 2023-07-08 1:03 Dmitry Baryshkov
2023-07-08 1:03 ` [PATCH 01/17] drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware Dmitry Baryshkov
` (17 more replies)
0 siblings, 18 replies; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Follow the DPU patchset ([1]) and use devm_ and drmm_ functions to
allocate long-living data structures in mdp4 and mdp5 drivers.
[1] https://patchwork.freedesktop.org/series/120366/
Dmitry Baryshkov (17):
drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware
drm/msm/mdp5: use devres-managed allocation for configuration data
drm/msm/mdp5: use devres-managed allocation for CTL manager data
drm/msm/mdp5: use devres-managed allocation for mixer data
drm/msm/mdp5: use devres-managed allocation for pipe data
drm/msm/mdp5: use devres-managed allocation for SMP data
drm/msm/mdp5: use devres-managed allocation for INTF data
drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc
drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder
drm/msm/mdp5: use drmm-managed allocation for mdp5_plane
drm/msm/mdp4: use bulk regulators API for LCDC encoder
drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc
drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder
drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder
drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder
drm/msm/mdp4: use drmm-managed allocation for mdp4_plane
drm/msm: drop mdp_get_formats()
drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 33 +++----
.../gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c | 32 ++-----
.../gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c | 37 ++------
.../gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c | 87 +++++--------------
drivers/gpu/drm/msm/disp/mdp4/mdp4_plane.c | 59 +++++--------
drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c | 24 ++---
drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.h | 1 -
drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 30 +++----
drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.c | 21 +----
drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.h | 1 -
drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c | 29 +------
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 25 +-----
drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c | 10 +--
drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h | 4 +-
drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c | 10 +--
drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h | 4 +-
drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c | 40 ++-------
drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c | 19 +---
drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.h | 1 -
drivers/gpu/drm/msm/disp/mdp_format.c | 67 +++++++++-----
drivers/gpu/drm/msm/disp/mdp_kms.h | 6 +-
21 files changed, 171 insertions(+), 369 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 39+ messages in thread
* [PATCH 01/17] drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-02 1:36 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 02/17] drm/msm/mdp5: use devres-managed allocation for configuration data Dmitry Baryshkov
` (16 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
MDP4 and MDP5 drivers enumerate supported formats each time the plane is
created. As the list of supported image formats is constant, create
corresponding data arrays to be used by MDP4 and MDP5 drivers.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp_format.c | 49 +++++++++++++++++++++++++--
drivers/gpu/drm/msm/disp/mdp_kms.h | 5 +++
2 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp_format.c b/drivers/gpu/drm/msm/disp/mdp_format.c
index 025595336f26..ba9abe8b3acc 100644
--- a/drivers/gpu/drm/msm/disp/mdp_format.c
+++ b/drivers/gpu/drm/msm/disp/mdp_format.c
@@ -81,8 +81,8 @@ static struct csc_cfg csc_convert[CSC_MAX] = {
#define BPC0A 0
/*
- * Note: Keep RGB formats 1st, followed by YUV formats to avoid breaking
- * mdp_get_rgb_formats()'s implementation.
+ * Note: Keep mdp_rgb_formats and mdp_rgb_yuv_formats in sync when adding
+ * entries to this array.
*/
static const struct mdp_format formats[] = {
/* name a r g b e0 e1 e2 e3 alpha tight cpp cnt ... */
@@ -138,6 +138,51 @@ static const struct mdp_format formats[] = {
MDP_PLANE_PLANAR, CHROMA_420, true),
};
+const uint32_t mdp_rgb_formats[] = {
+ DRM_FORMAT_ARGB8888,
+ DRM_FORMAT_ABGR8888,
+ DRM_FORMAT_RGBA8888,
+ DRM_FORMAT_BGRA8888,
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_RGBX8888,
+ DRM_FORMAT_BGRX8888,
+ DRM_FORMAT_RGB888,
+ DRM_FORMAT_BGR888,
+ DRM_FORMAT_RGB565,
+ DRM_FORMAT_BGR565,
+};
+
+size_t mdp_rgb_num_formats = ARRAY_SIZE(mdp_rgb_formats);
+
+const uint32_t mdp_rgb_yuv_formats[] = {
+ DRM_FORMAT_ARGB8888,
+ DRM_FORMAT_ABGR8888,
+ DRM_FORMAT_RGBA8888,
+ DRM_FORMAT_BGRA8888,
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_RGBX8888,
+ DRM_FORMAT_BGRX8888,
+ DRM_FORMAT_RGB888,
+ DRM_FORMAT_BGR888,
+ DRM_FORMAT_RGB565,
+ DRM_FORMAT_BGR565,
+
+ DRM_FORMAT_NV12,
+ DRM_FORMAT_NV21,
+ DRM_FORMAT_NV16,
+ DRM_FORMAT_NV61,
+ DRM_FORMAT_VYUY,
+ DRM_FORMAT_UYVY,
+ DRM_FORMAT_YUYV,
+ DRM_FORMAT_YVYU,
+ DRM_FORMAT_YUV420,
+ DRM_FORMAT_YVU420,
+};
+
+size_t mdp_rgb_yuv_num_formats = ARRAY_SIZE(mdp_rgb_yuv_formats);
+
/*
* Note:
* @rgb_only must be set to true, when requesting
diff --git a/drivers/gpu/drm/msm/disp/mdp_kms.h b/drivers/gpu/drm/msm/disp/mdp_kms.h
index b0286d5d5130..11402a859574 100644
--- a/drivers/gpu/drm/msm/disp/mdp_kms.h
+++ b/drivers/gpu/drm/msm/disp/mdp_kms.h
@@ -94,6 +94,11 @@ struct mdp_format {
uint32_t mdp_get_formats(uint32_t *formats, uint32_t max_formats, bool rgb_only);
const struct msm_format *mdp_get_format(struct msm_kms *kms, uint32_t format, uint64_t modifier);
+extern const uint32_t mdp_rgb_formats[];
+extern size_t mdp_rgb_num_formats;
+extern const uint32_t mdp_rgb_yuv_formats[];
+extern size_t mdp_rgb_yuv_num_formats;
+
/* MDP capabilities */
#define MDP_CAP_SMP BIT(0) /* Shared Memory Pool */
#define MDP_CAP_DSC BIT(1) /* VESA Display Stream Compression */
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 02/17] drm/msm/mdp5: use devres-managed allocation for configuration data
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
2023-07-08 1:03 ` [PATCH 01/17] drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-01 22:12 ` [Freedreno] " Abhinav Kumar
2023-07-08 1:03 ` [PATCH 03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data Dmitry Baryshkov
` (15 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Use devm_kzalloc to create configuration data structure. This allows us
to remove corresponding kfree and drop mdp5_cfg_destroy() function.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c | 24 +++++-------------------
drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.h | 1 -
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 2 --
3 files changed, 5 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c
index 694d54341337..c5179e4c393c 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c
@@ -1350,23 +1350,17 @@ int mdp5_cfg_get_hw_rev(struct mdp5_cfg_handler *cfg_handler)
return cfg_handler->revision;
}
-void mdp5_cfg_destroy(struct mdp5_cfg_handler *cfg_handler)
-{
- kfree(cfg_handler);
-}
-
struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms,
uint32_t major, uint32_t minor)
{
struct drm_device *dev = mdp5_kms->dev;
struct mdp5_cfg_handler *cfg_handler;
const struct mdp5_cfg_handler *cfg_handlers;
- int i, ret = 0, num_handlers;
+ int i, num_handlers;
- cfg_handler = kzalloc(sizeof(*cfg_handler), GFP_KERNEL);
+ cfg_handler = devm_kzalloc(dev->dev, sizeof(*cfg_handler), GFP_KERNEL);
if (unlikely(!cfg_handler)) {
- ret = -ENOMEM;
- goto fail;
+ return ERR_PTR(-ENOMEM);
}
switch (major) {
@@ -1381,8 +1375,7 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms,
default:
DRM_DEV_ERROR(dev->dev, "unexpected MDP major version: v%d.%d\n",
major, minor);
- ret = -ENXIO;
- goto fail;
+ return ERR_PTR(-ENXIO);
}
/* only after mdp5_cfg global pointer's init can we access the hw */
@@ -1396,8 +1389,7 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms,
if (unlikely(!mdp5_cfg)) {
DRM_DEV_ERROR(dev->dev, "unexpected MDP minor revision: v%d.%d\n",
major, minor);
- ret = -ENXIO;
- goto fail;
+ return ERR_PTR(-ENXIO);
}
cfg_handler->revision = minor;
@@ -1406,10 +1398,4 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms,
DBG("MDP5: %s hw config selected", mdp5_cfg->name);
return cfg_handler;
-
-fail:
- if (cfg_handler)
- mdp5_cfg_destroy(cfg_handler);
-
- return ERR_PTR(ret);
}
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.h b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.h
index c2502cc33864..26c5d8b4ab46 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.h
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.h
@@ -121,6 +121,5 @@ int mdp5_cfg_get_hw_rev(struct mdp5_cfg_handler *cfg_hnd);
struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms,
uint32_t major, uint32_t minor);
-void mdp5_cfg_destroy(struct mdp5_cfg_handler *cfg_hnd);
#endif /* __MDP5_CFG_H__ */
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 52f176e08690..828634206185 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -629,8 +629,6 @@ static void mdp5_destroy(struct mdp5_kms *mdp5_kms)
mdp5_ctlm_destroy(mdp5_kms->ctlm);
if (mdp5_kms->smp)
mdp5_smp_destroy(mdp5_kms->smp);
- if (mdp5_kms->cfg)
- mdp5_cfg_destroy(mdp5_kms->cfg);
for (i = 0; i < mdp5_kms->num_intfs; i++)
kfree(mdp5_kms->intfs[i]);
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
2023-07-08 1:03 ` [PATCH 01/17] drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware Dmitry Baryshkov
2023-07-08 1:03 ` [PATCH 02/17] drm/msm/mdp5: use devres-managed allocation for configuration data Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-01 22:15 ` Abhinav Kumar
2023-12-01 22:16 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 04/17] drm/msm/mdp5: use devres-managed allocation for mixer data Dmitry Baryshkov
` (14 subsequent siblings)
17 siblings, 2 replies; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Use devm_kzalloc to create CTL manager data structure. This allows us
to remove corresponding kfree and drop mdp5_ctlm_destroy() function.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.c | 21 ++++-----------------
drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.h | 1 -
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 2 --
3 files changed, 4 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.c
index 1220f2b20e05..666de99a46a5 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.c
@@ -681,11 +681,6 @@ void mdp5_ctlm_hw_reset(struct mdp5_ctl_manager *ctl_mgr)
}
}
-void mdp5_ctlm_destroy(struct mdp5_ctl_manager *ctl_mgr)
-{
- kfree(ctl_mgr);
-}
-
struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev,
void __iomem *mmio_base, struct mdp5_cfg_handler *cfg_hnd)
{
@@ -697,18 +692,16 @@ struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev,
unsigned long flags;
int c, ret;
- ctl_mgr = kzalloc(sizeof(*ctl_mgr), GFP_KERNEL);
+ ctl_mgr = devm_kzalloc(dev->dev, sizeof(*ctl_mgr), GFP_KERNEL);
if (!ctl_mgr) {
DRM_DEV_ERROR(dev->dev, "failed to allocate CTL manager\n");
- ret = -ENOMEM;
- goto fail;
+ return ERR_PTR(-ENOMEM);
}
if (WARN_ON(ctl_cfg->count > MAX_CTL)) {
DRM_DEV_ERROR(dev->dev, "Increase static pool size to at least %d\n",
ctl_cfg->count);
- ret = -ENOSPC;
- goto fail;
+ return ERR_PTR(-ENOSPC);
}
/* initialize the CTL manager: */
@@ -727,7 +720,7 @@ struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev,
DRM_DEV_ERROR(dev->dev, "CTL_%d: base is null!\n", c);
ret = -EINVAL;
spin_unlock_irqrestore(&ctl_mgr->pool_lock, flags);
- goto fail;
+ return ERR_PTR(ret);
}
ctl->ctlm = ctl_mgr;
ctl->id = c;
@@ -755,10 +748,4 @@ struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev,
DBG("Pool of %d CTLs created.", ctl_mgr->nctl);
return ctl_mgr;
-
-fail:
- if (ctl_mgr)
- mdp5_ctlm_destroy(ctl_mgr);
-
- return ERR_PTR(ret);
}
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.h b/drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.h
index c2af68aa77ae..9020e8efc4e4 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.h
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.h
@@ -17,7 +17,6 @@ struct mdp5_ctl_manager;
struct mdp5_ctl_manager *mdp5_ctlm_init(struct drm_device *dev,
void __iomem *mmio_base, struct mdp5_cfg_handler *cfg_hnd);
void mdp5_ctlm_hw_reset(struct mdp5_ctl_manager *ctlm);
-void mdp5_ctlm_destroy(struct mdp5_ctl_manager *ctlm);
/*
* CTL prototypes:
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 828634206185..e20ead138602 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -625,8 +625,6 @@ static void mdp5_destroy(struct mdp5_kms *mdp5_kms)
{
int i;
- if (mdp5_kms->ctlm)
- mdp5_ctlm_destroy(mdp5_kms->ctlm);
if (mdp5_kms->smp)
mdp5_smp_destroy(mdp5_kms->smp);
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 04/17] drm/msm/mdp5: use devres-managed allocation for mixer data
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (2 preceding siblings ...)
2023-07-08 1:03 ` [PATCH 03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-01 22:19 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 05/17] drm/msm/mdp5: use devres-managed allocation for pipe data Dmitry Baryshkov
` (13 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Use devm_kzalloc to create mixer data structure. This allows us
to remove corresponding kfree and drop mdp5_mixer_destroy() function.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 5 +----
drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c | 10 +++-------
drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h | 4 ++--
3 files changed, 6 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index e20ead138602..b4a49d369f0d 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -211,9 +211,6 @@ static void mdp5_kms_destroy(struct msm_kms *kms)
struct msm_gem_address_space *aspace = kms->aspace;
int i;
- for (i = 0; i < mdp5_kms->num_hwmixers; i++)
- mdp5_mixer_destroy(mdp5_kms->hwmixers[i]);
-
for (i = 0; i < mdp5_kms->num_hwpipes; i++)
mdp5_pipe_destroy(mdp5_kms->hwpipes[i]);
@@ -720,7 +717,7 @@ static int hwmixer_init(struct mdp5_kms *mdp5_kms)
for (i = 0; i < hw_cfg->lm.count; i++) {
struct mdp5_hw_mixer *mixer;
- mixer = mdp5_mixer_init(&hw_cfg->lm.instances[i]);
+ mixer = mdp5_mixer_init(dev, &hw_cfg->lm.instances[i]);
if (IS_ERR(mixer)) {
ret = PTR_ERR(mixer);
DRM_DEV_ERROR(dev->dev, "failed to construct LM%d (%d)\n",
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c
index 2536def2a000..2822b533f807 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c
@@ -140,20 +140,16 @@ int mdp5_mixer_release(struct drm_atomic_state *s, struct mdp5_hw_mixer *mixer)
return 0;
}
-void mdp5_mixer_destroy(struct mdp5_hw_mixer *mixer)
-{
- kfree(mixer);
-}
-
static const char * const mixer_names[] = {
"LM0", "LM1", "LM2", "LM3", "LM4", "LM5",
};
-struct mdp5_hw_mixer *mdp5_mixer_init(const struct mdp5_lm_instance *lm)
+struct mdp5_hw_mixer *mdp5_mixer_init(struct drm_device *dev,
+ const struct mdp5_lm_instance *lm)
{
struct mdp5_hw_mixer *mixer;
- mixer = kzalloc(sizeof(*mixer), GFP_KERNEL);
+ mixer = devm_kzalloc(dev->dev, sizeof(*mixer), GFP_KERNEL);
if (!mixer)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h b/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h
index 545ee223b9d7..2bedd75835bc 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h
@@ -25,8 +25,8 @@ struct mdp5_hw_mixer_state {
struct drm_crtc *hwmixer_to_crtc[8];
};
-struct mdp5_hw_mixer *mdp5_mixer_init(const struct mdp5_lm_instance *lm);
-void mdp5_mixer_destroy(struct mdp5_hw_mixer *lm);
+struct mdp5_hw_mixer *mdp5_mixer_init(struct drm_device *dev,
+ const struct mdp5_lm_instance *lm);
int mdp5_mixer_assign(struct drm_atomic_state *s, struct drm_crtc *crtc,
uint32_t caps, struct mdp5_hw_mixer **mixer,
struct mdp5_hw_mixer **r_mixer);
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 05/17] drm/msm/mdp5: use devres-managed allocation for pipe data
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (3 preceding siblings ...)
2023-07-08 1:03 ` [PATCH 04/17] drm/msm/mdp5: use devres-managed allocation for mixer data Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-01 22:21 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 06/17] drm/msm/mdp5: use devres-managed allocation for SMP data Dmitry Baryshkov
` (12 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Use devm_kzalloc to create pipe data structure. This allows us
to remove corresponding kfree and drop mdp5_pipe_destroy() function.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 6 +-----
drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c | 10 +++-------
drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h | 4 ++--
3 files changed, 6 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index b4a49d369f0d..be4338a48e52 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -209,10 +209,6 @@ static void mdp5_kms_destroy(struct msm_kms *kms)
{
struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
struct msm_gem_address_space *aspace = kms->aspace;
- int i;
-
- for (i = 0; i < mdp5_kms->num_hwpipes; i++)
- mdp5_pipe_destroy(mdp5_kms->hwpipes[i]);
if (aspace) {
aspace->mmu->funcs->detach(aspace->mmu);
@@ -645,7 +641,7 @@ static int construct_pipes(struct mdp5_kms *mdp5_kms, int cnt,
for (i = 0; i < cnt; i++) {
struct mdp5_hw_pipe *hwpipe;
- hwpipe = mdp5_pipe_init(pipes[i], offsets[i], caps);
+ hwpipe = mdp5_pipe_init(dev, pipes[i], offsets[i], caps);
if (IS_ERR(hwpipe)) {
ret = PTR_ERR(hwpipe);
DRM_DEV_ERROR(dev->dev, "failed to construct pipe for %s (%d)\n",
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c
index e4b8a789835a..99b2c30b1d48 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c
@@ -151,17 +151,13 @@ int mdp5_pipe_release(struct drm_atomic_state *s, struct mdp5_hw_pipe *hwpipe)
return 0;
}
-void mdp5_pipe_destroy(struct mdp5_hw_pipe *hwpipe)
-{
- kfree(hwpipe);
-}
-
-struct mdp5_hw_pipe *mdp5_pipe_init(enum mdp5_pipe pipe,
+struct mdp5_hw_pipe *mdp5_pipe_init(struct drm_device *dev,
+ enum mdp5_pipe pipe,
uint32_t reg_offset, uint32_t caps)
{
struct mdp5_hw_pipe *hwpipe;
- hwpipe = kzalloc(sizeof(*hwpipe), GFP_KERNEL);
+ hwpipe = devm_kzalloc(dev->dev, sizeof(*hwpipe), GFP_KERNEL);
if (!hwpipe)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h b/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h
index cca67938cab2..452138821f60 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h
@@ -39,8 +39,8 @@ int mdp5_pipe_assign(struct drm_atomic_state *s, struct drm_plane *plane,
struct mdp5_hw_pipe **r_hwpipe);
int mdp5_pipe_release(struct drm_atomic_state *s, struct mdp5_hw_pipe *hwpipe);
-struct mdp5_hw_pipe *mdp5_pipe_init(enum mdp5_pipe pipe,
+struct mdp5_hw_pipe *mdp5_pipe_init(struct drm_device *dev,
+ enum mdp5_pipe pipe,
uint32_t reg_offset, uint32_t caps);
-void mdp5_pipe_destroy(struct mdp5_hw_pipe *hwpipe);
#endif /* __MDP5_PIPE_H__ */
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 06/17] drm/msm/mdp5: use devres-managed allocation for SMP data
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (4 preceding siblings ...)
2023-07-08 1:03 ` [PATCH 05/17] drm/msm/mdp5: use devres-managed allocation for pipe data Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-01 22:23 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 07/17] drm/msm/mdp5: use devres-managed allocation for INTF data Dmitry Baryshkov
` (11 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Use devm_kzalloc to create SMP data structure. This allows us
to remove corresponding kfree and drop mdp5_smp_destroy() function.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 3 ---
drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c | 19 ++++---------------
drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.h | 1 -
3 files changed, 4 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index be4338a48e52..0a85777625d3 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -618,9 +618,6 @@ static void mdp5_destroy(struct mdp5_kms *mdp5_kms)
{
int i;
- if (mdp5_kms->smp)
- mdp5_smp_destroy(mdp5_kms->smp);
-
for (i = 0; i < mdp5_kms->num_intfs; i++)
kfree(mdp5_kms->intfs[i]);
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c
index 56a3063545ec..d7c957207255 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c
@@ -370,23 +370,17 @@ void mdp5_smp_dump(struct mdp5_smp *smp, struct drm_printer *p)
drm_modeset_unlock(&mdp5_kms->glob_state_lock);
}
-void mdp5_smp_destroy(struct mdp5_smp *smp)
-{
- kfree(smp);
-}
struct mdp5_smp *mdp5_smp_init(struct mdp5_kms *mdp5_kms, const struct mdp5_smp_block *cfg)
{
+ struct drm_device *dev = mdp5_kms->dev;
struct mdp5_smp_state *state;
struct mdp5_global_state *global_state;
struct mdp5_smp *smp = NULL;
- int ret;
- smp = kzalloc(sizeof(*smp), GFP_KERNEL);
- if (unlikely(!smp)) {
- ret = -ENOMEM;
- goto fail;
- }
+ smp = devm_kzalloc(dev->dev, sizeof(*smp), GFP_KERNEL);
+ if (unlikely(!smp))
+ return ERR_PTR(-ENOMEM);
smp->dev = mdp5_kms->dev;
smp->blk_cnt = cfg->mmb_count;
@@ -400,9 +394,4 @@ struct mdp5_smp *mdp5_smp_init(struct mdp5_kms *mdp5_kms, const struct mdp5_smp_
memcpy(smp->reserved, cfg->reserved, sizeof(smp->reserved));
return smp;
-fail:
- if (smp)
- mdp5_smp_destroy(smp);
-
- return ERR_PTR(ret);
}
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.h b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.h
index ba5618e136c3..d8b6a11413d9 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.h
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.h
@@ -68,7 +68,6 @@ struct mdp5_smp;
struct mdp5_smp *mdp5_smp_init(struct mdp5_kms *mdp5_kms,
const struct mdp5_smp_block *cfg);
-void mdp5_smp_destroy(struct mdp5_smp *smp);
void mdp5_smp_dump(struct mdp5_smp *smp, struct drm_printer *p);
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 07/17] drm/msm/mdp5: use devres-managed allocation for INTF data
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (5 preceding siblings ...)
2023-07-08 1:03 ` [PATCH 06/17] drm/msm/mdp5: use devres-managed allocation for SMP data Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-01 23:04 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 08/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc Dmitry Baryshkov
` (10 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Use devm_kzalloc to create INTF data structure. This allows us
to remove corresponding kfree() call.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 0a85777625d3..fb2b3bf081ee 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -616,11 +616,6 @@ static int mdp5_kms_init(struct drm_device *dev)
static void mdp5_destroy(struct mdp5_kms *mdp5_kms)
{
- int i;
-
- for (i = 0; i < mdp5_kms->num_intfs; i++)
- kfree(mdp5_kms->intfs[i]);
-
if (mdp5_kms->rpm_enabled)
pm_runtime_disable(&mdp5_kms->pdev->dev);
@@ -741,7 +736,7 @@ static int interface_init(struct mdp5_kms *mdp5_kms)
if (intf_types[i] == INTF_DISABLED)
continue;
- intf = kzalloc(sizeof(*intf), GFP_KERNEL);
+ intf = devm_kzalloc(dev->dev, sizeof(*intf), GFP_KERNEL);
if (!intf) {
DRM_DEV_ERROR(dev->dev, "failed to construct INTF%d\n", i);
return -ENOMEM;
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 08/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (6 preceding siblings ...)
2023-07-08 1:03 ` [PATCH 07/17] drm/msm/mdp5: use devres-managed allocation for INTF data Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-01 23:12 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 09/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder Dmitry Baryshkov
` (9 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Change struct mdp5_crtc allocation to use drmm_crtc_alloc(). This
removes the need to perform any actions on CRTC destruction.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 30 +++++++++++------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
index 86036dd4e1e8..4a3db2ea1689 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
@@ -13,6 +13,7 @@
#include <drm/drm_crtc.h>
#include <drm/drm_flip_work.h>
#include <drm/drm_fourcc.h>
+#include <drm/drm_managed.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_vblank.h>
@@ -172,14 +173,11 @@ static void unref_cursor_worker(struct drm_flip_work *work, void *val)
drm_gem_object_put(val);
}
-static void mdp5_crtc_destroy(struct drm_crtc *crtc)
+static void mdp5_crtc_flip_cleanup(struct drm_device *dev, void *ptr)
{
- struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
+ struct mdp5_crtc *mdp5_crtc = ptr;
- drm_crtc_cleanup(crtc);
drm_flip_work_cleanup(&mdp5_crtc->unref_cursor_work);
-
- kfree(mdp5_crtc);
}
static inline u32 mdp5_lm_use_fg_alpha_mask(enum mdp_mixer_stage_id stage)
@@ -1147,7 +1145,6 @@ static void mdp5_crtc_reset(struct drm_crtc *crtc)
static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
.set_config = drm_atomic_helper_set_config,
- .destroy = mdp5_crtc_destroy,
.page_flip = drm_atomic_helper_page_flip,
.reset = mdp5_crtc_reset,
.atomic_duplicate_state = mdp5_crtc_duplicate_state,
@@ -1161,7 +1158,6 @@ static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
static const struct drm_crtc_funcs mdp5_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
- .destroy = mdp5_crtc_destroy,
.page_flip = drm_atomic_helper_page_flip,
.reset = mdp5_crtc_reset,
.atomic_duplicate_state = mdp5_crtc_duplicate_state,
@@ -1327,10 +1323,16 @@ struct drm_crtc *mdp5_crtc_init(struct drm_device *dev,
{
struct drm_crtc *crtc = NULL;
struct mdp5_crtc *mdp5_crtc;
+ int ret;
- mdp5_crtc = kzalloc(sizeof(*mdp5_crtc), GFP_KERNEL);
- if (!mdp5_crtc)
- return ERR_PTR(-ENOMEM);
+ mdp5_crtc = drmm_crtc_alloc_with_planes(dev, struct mdp5_crtc, base,
+ plane, cursor_plane,
+ cursor_plane ?
+ &mdp5_crtc_no_lm_cursor_funcs :
+ &mdp5_crtc_funcs,
+ NULL);
+ if (IS_ERR(mdp5_crtc))
+ return ERR_CAST(mdp5_crtc);
crtc = &mdp5_crtc->base;
@@ -1346,13 +1348,11 @@ struct drm_crtc *mdp5_crtc_init(struct drm_device *dev,
mdp5_crtc->lm_cursor_enabled = cursor_plane ? false : true;
- drm_crtc_init_with_planes(dev, crtc, plane, cursor_plane,
- cursor_plane ?
- &mdp5_crtc_no_lm_cursor_funcs :
- &mdp5_crtc_funcs, NULL);
-
drm_flip_work_init(&mdp5_crtc->unref_cursor_work,
"unref cursor", unref_cursor_worker);
+ ret = drmm_add_action_or_reset(dev, mdp5_crtc_flip_cleanup, mdp5_crtc);
+ if (ret)
+ return ERR_PTR(ret);
drm_crtc_helper_add(crtc, &mdp5_crtc_helper_funcs);
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 09/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (7 preceding siblings ...)
2023-07-08 1:03 ` [PATCH 08/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc Dmitry Baryshkov
@ 2023-07-08 1:03 ` Dmitry Baryshkov
2023-12-01 23:15 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 10/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_plane Dmitry Baryshkov
` (8 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:03 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Change struct mdp5_encoder allocation to use drmm_encoder_alloc(). 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/mdp5/mdp5_encoder.c | 29 +++-----------------
1 file changed, 4 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
index 79d67c495780..8db97083e14d 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
@@ -16,17 +16,6 @@ static struct mdp5_kms *get_kms(struct drm_encoder *encoder)
return to_mdp5_kms(to_mdp_kms(priv->kms));
}
-static void mdp5_encoder_destroy(struct drm_encoder *encoder)
-{
- struct mdp5_encoder *mdp5_encoder = to_mdp5_encoder(encoder);
- drm_encoder_cleanup(encoder);
- kfree(mdp5_encoder);
-}
-
-static const struct drm_encoder_funcs mdp5_encoder_funcs = {
- .destroy = mdp5_encoder_destroy,
-};
-
static void mdp5_vid_encoder_mode_set(struct drm_encoder *encoder,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
@@ -342,13 +331,11 @@ struct drm_encoder *mdp5_encoder_init(struct drm_device *dev,
struct mdp5_encoder *mdp5_encoder;
int enc_type = (intf->type == INTF_DSI) ?
DRM_MODE_ENCODER_DSI : DRM_MODE_ENCODER_TMDS;
- int ret;
- mdp5_encoder = kzalloc(sizeof(*mdp5_encoder), GFP_KERNEL);
- if (!mdp5_encoder) {
- ret = -ENOMEM;
- goto fail;
- }
+ mdp5_encoder = drmm_encoder_alloc(dev, struct mdp5_encoder, base,
+ NULL, enc_type, NULL);
+ if (IS_ERR(mdp5_encoder))
+ return ERR_CAST(mdp5_encoder);
encoder = &mdp5_encoder->base;
mdp5_encoder->ctl = ctl;
@@ -356,15 +343,7 @@ struct drm_encoder *mdp5_encoder_init(struct drm_device *dev,
spin_lock_init(&mdp5_encoder->intf_lock);
- drm_encoder_init(dev, encoder, &mdp5_encoder_funcs, enc_type, NULL);
-
drm_encoder_helper_add(encoder, &mdp5_encoder_helper_funcs);
return encoder;
-
-fail:
- if (encoder)
- mdp5_encoder_destroy(encoder);
-
- return ERR_PTR(ret);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 10/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_plane
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (8 preceding siblings ...)
2023-07-08 1:03 ` [PATCH 09/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder Dmitry Baryshkov
@ 2023-07-08 1:04 ` Dmitry Baryshkov
2023-12-01 23:24 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 11/17] drm/msm/mdp4: use bulk regulators API for LCDC encoder Dmitry Baryshkov
` (7 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:04 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Change struct mdp5_plane allocation to use drmm_plane_alloc(). This
removes the need to perform any actions on plane destruction.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c | 40 ++++------------------
1 file changed, 6 insertions(+), 34 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
index bd2c4ac45601..177fc1a56aad 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
@@ -17,9 +17,6 @@
struct mdp5_plane {
struct drm_plane base;
-
- uint32_t nformats;
- uint32_t formats[32];
};
#define to_mdp5_plane(x) container_of(x, struct mdp5_plane, base)
@@ -38,15 +35,6 @@ static bool plane_enabled(struct drm_plane_state *state)
return state->visible;
}
-static void mdp5_plane_destroy(struct drm_plane *plane)
-{
- struct mdp5_plane *mdp5_plane = to_mdp5_plane(plane);
-
- drm_plane_cleanup(plane);
-
- kfree(mdp5_plane);
-}
-
/* helper to install properties which are common to planes and crtcs */
static void mdp5_plane_install_properties(struct drm_plane *plane,
struct drm_mode_object *obj)
@@ -139,7 +127,6 @@ static void mdp5_plane_destroy_state(struct drm_plane *plane,
static const struct drm_plane_funcs mdp5_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane,
- .destroy = mdp5_plane_destroy,
.reset = mdp5_plane_reset,
.atomic_duplicate_state = mdp5_plane_duplicate_state,
.atomic_destroy_state = mdp5_plane_destroy_state,
@@ -1014,25 +1001,16 @@ struct drm_plane *mdp5_plane_init(struct drm_device *dev,
{
struct drm_plane *plane = NULL;
struct mdp5_plane *mdp5_plane;
- int ret;
- mdp5_plane = kzalloc(sizeof(*mdp5_plane), GFP_KERNEL);
- if (!mdp5_plane) {
- ret = -ENOMEM;
- goto fail;
- }
+ mdp5_plane = drmm_universal_plane_alloc(dev, struct mdp5_plane, base,
+ 0xff, &mdp5_plane_funcs,
+ mdp_rgb_yuv_formats, mdp_rgb_yuv_num_formats,
+ NULL, type, NULL);
+ if (IS_ERR(mdp5_plane))
+ return ERR_CAST(mdp5_plane);
plane = &mdp5_plane->base;
- mdp5_plane->nformats = mdp_get_formats(mdp5_plane->formats,
- ARRAY_SIZE(mdp5_plane->formats), false);
-
- ret = drm_universal_plane_init(dev, plane, 0xff, &mdp5_plane_funcs,
- mdp5_plane->formats, mdp5_plane->nformats,
- NULL, type, NULL);
- if (ret)
- goto fail;
-
drm_plane_helper_add(plane, &mdp5_plane_helper_funcs);
mdp5_plane_install_properties(plane, &plane->base);
@@ -1040,10 +1018,4 @@ struct drm_plane *mdp5_plane_init(struct drm_device *dev,
drm_plane_enable_fb_damage_clips(plane);
return plane;
-
-fail:
- if (plane)
- mdp5_plane_destroy(plane);
-
- return ERR_PTR(ret);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 11/17] drm/msm/mdp4: use bulk regulators API for LCDC encoder
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (9 preceding siblings ...)
2023-07-08 1:04 ` [PATCH 10/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_plane Dmitry Baryshkov
@ 2023-07-08 1:04 ` Dmitry Baryshkov
2023-12-01 23:27 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 12/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc Dmitry Baryshkov
` (6 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:04 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Switch mdp4_lcdc_encoder to using regulator_bulk_* API instead of
enumerating regulators by hand.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
.../gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c | 51 ++++++-------------
1 file changed, 15 insertions(+), 36 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
index 10eb3e5b218e..67c118bb30ca 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
@@ -18,7 +18,7 @@ struct mdp4_lcdc_encoder {
struct drm_panel *panel;
struct clk *lcdc_clk;
unsigned long int pixclock;
- struct regulator *regs[3];
+ struct regulator_bulk_data regs[3];
bool enabled;
uint32_t bsc;
};
@@ -271,12 +271,10 @@ static void mdp4_lcdc_encoder_mode_set(struct drm_encoder *encoder,
static void mdp4_lcdc_encoder_disable(struct drm_encoder *encoder)
{
- struct drm_device *dev = encoder->dev;
struct mdp4_lcdc_encoder *mdp4_lcdc_encoder =
to_mdp4_lcdc_encoder(encoder);
struct mdp4_kms *mdp4_kms = get_kms(encoder);
struct drm_panel *panel;
- int i, ret;
if (WARN_ON(!mdp4_lcdc_encoder->enabled))
return;
@@ -301,11 +299,8 @@ static void mdp4_lcdc_encoder_disable(struct drm_encoder *encoder)
clk_disable_unprepare(mdp4_lcdc_encoder->lcdc_clk);
- for (i = 0; i < ARRAY_SIZE(mdp4_lcdc_encoder->regs); i++) {
- ret = regulator_disable(mdp4_lcdc_encoder->regs[i]);
- if (ret)
- DRM_DEV_ERROR(dev->dev, "failed to disable regulator: %d\n", ret);
- }
+ regulator_bulk_disable(ARRAY_SIZE(mdp4_lcdc_encoder->regs),
+ mdp4_lcdc_encoder->regs);
mdp4_lcdc_encoder->enabled = false;
}
@@ -319,7 +314,7 @@ static void mdp4_lcdc_encoder_enable(struct drm_encoder *encoder)
struct mdp4_kms *mdp4_kms = get_kms(encoder);
struct drm_panel *panel;
uint32_t config;
- int i, ret;
+ int ret;
if (WARN_ON(mdp4_lcdc_encoder->enabled))
return;
@@ -339,11 +334,10 @@ static void mdp4_lcdc_encoder_enable(struct drm_encoder *encoder)
mdp4_crtc_set_config(encoder->crtc, config);
mdp4_crtc_set_intf(encoder->crtc, INTF_LCDC_DTV, 0);
- for (i = 0; i < ARRAY_SIZE(mdp4_lcdc_encoder->regs); i++) {
- ret = regulator_enable(mdp4_lcdc_encoder->regs[i]);
- if (ret)
- DRM_DEV_ERROR(dev->dev, "failed to enable regulator: %d\n", ret);
- }
+ ret = regulator_bulk_enable(ARRAY_SIZE(mdp4_lcdc_encoder->regs),
+ mdp4_lcdc_encoder->regs);
+ if (ret)
+ DRM_DEV_ERROR(dev->dev, "failed to enable regulators: %d\n", ret);
DBG("setting lcdc_clk=%lu", pc);
ret = clk_set_rate(mdp4_lcdc_encoder->lcdc_clk, pc);
@@ -385,7 +379,6 @@ struct drm_encoder *mdp4_lcdc_encoder_init(struct drm_device *dev,
{
struct drm_encoder *encoder = NULL;
struct mdp4_lcdc_encoder *mdp4_lcdc_encoder;
- struct regulator *reg;
int ret;
mdp4_lcdc_encoder = kzalloc(sizeof(*mdp4_lcdc_encoder), GFP_KERNEL);
@@ -411,29 +404,15 @@ struct drm_encoder *mdp4_lcdc_encoder_init(struct drm_device *dev,
}
/* TODO: different regulators in other cases? */
- reg = devm_regulator_get(dev->dev, "lvds-vccs-3p3v");
- if (IS_ERR(reg)) {
- ret = PTR_ERR(reg);
- DRM_DEV_ERROR(dev->dev, "failed to get lvds-vccs-3p3v: %d\n", ret);
- goto fail;
- }
- mdp4_lcdc_encoder->regs[0] = reg;
-
- reg = devm_regulator_get(dev->dev, "lvds-pll-vdda");
- if (IS_ERR(reg)) {
- ret = PTR_ERR(reg);
- DRM_DEV_ERROR(dev->dev, "failed to get lvds-pll-vdda: %d\n", ret);
- goto fail;
- }
- mdp4_lcdc_encoder->regs[1] = reg;
+ mdp4_lcdc_encoder->regs[0].supply = "lvds-vccs-3p3v";
+ mdp4_lcdc_encoder->regs[1].supply = "lvds-vccs-3p3v";
+ mdp4_lcdc_encoder->regs[2].supply = "lvds-vdda";
- reg = devm_regulator_get(dev->dev, "lvds-vdda");
- if (IS_ERR(reg)) {
- ret = PTR_ERR(reg);
- DRM_DEV_ERROR(dev->dev, "failed to get lvds-vdda: %d\n", ret);
+ ret = devm_regulator_bulk_get(dev->dev,
+ ARRAY_SIZE(mdp4_lcdc_encoder->regs),
+ mdp4_lcdc_encoder->regs);
+ if (ret)
goto fail;
- }
- mdp4_lcdc_encoder->regs[2] = reg;
return encoder;
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 12/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (10 preceding siblings ...)
2023-07-08 1:04 ` [PATCH 11/17] drm/msm/mdp4: use bulk regulators API for LCDC encoder Dmitry Baryshkov
@ 2023-07-08 1:04 ` Dmitry Baryshkov
2023-12-02 0:49 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 13/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder Dmitry Baryshkov
` (5 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:04 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Change struct mdp4_crtc allocation to use drmm_crtc_alloc(). This
removes the need to perform any actions on CRTC destruction.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 33 ++++++++++++-----------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
index 169f9de4a12a..5e5c31b44a8a 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
@@ -6,6 +6,7 @@
#include <drm/drm_crtc.h>
#include <drm/drm_flip_work.h>
+#include <drm/drm_managed.h>
#include <drm/drm_mode.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_vblank.h>
@@ -123,16 +124,6 @@ static void unref_cursor_worker(struct drm_flip_work *work, void *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): */
static const int idxs[] = {
[VG1] = 1,
@@ -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 = {
.set_config = drm_atomic_helper_set_config,
- .destroy = mdp4_crtc_destroy,
.page_flip = drm_atomic_helper_page_flip,
.cursor_set = mdp4_crtc_cursor_set,
.cursor_move = mdp4_crtc_cursor_move,
@@ -616,6 +606,13 @@ static const char *dma_names[] = {
"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 */
struct drm_crtc *mdp4_crtc_init(struct drm_device *dev,
struct drm_plane *plane, int id, int ovlp_id,
@@ -623,10 +620,13 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev,
{
struct drm_crtc *crtc = NULL;
struct mdp4_crtc *mdp4_crtc;
+ int ret;
- mdp4_crtc = kzalloc(sizeof(*mdp4_crtc), GFP_KERNEL);
- if (!mdp4_crtc)
- return ERR_PTR(-ENOMEM);
+ mdp4_crtc = drmm_crtc_alloc_with_planes(dev, struct mdp4_crtc, base,
+ plane, NULL,
+ &mdp4_crtc_funcs, NULL);
+ if (IS_ERR(mdp4_crtc))
+ return ERR_CAST(mdp4_crtc);
crtc = &mdp4_crtc->base;
@@ -648,9 +648,10 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev,
drm_flip_work_init(&mdp4_crtc->unref_cursor_work,
"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);
return crtc;
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 13/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (11 preceding siblings ...)
2023-07-08 1:04 ` [PATCH 12/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc Dmitry Baryshkov
@ 2023-07-08 1:04 ` Dmitry Baryshkov
2023-12-02 1:16 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 14/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder Dmitry Baryshkov
` (4 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:04 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Change struct mdp4_dsi_encoder allocation to use drmm_encoder_alloc().
This removes the need to perform any actions on this encoder
destruction.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
.../gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c | 32 +++----------------
1 file changed, 5 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
index 39b8fe53c29d..74dafe7106be 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
@@ -26,18 +26,6 @@ static struct mdp4_kms *get_kms(struct drm_encoder *encoder)
return to_mdp4_kms(to_mdp_kms(priv->kms));
}
-static void mdp4_dsi_encoder_destroy(struct drm_encoder *encoder)
-{
- struct mdp4_dsi_encoder *mdp4_dsi_encoder = to_mdp4_dsi_encoder(encoder);
-
- drm_encoder_cleanup(encoder);
- kfree(mdp4_dsi_encoder);
-}
-
-static const struct drm_encoder_funcs mdp4_dsi_encoder_funcs = {
- .destroy = mdp4_dsi_encoder_destroy,
-};
-
static void mdp4_dsi_encoder_mode_set(struct drm_encoder *encoder,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
@@ -148,28 +136,18 @@ static const struct drm_encoder_helper_funcs mdp4_dsi_encoder_helper_funcs = {
/* initialize encoder */
struct drm_encoder *mdp4_dsi_encoder_init(struct drm_device *dev)
{
- struct drm_encoder *encoder = NULL;
+ struct drm_encoder *encoder;
struct mdp4_dsi_encoder *mdp4_dsi_encoder;
- int ret;
- mdp4_dsi_encoder = kzalloc(sizeof(*mdp4_dsi_encoder), GFP_KERNEL);
- if (!mdp4_dsi_encoder) {
- ret = -ENOMEM;
- goto fail;
- }
+ mdp4_dsi_encoder = drmm_encoder_alloc(dev, struct mdp4_dsi_encoder, base,
+ NULL, DRM_MODE_ENCODER_DSI, NULL);
+ if (IS_ERR(mdp4_dsi_encoder))
+ return ERR_CAST(mdp4_dsi_encoder);
encoder = &mdp4_dsi_encoder->base;
- drm_encoder_init(dev, encoder, &mdp4_dsi_encoder_funcs,
- DRM_MODE_ENCODER_DSI, NULL);
drm_encoder_helper_add(encoder, &mdp4_dsi_encoder_helper_funcs);
return encoder;
-
-fail:
- if (encoder)
- mdp4_dsi_encoder_destroy(encoder);
-
- return ERR_PTR(ret);
}
#endif /* CONFIG_DRM_MSM_DSI */
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 14/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (12 preceding siblings ...)
2023-07-08 1:04 ` [PATCH 13/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder Dmitry Baryshkov
@ 2023-07-08 1:04 ` Dmitry Baryshkov
2023-12-02 1:17 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 15/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder Dmitry Baryshkov
` (3 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:04 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Change struct mdp4_dtv_encoder allocation to use drmm_encoder_alloc().
This removes the need to perform any actions on this encoder
destruction.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
.../gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c | 37 ++++---------------
1 file changed, 7 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
index 88645dbc3785..3b70764b48c4 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
@@ -25,17 +25,6 @@ static struct mdp4_kms *get_kms(struct drm_encoder *encoder)
return to_mdp4_kms(to_mdp_kms(priv->kms));
}
-static void mdp4_dtv_encoder_destroy(struct drm_encoder *encoder)
-{
- struct mdp4_dtv_encoder *mdp4_dtv_encoder = to_mdp4_dtv_encoder(encoder);
- drm_encoder_cleanup(encoder);
- kfree(mdp4_dtv_encoder);
-}
-
-static const struct drm_encoder_funcs mdp4_dtv_encoder_funcs = {
- .destroy = mdp4_dtv_encoder_destroy,
-};
-
static void mdp4_dtv_encoder_mode_set(struct drm_encoder *encoder,
struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode)
@@ -173,41 +162,29 @@ long mdp4_dtv_round_pixclk(struct drm_encoder *encoder, unsigned long rate)
/* initialize encoder */
struct drm_encoder *mdp4_dtv_encoder_init(struct drm_device *dev)
{
- struct drm_encoder *encoder = NULL;
+ struct drm_encoder *encoder;
struct mdp4_dtv_encoder *mdp4_dtv_encoder;
- int ret;
- mdp4_dtv_encoder = kzalloc(sizeof(*mdp4_dtv_encoder), GFP_KERNEL);
- if (!mdp4_dtv_encoder) {
- ret = -ENOMEM;
- goto fail;
- }
+ mdp4_dtv_encoder = drmm_encoder_alloc(dev, struct mdp4_dtv_encoder, base,
+ NULL, DRM_MODE_ENCODER_TMDS, NULL);
+ if (IS_ERR(mdp4_dtv_encoder))
+ return ERR_CAST(mdp4_dtv_encoder);
encoder = &mdp4_dtv_encoder->base;
- drm_encoder_init(dev, encoder, &mdp4_dtv_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
drm_encoder_helper_add(encoder, &mdp4_dtv_encoder_helper_funcs);
mdp4_dtv_encoder->hdmi_clk = devm_clk_get(dev->dev, "hdmi_clk");
if (IS_ERR(mdp4_dtv_encoder->hdmi_clk)) {
DRM_DEV_ERROR(dev->dev, "failed to get hdmi_clk\n");
- ret = PTR_ERR(mdp4_dtv_encoder->hdmi_clk);
- goto fail;
+ return ERR_CAST(mdp4_dtv_encoder->hdmi_clk);
}
mdp4_dtv_encoder->mdp_clk = devm_clk_get(dev->dev, "tv_clk");
if (IS_ERR(mdp4_dtv_encoder->mdp_clk)) {
DRM_DEV_ERROR(dev->dev, "failed to get tv_clk\n");
- ret = PTR_ERR(mdp4_dtv_encoder->mdp_clk);
- goto fail;
+ return ERR_CAST(mdp4_dtv_encoder->mdp_clk);
}
return encoder;
-
-fail:
- if (encoder)
- mdp4_dtv_encoder_destroy(encoder);
-
- return ERR_PTR(ret);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 15/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (13 preceding siblings ...)
2023-07-08 1:04 ` [PATCH 14/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder Dmitry Baryshkov
@ 2023-07-08 1:04 ` Dmitry Baryshkov
2023-12-02 1:22 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 16/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_plane Dmitry Baryshkov
` (2 subsequent siblings)
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:04 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Change struct mdp4_lcdc_encoder allocation to use drmm_encoder_alloc().
This removes the need to perform any actions on this encoder
destruction.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
.../gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c | 36 ++++---------------
1 file changed, 7 insertions(+), 29 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
index 67c118bb30ca..576995ddce37 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
@@ -30,18 +30,6 @@ static struct mdp4_kms *get_kms(struct drm_encoder *encoder)
return to_mdp4_kms(to_mdp_kms(priv->kms));
}
-static void mdp4_lcdc_encoder_destroy(struct drm_encoder *encoder)
-{
- struct mdp4_lcdc_encoder *mdp4_lcdc_encoder =
- to_mdp4_lcdc_encoder(encoder);
- drm_encoder_cleanup(encoder);
- kfree(mdp4_lcdc_encoder);
-}
-
-static const struct drm_encoder_funcs mdp4_lcdc_encoder_funcs = {
- .destroy = mdp4_lcdc_encoder_destroy,
-};
-
/* this should probably be a helper: */
static struct drm_connector *get_connector(struct drm_encoder *encoder)
{
@@ -377,30 +365,26 @@ long mdp4_lcdc_round_pixclk(struct drm_encoder *encoder, unsigned long rate)
struct drm_encoder *mdp4_lcdc_encoder_init(struct drm_device *dev,
struct device_node *panel_node)
{
- struct drm_encoder *encoder = NULL;
+ struct drm_encoder *encoder;
struct mdp4_lcdc_encoder *mdp4_lcdc_encoder;
int ret;
- mdp4_lcdc_encoder = kzalloc(sizeof(*mdp4_lcdc_encoder), GFP_KERNEL);
- if (!mdp4_lcdc_encoder) {
- ret = -ENOMEM;
- goto fail;
- }
+ mdp4_lcdc_encoder = drmm_encoder_alloc(dev, struct mdp4_lcdc_encoder, base,
+ NULL, DRM_MODE_ENCODER_LVDS, NULL);
+ if (IS_ERR(mdp4_lcdc_encoder))
+ return ERR_CAST(mdp4_lcdc_encoder);
mdp4_lcdc_encoder->panel_node = panel_node;
encoder = &mdp4_lcdc_encoder->base;
- drm_encoder_init(dev, encoder, &mdp4_lcdc_encoder_funcs,
- DRM_MODE_ENCODER_LVDS, NULL);
drm_encoder_helper_add(encoder, &mdp4_lcdc_encoder_helper_funcs);
/* TODO: do we need different pll in other cases? */
mdp4_lcdc_encoder->lcdc_clk = mpd4_lvds_pll_init(dev);
if (IS_ERR(mdp4_lcdc_encoder->lcdc_clk)) {
DRM_DEV_ERROR(dev->dev, "failed to get lvds_clk\n");
- ret = PTR_ERR(mdp4_lcdc_encoder->lcdc_clk);
- goto fail;
+ return ERR_CAST(mdp4_lcdc_encoder->lcdc_clk);
}
/* TODO: different regulators in other cases? */
@@ -412,13 +396,7 @@ struct drm_encoder *mdp4_lcdc_encoder_init(struct drm_device *dev,
ARRAY_SIZE(mdp4_lcdc_encoder->regs),
mdp4_lcdc_encoder->regs);
if (ret)
- goto fail;
+ return ERR_PTR(ret);
return encoder;
-
-fail:
- if (encoder)
- mdp4_lcdc_encoder_destroy(encoder);
-
- return ERR_PTR(ret);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 16/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_plane
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (14 preceding siblings ...)
2023-07-08 1:04 ` [PATCH 15/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder Dmitry Baryshkov
@ 2023-07-08 1:04 ` Dmitry Baryshkov
2023-12-02 1:24 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 17/17] drm/msm: drop mdp_get_formats() Dmitry Baryshkov
2023-12-03 11:26 ` [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:04 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Change struct mdp4_plane allocation to use drmm_plane_alloc(). This
removes the need to perform any actions on plane destruction.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp4/mdp4_plane.c | 59 ++++++++--------------
1 file changed, 20 insertions(+), 39 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_plane.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_plane.c
index b689b618da78..1149e6721534 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_plane.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_plane.c
@@ -20,12 +20,6 @@ struct mdp4_plane {
const char *name;
enum mdp4_pipe pipe;
-
- uint32_t caps;
- uint32_t nformats;
- uint32_t formats[32];
-
- bool enabled;
};
#define to_mdp4_plane(x) container_of(x, struct mdp4_plane, base)
@@ -59,15 +53,6 @@ static struct mdp4_kms *get_kms(struct drm_plane *plane)
return to_mdp4_kms(to_mdp_kms(priv->kms));
}
-static void mdp4_plane_destroy(struct drm_plane *plane)
-{
- struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane);
-
- drm_plane_cleanup(plane);
-
- kfree(mdp4_plane);
-}
-
/* helper to install properties which are common to planes and crtcs */
static void mdp4_plane_install_properties(struct drm_plane *plane,
struct drm_mode_object *obj)
@@ -85,7 +70,6 @@ static int mdp4_plane_set_property(struct drm_plane *plane,
static const struct drm_plane_funcs mdp4_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane,
- .destroy = mdp4_plane_destroy,
.set_property = mdp4_plane_set_property,
.reset = drm_atomic_helper_plane_reset,
.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
@@ -377,31 +361,34 @@ struct drm_plane *mdp4_plane_init(struct drm_device *dev,
{
struct drm_plane *plane = NULL;
struct mdp4_plane *mdp4_plane;
- int ret;
enum drm_plane_type type;
+ uint32_t pipe_caps;
+ const uint32_t *formats;
+ size_t nformats;
- mdp4_plane = kzalloc(sizeof(*mdp4_plane), GFP_KERNEL);
- if (!mdp4_plane) {
- ret = -ENOMEM;
- goto fail;
+ type = private_plane ? DRM_PLANE_TYPE_PRIMARY : DRM_PLANE_TYPE_OVERLAY;
+
+ pipe_caps = mdp4_pipe_caps(pipe_id);
+ if (pipe_supports_yuv(pipe_caps)) {
+ formats = mdp_rgb_yuv_formats;
+ nformats = mdp_rgb_yuv_num_formats;
+ } else {
+ formats = mdp_rgb_formats;
+ nformats = mdp_rgb_num_formats;
}
+ mdp4_plane = drmm_universal_plane_alloc(dev, struct mdp4_plane, base,
+ 0xff, &mdp4_plane_funcs,
+ formats, nformats,
+ supported_format_modifiers,
+ type, NULL);
+ if (IS_ERR(mdp4_plane))
+ return ERR_CAST(mdp4_plane);
+
plane = &mdp4_plane->base;
mdp4_plane->pipe = pipe_id;
mdp4_plane->name = pipe_names[pipe_id];
- mdp4_plane->caps = mdp4_pipe_caps(pipe_id);
-
- mdp4_plane->nformats = mdp_get_formats(mdp4_plane->formats,
- ARRAY_SIZE(mdp4_plane->formats),
- !pipe_supports_yuv(mdp4_plane->caps));
-
- type = private_plane ? DRM_PLANE_TYPE_PRIMARY : DRM_PLANE_TYPE_OVERLAY;
- ret = drm_universal_plane_init(dev, plane, 0xff, &mdp4_plane_funcs,
- mdp4_plane->formats, mdp4_plane->nformats,
- supported_format_modifiers, type, NULL);
- if (ret)
- goto fail;
drm_plane_helper_add(plane, &mdp4_plane_helper_funcs);
@@ -410,10 +397,4 @@ struct drm_plane *mdp4_plane_init(struct drm_device *dev,
drm_plane_enable_fb_damage_clips(plane);
return plane;
-
-fail:
- if (plane)
- mdp4_plane_destroy(plane);
-
- return ERR_PTR(ret);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [PATCH 17/17] drm/msm: drop mdp_get_formats()
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (15 preceding siblings ...)
2023-07-08 1:04 ` [PATCH 16/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_plane Dmitry Baryshkov
@ 2023-07-08 1:04 ` Dmitry Baryshkov
2023-12-02 1:25 ` Abhinav Kumar
2023-12-03 11:26 ` [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
17 siblings, 1 reply; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-07-08 1:04 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
Drop the function mdp_get_formats(), which became unused after
converting both MDP4 and MDP5 planes to use static formats arrays.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/disp/mdp_format.c | 24 ------------------------
drivers/gpu/drm/msm/disp/mdp_kms.h | 1 -
2 files changed, 25 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/mdp_format.c b/drivers/gpu/drm/msm/disp/mdp_format.c
index ba9abe8b3acc..0fe430af9523 100644
--- a/drivers/gpu/drm/msm/disp/mdp_format.c
+++ b/drivers/gpu/drm/msm/disp/mdp_format.c
@@ -183,30 +183,6 @@ const uint32_t mdp_rgb_yuv_formats[] = {
size_t mdp_rgb_yuv_num_formats = ARRAY_SIZE(mdp_rgb_yuv_formats);
-/*
- * Note:
- * @rgb_only must be set to true, when requesting
- * supported formats for RGB pipes.
- */
-uint32_t mdp_get_formats(uint32_t *pixel_formats, uint32_t max_formats,
- bool rgb_only)
-{
- uint32_t i;
- for (i = 0; i < ARRAY_SIZE(formats); i++) {
- const struct mdp_format *f = &formats[i];
-
- if (i == max_formats)
- break;
-
- if (rgb_only && MDP_FORMAT_IS_YUV(f))
- break;
-
- pixel_formats[i] = f->base.pixel_format;
- }
-
- return i;
-}
-
const struct msm_format *mdp_get_format(struct msm_kms *kms, uint32_t format,
uint64_t modifier)
{
diff --git a/drivers/gpu/drm/msm/disp/mdp_kms.h b/drivers/gpu/drm/msm/disp/mdp_kms.h
index 11402a859574..1b2ccf7e7de6 100644
--- a/drivers/gpu/drm/msm/disp/mdp_kms.h
+++ b/drivers/gpu/drm/msm/disp/mdp_kms.h
@@ -91,7 +91,6 @@ struct mdp_format {
#define to_mdp_format(x) container_of(x, struct mdp_format, base)
#define MDP_FORMAT_IS_YUV(mdp_format) ((mdp_format)->is_yuv)
-uint32_t mdp_get_formats(uint32_t *formats, uint32_t max_formats, bool rgb_only);
const struct msm_format *mdp_get_format(struct msm_kms *kms, uint32_t format, uint64_t modifier);
extern const uint32_t mdp_rgb_formats[];
--
2.39.2
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [Freedreno] [PATCH 02/17] drm/msm/mdp5: use devres-managed allocation for configuration data
2023-07-08 1:03 ` [PATCH 02/17] drm/msm/mdp5: use devres-managed allocation for configuration data Dmitry Baryshkov
@ 2023-12-01 22:12 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 22:12 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: freedreno, linux-arm-msm, Bjorn Andersson, dri-devel,
Stephen Boyd, Daniel Vetter, David Airlie
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Use devm_kzalloc to create configuration data structure. This allows us
> to remove corresponding kfree and drop mdp5_cfg_destroy() function.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c | 24 +++++-------------------
> drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.h | 1 -
> drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 2 --
> 3 files changed, 5 insertions(+), 22 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data
2023-07-08 1:03 ` [PATCH 03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data Dmitry Baryshkov
@ 2023-12-01 22:15 ` Abhinav Kumar
2023-12-01 22:16 ` Abhinav Kumar
1 sibling, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 22:15 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Use devm_kzalloc to create CTL manager data structure. This allows us
> to remove corresponding kfree and drop mdp5_ctlm_destroy() function.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data
2023-07-08 1:03 ` [PATCH 03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data Dmitry Baryshkov
2023-12-01 22:15 ` Abhinav Kumar
@ 2023-12-01 22:16 ` Abhinav Kumar
1 sibling, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 22:16 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Use devm_kzalloc to create CTL manager data structure. This allows us
> to remove corresponding kfree and drop mdp5_ctlm_destroy() function.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.c | 21 ++++-----------------
> drivers/gpu/drm/msm/disp/mdp5/mdp5_ctl.h | 1 -
> drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 2 --
> 3 files changed, 4 insertions(+), 20 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 04/17] drm/msm/mdp5: use devres-managed allocation for mixer data
2023-07-08 1:03 ` [PATCH 04/17] drm/msm/mdp5: use devres-managed allocation for mixer data Dmitry Baryshkov
@ 2023-12-01 22:19 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 22:19 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Use devm_kzalloc to create mixer data structure. This allows us
> to remove corresponding kfree and drop mdp5_mixer_destroy() function.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 5 +----
> drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.c | 10 +++-------
> drivers/gpu/drm/msm/disp/mdp5/mdp5_mixer.h | 4 ++--
> 3 files changed, 6 insertions(+), 13 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 05/17] drm/msm/mdp5: use devres-managed allocation for pipe data
2023-07-08 1:03 ` [PATCH 05/17] drm/msm/mdp5: use devres-managed allocation for pipe data Dmitry Baryshkov
@ 2023-12-01 22:21 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 22:21 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Use devm_kzalloc to create pipe data structure. This allows us
> to remove corresponding kfree and drop mdp5_pipe_destroy() function.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 6 +-----
> drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.c | 10 +++-------
> drivers/gpu/drm/msm/disp/mdp5/mdp5_pipe.h | 4 ++--
> 3 files changed, 6 insertions(+), 14 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 06/17] drm/msm/mdp5: use devres-managed allocation for SMP data
2023-07-08 1:03 ` [PATCH 06/17] drm/msm/mdp5: use devres-managed allocation for SMP data Dmitry Baryshkov
@ 2023-12-01 22:23 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 22:23 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Use devm_kzalloc to create SMP data structure. This allows us
> to remove corresponding kfree and drop mdp5_smp_destroy() function.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 3 ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c | 19 ++++---------------
> drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.h | 1 -
> 3 files changed, 4 insertions(+), 19 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 07/17] drm/msm/mdp5: use devres-managed allocation for INTF data
2023-07-08 1:03 ` [PATCH 07/17] drm/msm/mdp5: use devres-managed allocation for INTF data Dmitry Baryshkov
@ 2023-12-01 23:04 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 23:04 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Use devm_kzalloc to create INTF data structure. This allows us
> to remove corresponding kfree() call.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 7 +------
> 1 file changed, 1 insertion(+), 6 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 08/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc
2023-07-08 1:03 ` [PATCH 08/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc Dmitry Baryshkov
@ 2023-12-01 23:12 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 23:12 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Change struct mdp5_crtc allocation to use drmm_crtc_alloc(). This
> removes the need to perform any actions on CRTC destruction.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 30 +++++++++++------------
> 1 file changed, 15 insertions(+), 15 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 09/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder
2023-07-08 1:03 ` [PATCH 09/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder Dmitry Baryshkov
@ 2023-12-01 23:15 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 23:15 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> Change struct mdp5_encoder allocation to use drmm_encoder_alloc(). 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/mdp5/mdp5_encoder.c | 29 +++-----------------
> 1 file changed, 4 insertions(+), 25 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 10/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_plane
2023-07-08 1:04 ` [PATCH 10/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_plane Dmitry Baryshkov
@ 2023-12-01 23:24 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 23:24 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
> Change struct mdp5_plane allocation to use drmm_plane_alloc(). This
> removes the need to perform any actions on plane destruction.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c | 40 ++++------------------
> 1 file changed, 6 insertions(+), 34 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 11/17] drm/msm/mdp4: use bulk regulators API for LCDC encoder
2023-07-08 1:04 ` [PATCH 11/17] drm/msm/mdp4: use bulk regulators API for LCDC encoder Dmitry Baryshkov
@ 2023-12-01 23:27 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-01 23:27 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
> Switch mdp4_lcdc_encoder to using regulator_bulk_* API instead of
> enumerating regulators by hand.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> .../gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c | 51 ++++++-------------
> 1 file changed, 15 insertions(+), 36 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 12/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc
2023-07-08 1:04 ` [PATCH 12/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc Dmitry Baryshkov
@ 2023-12-02 0:49 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-02 0:49 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
> Change struct mdp4_crtc allocation to use drmm_crtc_alloc(). This
> removes the need to perform any actions on CRTC destruction.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 33 ++++++++++++-----------
> 1 file changed, 17 insertions(+), 16 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 13/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder
2023-07-08 1:04 ` [PATCH 13/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder Dmitry Baryshkov
@ 2023-12-02 1:16 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-02 1:16 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
> Change struct mdp4_dsi_encoder allocation to use drmm_encoder_alloc().
> This removes the need to perform any actions on this encoder
> destruction.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> .../gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c | 32 +++----------------
> 1 file changed, 5 insertions(+), 27 deletions(-)
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 14/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder
2023-07-08 1:04 ` [PATCH 14/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder Dmitry Baryshkov
@ 2023-12-02 1:17 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-02 1:17 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
> Change struct mdp4_dtv_encoder allocation to use drmm_encoder_alloc().
> This removes the need to perform any actions on this encoder
> destruction.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> .../gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c | 37 ++++---------------
> 1 file changed, 7 insertions(+), 30 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 15/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder
2023-07-08 1:04 ` [PATCH 15/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder Dmitry Baryshkov
@ 2023-12-02 1:22 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-02 1:22 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
> Change struct mdp4_lcdc_encoder allocation to use drmm_encoder_alloc().
> This removes the need to perform any actions on this encoder
> destruction.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> .../gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c | 36 ++++---------------
> 1 file changed, 7 insertions(+), 29 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 16/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_plane
2023-07-08 1:04 ` [PATCH 16/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_plane Dmitry Baryshkov
@ 2023-12-02 1:24 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-02 1:24 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
> Change struct mdp4_plane allocation to use drmm_plane_alloc(). This
> removes the need to perform any actions on plane destruction.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp4/mdp4_plane.c | 59 ++++++++--------------
> 1 file changed, 20 insertions(+), 39 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 17/17] drm/msm: drop mdp_get_formats()
2023-07-08 1:04 ` [PATCH 17/17] drm/msm: drop mdp_get_formats() Dmitry Baryshkov
@ 2023-12-02 1:25 ` Abhinav Kumar
2023-12-02 1:33 ` Abhinav Kumar
0 siblings, 1 reply; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-02 1:25 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
> Drop the function mdp_get_formats(), which became unused after
> converting both MDP4 and MDP5 planes to use static formats arrays.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp_format.c | 24 ------------------------
> drivers/gpu/drm/msm/disp/mdp_kms.h | 1 -
> 2 files changed, 25 deletions(-)
>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 17/17] drm/msm: drop mdp_get_formats()
2023-12-02 1:25 ` Abhinav Kumar
@ 2023-12-02 1:33 ` Abhinav Kumar
0 siblings, 0 replies; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-02 1:33 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: freedreno, linux-arm-msm, Bjorn Andersson, dri-devel,
Stephen Boyd
On 12/1/2023 5:25 PM, Abhinav Kumar wrote:
>
>
> On 7/7/2023 6:04 PM, Dmitry Baryshkov wrote:
>> Drop the function mdp_get_formats(), which became unused after
>> converting both MDP4 and MDP5 planes to use static formats arrays.
>>
>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
>> ---
>> drivers/gpu/drm/msm/disp/mdp_format.c | 24 ------------------------
>> drivers/gpu/drm/msm/disp/mdp_kms.h | 1 -
>> 2 files changed, 25 deletions(-)
>>
>
> Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Actually, I have one concern with patch 1 and patch 17 of this series.
You cannot get rid of static const struct mdp_format formats[] because
mdp_get_format() still uses it.
Now, we end up having to maintain two arrays to hold the formats, the
already existing formats[] one and newly added mdp_rgb_formats[] and
mdp_rgb_yuv_formats[].
This is an overkill.
I am fine with overall migrating to drmm-managed APIs but I think patch
1 and this one are not necessary.
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 01/17] drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware
2023-07-08 1:03 ` [PATCH 01/17] drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware Dmitry Baryshkov
@ 2023-12-02 1:36 ` Abhinav Kumar
2023-12-02 11:12 ` Dmitry Baryshkov
0 siblings, 1 reply; 39+ messages in thread
From: Abhinav Kumar @ 2023-12-02 1:36 UTC (permalink / raw)
To: Dmitry Baryshkov, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
> MDP4 and MDP5 drivers enumerate supported formats each time the plane is
> created. As the list of supported image formats is constant, create
> corresponding data arrays to be used by MDP4 and MDP5 drivers.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/disp/mdp_format.c | 49 +++++++++++++++++++++++++--
> drivers/gpu/drm/msm/disp/mdp_kms.h | 5 +++
> 2 files changed, 52 insertions(+), 2 deletions(-)
>
After going through the patch series, as commented in patch 17 I am
totally fine with migrating to drmm-managed APIs but I dont like to
maintain 3 format arrays.
Can we keep the existing format mechanism to avoid having two more arrays?
> diff --git a/drivers/gpu/drm/msm/disp/mdp_format.c b/drivers/gpu/drm/msm/disp/mdp_format.c
> index 025595336f26..ba9abe8b3acc 100644
> --- a/drivers/gpu/drm/msm/disp/mdp_format.c
> +++ b/drivers/gpu/drm/msm/disp/mdp_format.c
> @@ -81,8 +81,8 @@ static struct csc_cfg csc_convert[CSC_MAX] = {
> #define BPC0A 0
>
> /*
> - * Note: Keep RGB formats 1st, followed by YUV formats to avoid breaking
> - * mdp_get_rgb_formats()'s implementation.
> + * Note: Keep mdp_rgb_formats and mdp_rgb_yuv_formats in sync when adding
> + * entries to this array.
> */
> static const struct mdp_format formats[] = {
> /* name a r g b e0 e1 e2 e3 alpha tight cpp cnt ... */
> @@ -138,6 +138,51 @@ static const struct mdp_format formats[] = {
> MDP_PLANE_PLANAR, CHROMA_420, true),
> };
>
> +const uint32_t mdp_rgb_formats[] = {
> + DRM_FORMAT_ARGB8888,
> + DRM_FORMAT_ABGR8888,
> + DRM_FORMAT_RGBA8888,
> + DRM_FORMAT_BGRA8888,
> + DRM_FORMAT_XRGB8888,
> + DRM_FORMAT_XBGR8888,
> + DRM_FORMAT_RGBX8888,
> + DRM_FORMAT_BGRX8888,
> + DRM_FORMAT_RGB888,
> + DRM_FORMAT_BGR888,
> + DRM_FORMAT_RGB565,
> + DRM_FORMAT_BGR565,
> +};
> +
> +size_t mdp_rgb_num_formats = ARRAY_SIZE(mdp_rgb_formats);
> +
> +const uint32_t mdp_rgb_yuv_formats[] = {
> + DRM_FORMAT_ARGB8888,
> + DRM_FORMAT_ABGR8888,
> + DRM_FORMAT_RGBA8888,
> + DRM_FORMAT_BGRA8888,
> + DRM_FORMAT_XRGB8888,
> + DRM_FORMAT_XBGR8888,
> + DRM_FORMAT_RGBX8888,
> + DRM_FORMAT_BGRX8888,
> + DRM_FORMAT_RGB888,
> + DRM_FORMAT_BGR888,
> + DRM_FORMAT_RGB565,
> + DRM_FORMAT_BGR565,
> +
> + DRM_FORMAT_NV12,
> + DRM_FORMAT_NV21,
> + DRM_FORMAT_NV16,
> + DRM_FORMAT_NV61,
> + DRM_FORMAT_VYUY,
> + DRM_FORMAT_UYVY,
> + DRM_FORMAT_YUYV,
> + DRM_FORMAT_YVYU,
> + DRM_FORMAT_YUV420,
> + DRM_FORMAT_YVU420,
> +};
> +
> +size_t mdp_rgb_yuv_num_formats = ARRAY_SIZE(mdp_rgb_yuv_formats);
> +
> /*
> * Note:
> * @rgb_only must be set to true, when requesting
> diff --git a/drivers/gpu/drm/msm/disp/mdp_kms.h b/drivers/gpu/drm/msm/disp/mdp_kms.h
> index b0286d5d5130..11402a859574 100644
> --- a/drivers/gpu/drm/msm/disp/mdp_kms.h
> +++ b/drivers/gpu/drm/msm/disp/mdp_kms.h
> @@ -94,6 +94,11 @@ struct mdp_format {
> uint32_t mdp_get_formats(uint32_t *formats, uint32_t max_formats, bool rgb_only);
> const struct msm_format *mdp_get_format(struct msm_kms *kms, uint32_t format, uint64_t modifier);
>
> +extern const uint32_t mdp_rgb_formats[];
> +extern size_t mdp_rgb_num_formats;
> +extern const uint32_t mdp_rgb_yuv_formats[];
> +extern size_t mdp_rgb_yuv_num_formats;
> +
> /* MDP capabilities */
> #define MDP_CAP_SMP BIT(0) /* Shared Memory Pool */
> #define MDP_CAP_DSC BIT(1) /* VESA Display Stream Compression */
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 01/17] drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware
2023-12-02 1:36 ` Abhinav Kumar
@ 2023-12-02 11:12 ` Dmitry Baryshkov
0 siblings, 0 replies; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-12-02 11:12 UTC (permalink / raw)
To: Abhinav Kumar, Rob Clark, Sean Paul, Marijn Suijten
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On 02/12/2023 03:36, Abhinav Kumar wrote:
>
>
> On 7/7/2023 6:03 PM, Dmitry Baryshkov wrote:
>> MDP4 and MDP5 drivers enumerate supported formats each time the plane is
>> created. As the list of supported image formats is constant, create
>> corresponding data arrays to be used by MDP4 and MDP5 drivers.
>>
>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
>> ---
>> drivers/gpu/drm/msm/disp/mdp_format.c | 49 +++++++++++++++++++++++++--
>> drivers/gpu/drm/msm/disp/mdp_kms.h | 5 +++
>> 2 files changed, 52 insertions(+), 2 deletions(-)
>>
>
> After going through the patch series, as commented in patch 17 I am
> totally fine with migrating to drmm-managed APIs but I dont like to
> maintain 3 format arrays.
>
> Can we keep the existing format mechanism to avoid having two more arrays?
For DPU we have exactly the same idea: single formats data array
describing and per-usecase arrays, like plane RGB arrays, plane YUV+RGB
array, WB arrays.
Anyway. formats was one of the topics where we had a lot of duplication
between mdp4/mdp5 and dpu anyway. I think I'm going to back up the
patches 1, 10, 16, 17 (plane patches depend on the format arrays), push
the rest of the patches to msm-next-lumag and send a series reworking
all the formats handling.
>
>> diff --git a/drivers/gpu/drm/msm/disp/mdp_format.c
>> b/drivers/gpu/drm/msm/disp/mdp_format.c
>> index 025595336f26..ba9abe8b3acc 100644
>> --- a/drivers/gpu/drm/msm/disp/mdp_format.c
>> +++ b/drivers/gpu/drm/msm/disp/mdp_format.c
>> @@ -81,8 +81,8 @@ static struct csc_cfg csc_convert[CSC_MAX] = {
>> #define BPC0A 0
>> /*
>> - * Note: Keep RGB formats 1st, followed by YUV formats to avoid breaking
>> - * mdp_get_rgb_formats()'s implementation.
>> + * Note: Keep mdp_rgb_formats and mdp_rgb_yuv_formats in sync when
>> adding
>> + * entries to this array.
>> */
>> static const struct mdp_format formats[] = {
>> /* name a r g b e0 e1 e2 e3 alpha tight cpp cnt
>> ... */
>> @@ -138,6 +138,51 @@ static const struct mdp_format formats[] = {
>> MDP_PLANE_PLANAR, CHROMA_420, true),
>> };
>> +const uint32_t mdp_rgb_formats[] = {
>> + DRM_FORMAT_ARGB8888,
>> + DRM_FORMAT_ABGR8888,
>> + DRM_FORMAT_RGBA8888,
>> + DRM_FORMAT_BGRA8888,
>> + DRM_FORMAT_XRGB8888,
>> + DRM_FORMAT_XBGR8888,
>> + DRM_FORMAT_RGBX8888,
>> + DRM_FORMAT_BGRX8888,
>> + DRM_FORMAT_RGB888,
>> + DRM_FORMAT_BGR888,
>> + DRM_FORMAT_RGB565,
>> + DRM_FORMAT_BGR565,
>> +};
>> +
>> +size_t mdp_rgb_num_formats = ARRAY_SIZE(mdp_rgb_formats);
>> +
>> +const uint32_t mdp_rgb_yuv_formats[] = {
>> + DRM_FORMAT_ARGB8888,
>> + DRM_FORMAT_ABGR8888,
>> + DRM_FORMAT_RGBA8888,
>> + DRM_FORMAT_BGRA8888,
>> + DRM_FORMAT_XRGB8888,
>> + DRM_FORMAT_XBGR8888,
>> + DRM_FORMAT_RGBX8888,
>> + DRM_FORMAT_BGRX8888,
>> + DRM_FORMAT_RGB888,
>> + DRM_FORMAT_BGR888,
>> + DRM_FORMAT_RGB565,
>> + DRM_FORMAT_BGR565,
>> +
>> + DRM_FORMAT_NV12,
>> + DRM_FORMAT_NV21,
>> + DRM_FORMAT_NV16,
>> + DRM_FORMAT_NV61,
>> + DRM_FORMAT_VYUY,
>> + DRM_FORMAT_UYVY,
>> + DRM_FORMAT_YUYV,
>> + DRM_FORMAT_YVYU,
>> + DRM_FORMAT_YUV420,
>> + DRM_FORMAT_YVU420,
>> +};
>> +
>> +size_t mdp_rgb_yuv_num_formats = ARRAY_SIZE(mdp_rgb_yuv_formats);
>> +
>> /*
>> * Note:
>> * @rgb_only must be set to true, when requesting
>> diff --git a/drivers/gpu/drm/msm/disp/mdp_kms.h
>> b/drivers/gpu/drm/msm/disp/mdp_kms.h
>> index b0286d5d5130..11402a859574 100644
>> --- a/drivers/gpu/drm/msm/disp/mdp_kms.h
>> +++ b/drivers/gpu/drm/msm/disp/mdp_kms.h
>> @@ -94,6 +94,11 @@ struct mdp_format {
>> uint32_t mdp_get_formats(uint32_t *formats, uint32_t max_formats,
>> bool rgb_only);
>> const struct msm_format *mdp_get_format(struct msm_kms *kms,
>> uint32_t format, uint64_t modifier);
>> +extern const uint32_t mdp_rgb_formats[];
>> +extern size_t mdp_rgb_num_formats;
>> +extern const uint32_t mdp_rgb_yuv_formats[];
>> +extern size_t mdp_rgb_yuv_num_formats;
>> +
>> /* MDP capabilities */
>> #define MDP_CAP_SMP BIT(0) /* Shared Memory
>> Pool */
>> #define MDP_CAP_DSC BIT(1) /* VESA Display Stream
>> Compression */
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
` (16 preceding siblings ...)
2023-07-08 1:04 ` [PATCH 17/17] drm/msm: drop mdp_get_formats() Dmitry Baryshkov
@ 2023-12-03 11:26 ` Dmitry Baryshkov
17 siblings, 0 replies; 39+ messages in thread
From: Dmitry Baryshkov @ 2023-12-03 11:26 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar, Marijn Suijten,
Dmitry Baryshkov
Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
linux-arm-msm, dri-devel, freedreno
On Sat, 08 Jul 2023 04:03:50 +0300, Dmitry Baryshkov wrote:
> Follow the DPU patchset ([1]) and use devm_ and drmm_ functions to
> allocate long-living data structures in mdp4 and mdp5 drivers.
>
> [1] https://patchwork.freedesktop.org/series/120366/
>
> Dmitry Baryshkov (17):
> drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware
> drm/msm/mdp5: use devres-managed allocation for configuration data
> drm/msm/mdp5: use devres-managed allocation for CTL manager data
> drm/msm/mdp5: use devres-managed allocation for mixer data
> drm/msm/mdp5: use devres-managed allocation for pipe data
> drm/msm/mdp5: use devres-managed allocation for SMP data
> drm/msm/mdp5: use devres-managed allocation for INTF data
> drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc
> drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder
> drm/msm/mdp5: use drmm-managed allocation for mdp5_plane
> drm/msm/mdp4: use bulk regulators API for LCDC encoder
> drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc
> drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder
> drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder
> drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder
> drm/msm/mdp4: use drmm-managed allocation for mdp4_plane
> drm/msm: drop mdp_get_formats()
>
> [...]
Applied, thanks!
[02/17] drm/msm/mdp5: use devres-managed allocation for configuration data
https://gitlab.freedesktop.org/lumag/msm/-/commit/062aeadeba1d
[03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data
https://gitlab.freedesktop.org/lumag/msm/-/commit/4c1f4c1f1b43
[04/17] drm/msm/mdp5: use devres-managed allocation for mixer data
https://gitlab.freedesktop.org/lumag/msm/-/commit/1ad175c2c884
[05/17] drm/msm/mdp5: use devres-managed allocation for pipe data
https://gitlab.freedesktop.org/lumag/msm/-/commit/323e9a18d6e1
[06/17] drm/msm/mdp5: use devres-managed allocation for SMP data
https://gitlab.freedesktop.org/lumag/msm/-/commit/531d5313d934
[07/17] drm/msm/mdp5: use devres-managed allocation for INTF data
https://gitlab.freedesktop.org/lumag/msm/-/commit/6de8288bf668
[08/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc
https://gitlab.freedesktop.org/lumag/msm/-/commit/6f235e3d6b18
[09/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder
https://gitlab.freedesktop.org/lumag/msm/-/commit/669afee4a17e
[11/17] drm/msm/mdp4: use bulk regulators API for LCDC encoder
https://gitlab.freedesktop.org/lumag/msm/-/commit/54f1fbcb47d4
[12/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc
https://gitlab.freedesktop.org/lumag/msm/-/commit/783ad6e6312f
[13/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder
https://gitlab.freedesktop.org/lumag/msm/-/commit/e79571e8708b
[14/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder
https://gitlab.freedesktop.org/lumag/msm/-/commit/93d6e1b82b93
[15/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder
https://gitlab.freedesktop.org/lumag/msm/-/commit/2c24668cc068
Best regards,
--
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
^ permalink raw reply [flat|nested] 39+ messages in thread
end of thread, other threads:[~2023-12-03 11:26 UTC | newest]
Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-08 1:03 [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
2023-07-08 1:03 ` [PATCH 01/17] drm/msm: add arrays listing formats supported by MDP4/MDP5 hardware Dmitry Baryshkov
2023-12-02 1:36 ` Abhinav Kumar
2023-12-02 11:12 ` Dmitry Baryshkov
2023-07-08 1:03 ` [PATCH 02/17] drm/msm/mdp5: use devres-managed allocation for configuration data Dmitry Baryshkov
2023-12-01 22:12 ` [Freedreno] " Abhinav Kumar
2023-07-08 1:03 ` [PATCH 03/17] drm/msm/mdp5: use devres-managed allocation for CTL manager data Dmitry Baryshkov
2023-12-01 22:15 ` Abhinav Kumar
2023-12-01 22:16 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 04/17] drm/msm/mdp5: use devres-managed allocation for mixer data Dmitry Baryshkov
2023-12-01 22:19 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 05/17] drm/msm/mdp5: use devres-managed allocation for pipe data Dmitry Baryshkov
2023-12-01 22:21 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 06/17] drm/msm/mdp5: use devres-managed allocation for SMP data Dmitry Baryshkov
2023-12-01 22:23 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 07/17] drm/msm/mdp5: use devres-managed allocation for INTF data Dmitry Baryshkov
2023-12-01 23:04 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 08/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_crtc Dmitry Baryshkov
2023-12-01 23:12 ` Abhinav Kumar
2023-07-08 1:03 ` [PATCH 09/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_encoder Dmitry Baryshkov
2023-12-01 23:15 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 10/17] drm/msm/mdp5: use drmm-managed allocation for mdp5_plane Dmitry Baryshkov
2023-12-01 23:24 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 11/17] drm/msm/mdp4: use bulk regulators API for LCDC encoder Dmitry Baryshkov
2023-12-01 23:27 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 12/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_crtc Dmitry Baryshkov
2023-12-02 0:49 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 13/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dsi_encoder Dmitry Baryshkov
2023-12-02 1:16 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 14/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_dtv_encoder Dmitry Baryshkov
2023-12-02 1:17 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 15/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder Dmitry Baryshkov
2023-12-02 1:22 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 16/17] drm/msm/mdp4: use drmm-managed allocation for mdp4_plane Dmitry Baryshkov
2023-12-02 1:24 ` Abhinav Kumar
2023-07-08 1:04 ` [PATCH 17/17] drm/msm: drop mdp_get_formats() Dmitry Baryshkov
2023-12-02 1:25 ` Abhinav Kumar
2023-12-02 1:33 ` Abhinav Kumar
2023-12-03 11:26 ` [PATCH 00/17] drm/msm/mdp[45]: use managed memory allocations Dmitry Baryshkov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox