On Fri, 10 Jun 2022 at 10:30, Maxime Ripard wrote:
>
> Let's switch to drmm_universal_plane_alloc() for our plane allocation and
> initialisation to make the driver a bit simpler.
>
> Signed-off-by: Maxime Ripard
Reviewed-by: Dave Stevenson
> ---
> drivers/gpu/drm/vc4/vc4_crtc.c | 12 +---
> drivers/gpu/drm/vc4/vc4_plane.c | 23 ---
> 2 files changed, 9 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> index 840a93484bb1..7163f924b48b 100644
> --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> @@ -1176,7 +1176,6 @@ static int vc4_crtc_bind(struct device *dev, struct
> device *master, void *data)
> const struct vc4_pv_data *pv_data;
> struct vc4_crtc *vc4_crtc;
> struct drm_crtc *crtc;
> - struct drm_plane *destroy_plane, *temp;
> int ret;
>
> vc4_crtc = devm_kzalloc(dev, sizeof(*vc4_crtc), GFP_KERNEL);
> @@ -1211,7 +1210,7 @@ static int vc4_crtc_bind(struct device *dev, struct
> device *master, void *data)
>IRQF_SHARED,
>"vc4 crtc", vc4_crtc);
> if (ret)
> - goto err_destroy_planes;
> + return ret;
>
> platform_set_drvdata(pdev, vc4_crtc);
>
> @@ -1219,15 +1218,6 @@ static int vc4_crtc_bind(struct device *dev, struct
> device *master, void *data)
> _crtc->regset);
>
> return 0;
> -
> -err_destroy_planes:
> - list_for_each_entry_safe(destroy_plane, temp,
> ->mode_config.plane_list, head) {
> - if (destroy_plane->possible_crtcs == drm_crtc_mask(crtc))
> - destroy_plane->funcs->destroy(destroy_plane);
> - }
> -
> - return ret;
> }
>
> static void vc4_crtc_unbind(struct device *dev, struct device *master,
> diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
> index 17dab470ecdf..673c963f5c5a 100644
> --- a/drivers/gpu/drm/vc4/vc4_plane.c
> +++ b/drivers/gpu/drm/vc4/vc4_plane.c
> @@ -1442,8 +1442,6 @@ static bool vc4_format_mod_supported(struct drm_plane
> *plane,
> static const struct drm_plane_funcs vc4_plane_funcs = {
> .update_plane = drm_atomic_helper_update_plane,
> .disable_plane = drm_atomic_helper_disable_plane,
> - .destroy = drm_plane_cleanup,
> - .set_property = NULL,
> .reset = vc4_plane_reset,
> .atomic_duplicate_state = vc4_plane_duplicate_state,
> .atomic_destroy_state = vc4_plane_destroy_state,
> @@ -1454,11 +1452,10 @@ struct drm_plane *vc4_plane_init(struct drm_device
> *dev,
> enum drm_plane_type type,
> unsigned int possible_crtcs)
> {
> - struct drm_plane *plane = NULL;
> + struct drm_plane *plane;
> struct vc4_plane *vc4_plane;
> u32 formats[ARRAY_SIZE(hvs_formats)];
> int num_formats = 0;
> - int ret = 0;
> unsigned i;
> bool hvs5 = of_device_is_compatible(dev->dev->of_node,
> "brcm,bcm2711-vc5");
> @@ -1471,11 +1468,6 @@ struct drm_plane *vc4_plane_init(struct drm_device
> *dev,
> DRM_FORMAT_MOD_INVALID
> };
>
> - vc4_plane = devm_kzalloc(dev->dev, sizeof(*vc4_plane),
> -GFP_KERNEL);
> - if (!vc4_plane)
> - return ERR_PTR(-ENOMEM);
> -
> for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) {
> if (!hvs_formats[i].hvs5_only || hvs5) {
> formats[num_formats] = hvs_formats[i].drm;
> @@ -1483,13 +1475,14 @@ struct drm_plane *vc4_plane_init(struct drm_device
> *dev,
> }
> }
>
> + vc4_plane = drmm_universal_plane_alloc(dev, struct vc4_plane, base,
> + possible_crtcs,
> + _plane_funcs,
> + formats, num_formats,
> + modifiers, type, NULL);
> + if (IS_ERR(vc4_plane))
> + return ERR_CAST(vc4_plane);
> plane = _plane->base;
> - ret = drm_universal_plane_init(dev, plane, possible_crtcs,
> - _plane_funcs,
> - formats, num_formats,
> - modifiers, type, NULL);
> - if (ret)
> - return ERR_PTR(ret);
>
> drm_plane_helper_add(plane, _plane_helper_funcs);
>
> --
> 2.36.1
>