Merge drm/drm-fixes into drm-misc-fixes
[linux-block.git] / drivers / gpu / drm / vc4 / vc4_drv.c
index 3dc01af0f90f2291442e14291cb36eb9fc7da992..2027063fdc3097c59dae9c865a59c149d5db5484 100644 (file)
@@ -33,7 +33,6 @@
 #include <drm/drm_aperture.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
-#include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_fb_helper.h>
 #include <drm/drm_vblank.h>
 
@@ -86,7 +85,7 @@ static int vc5_dumb_create(struct drm_file *file_priv,
        if (ret)
                return ret;
 
-       return drm_gem_cma_dumb_create_internal(file_priv, dev, args);
+       return drm_gem_dma_dumb_create_internal(file_priv, dev, args);
 }
 
 static int vc4_get_param_ioctl(struct drm_device *dev, void *data,
@@ -212,7 +211,7 @@ static const struct drm_driver vc4_drm_driver = {
 
        .gem_create_object = vc4_create_object,
 
-       DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(vc4_bo_dumb_create),
+       DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE(vc4_bo_dumb_create),
 
        .ioctls = vc4_drm_ioctls,
        .num_ioctls = ARRAY_SIZE(vc4_drm_ioctls),
@@ -235,7 +234,7 @@ static const struct drm_driver vc5_drm_driver = {
        .debugfs_init = vc4_debugfs_init,
 #endif
 
-       DRM_GEM_CMA_DRIVER_OPS_WITH_DUMB_CREATE(vc5_dumb_create),
+       DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE(vc5_dumb_create),
 
        .fops = &vc4_drm_fops,
 
@@ -267,6 +266,13 @@ static void vc4_match_add_drivers(struct device *dev,
        }
 }
 
+static void vc4_component_unbind_all(void *ptr)
+{
+       struct vc4_dev *vc4 = ptr;
+
+       component_unbind_all(vc4->dev, &vc4->base);
+}
+
 static const struct of_device_id vc4_dma_range_matches[] = {
        { .compatible = "brcm,bcm2711-hvs" },
        { .compatible = "brcm,bcm2835-hvs" },
@@ -310,13 +316,16 @@ static int vc4_drm_bind(struct device *dev)
        if (IS_ERR(vc4))
                return PTR_ERR(vc4);
        vc4->is_vc5 = is_vc5;
+       vc4->dev = dev;
 
        drm = &vc4->base;
        platform_set_drvdata(pdev, drm);
        INIT_LIST_HEAD(&vc4->debugfs_list);
 
        if (!is_vc5) {
-               mutex_init(&vc4->bin_bo_lock);
+               ret = drmm_mutex_init(drm, &vc4->bin_bo_lock);
+               if (ret)
+                       return ret;
 
                ret = vc4_bo_cache_init(drm);
                if (ret)
@@ -360,6 +369,10 @@ static int vc4_drm_bind(struct device *dev)
        if (ret)
                return ret;
 
+       ret = devm_add_action_or_reset(dev, vc4_component_unbind_all, vc4);
+       if (ret)
+               return ret;
+
        ret = vc4_plane_create_additional_planes(drm);
        if (ret)
                goto unbind_all;
@@ -380,8 +393,6 @@ static int vc4_drm_bind(struct device *dev)
        return 0;
 
 unbind_all:
-       component_unbind_all(dev, drm);
-
        return ret;
 }
 
@@ -389,8 +400,7 @@ static void vc4_drm_unbind(struct device *dev)
 {
        struct drm_device *drm = dev_get_drvdata(dev);
 
-       drm_dev_unregister(drm);
-
+       drm_dev_unplug(drm);
        drm_atomic_helper_shutdown(drm);
 }