drm/armada: Use devm_drm_dev_alloc
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 4 Sep 2020 14:39:18 +0000 (16:39 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 11 Sep 2020 08:47:19 +0000 (10:47 +0200)
Also remove the now no longer needed build bug on since that's already
not needed anymore with drmm_add_final_kfree. Conversion to managed
drm_device cleanup is easy, the final drm_dev_put() is already the
last thing in both the bind unbind as in the unbind flow.

Also, this relies on component.c correctly wrapping bind&unbind in
separate devres groups, which it does.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Cc: Russell King <linux@armlinux.org.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200904143941.110665-2-daniel.vetter@ffwll.ch
drivers/gpu/drm/armada/armada_drv.c

index 5fc25c3..a8d5908 100644 (file)
@@ -87,24 +87,13 @@ static int armada_drm_bind(struct device *dev)
                                     "armada-drm"))
                return -EBUSY;
 
-       priv = kzalloc(sizeof(*priv), GFP_KERNEL);
-       if (!priv)
-               return -ENOMEM;
-
-       /*
-        * The drm_device structure must be at the start of
-        * armada_private for drm_dev_put() to work correctly.
-        */
-       BUILD_BUG_ON(offsetof(struct armada_private, drm) != 0);
-
-       ret = drm_dev_init(&priv->drm, &armada_drm_driver, dev);
-       if (ret) {
-               dev_err(dev, "[" DRM_NAME ":%s] drm_dev_init failed: %d\n",
-                       __func__, ret);
-               kfree(priv);
-               return ret;
+       priv = devm_drm_dev_alloc(dev, &armada_drm_driver,
+                                 struct armada_private, drm);
+       if (IS_ERR(priv)) {
+               dev_err(dev, "[" DRM_NAME ":%s] devm_drm_dev_alloc failed: %li\n",
+                       __func__, PTR_ERR(priv));
+               return PTR_ERR(priv);
        }
-       drmm_add_final_kfree(&priv->drm, priv);
 
        /* Remove early framebuffers */
        ret = drm_fb_helper_remove_conflicting_framebuffers(NULL,
@@ -174,7 +163,6 @@ static int armada_drm_bind(struct device *dev)
  err_kms:
        drm_mode_config_cleanup(&priv->drm);
        drm_mm_takedown(&priv->linear);
-       drm_dev_put(&priv->drm);
        return ret;
 }
 
@@ -194,8 +182,6 @@ static void armada_drm_unbind(struct device *dev)
 
        drm_mode_config_cleanup(&priv->drm);
        drm_mm_takedown(&priv->linear);
-
-       drm_dev_put(&priv->drm);
 }
 
 static int compare_of(struct device *dev, void *data)