Merge tag 'drm-intel-next-2022-06-22' of git://anongit.freedesktop.org/drm/drm-intel...
[linux-block.git] / drivers / gpu / drm / i915 / i915_driver.c
index 419e237f9ea40de2b62a0ad5241eaad510ca30a7..b47746152d97fc2cbec410beaebfe9e69fdf5dcf 100644 (file)
@@ -77,6 +77,7 @@
 #include "i915_file_private.h"
 #include "i915_debugfs.h"
 #include "i915_driver.h"
+#include "i915_drm_client.h"
 #include "i915_drv.h"
 #include "i915_getparam.h"
 #include "i915_ioc32.h"
@@ -322,9 +323,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
        intel_device_info_subplatform_init(dev_priv);
        intel_step_init(dev_priv);
 
-       intel_gt_init_early(to_gt(dev_priv), dev_priv);
        intel_uncore_mmio_debug_init_early(&dev_priv->mmio_debug);
-       intel_uncore_init_early(&dev_priv->uncore, to_gt(dev_priv));
 
        spin_lock_init(&dev_priv->irq_lock);
        spin_lock_init(&dev_priv->gpu_error.lock);
@@ -355,7 +354,9 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
 
        intel_wopcm_init_early(&dev_priv->wopcm);
 
-       __intel_gt_init_early(to_gt(dev_priv), dev_priv);
+       intel_root_gt_init_early(dev_priv);
+
+       i915_drm_clients_init(&dev_priv->clients, dev_priv);
 
        i915_gem_init_early(dev_priv);
 
@@ -376,7 +377,8 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
 
 err_gem:
        i915_gem_cleanup_early(dev_priv);
-       intel_gt_driver_late_release(to_gt(dev_priv));
+       intel_gt_driver_late_release_all(dev_priv);
+       i915_drm_clients_fini(&dev_priv->clients);
        intel_region_ttm_device_fini(dev_priv);
 err_ttm:
        vlv_suspend_cleanup(dev_priv);
@@ -395,7 +397,8 @@ static void i915_driver_late_release(struct drm_i915_private *dev_priv)
        intel_irq_fini(dev_priv);
        intel_power_domains_cleanup(dev_priv);
        i915_gem_cleanup_early(dev_priv);
-       intel_gt_driver_late_release(to_gt(dev_priv));
+       intel_gt_driver_late_release_all(dev_priv);
+       i915_drm_clients_fini(&dev_priv->clients);
        intel_region_ttm_device_fini(dev_priv);
        vlv_suspend_cleanup(dev_priv);
        i915_workqueues_cleanup(dev_priv);
@@ -426,13 +429,9 @@ static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
        if (ret < 0)
                return ret;
 
-       ret = intel_uncore_setup_mmio(&dev_priv->uncore);
-       if (ret < 0)
-               goto err_bridge;
-
        ret = intel_uncore_init_mmio(&dev_priv->uncore);
        if (ret)
-               goto err_mmio;
+               return ret;
 
        /* Try to make sure MCHBAR is enabled before poking at it */
        intel_setup_mchbar(dev_priv);
@@ -450,9 +449,6 @@ static int i915_driver_mmio_probe(struct drm_i915_private *dev_priv)
 err_uncore:
        intel_teardown_mchbar(dev_priv);
        intel_uncore_fini_mmio(&dev_priv->uncore);
-err_mmio:
-       intel_uncore_cleanup_mmio(&dev_priv->uncore);
-err_bridge:
        pci_dev_put(dev_priv->bridge_dev);
 
        return ret;
@@ -466,7 +462,6 @@ static void i915_driver_mmio_release(struct drm_i915_private *dev_priv)
 {
        intel_teardown_mchbar(dev_priv);
        intel_uncore_fini_mmio(&dev_priv->uncore);
-       intel_uncore_cleanup_mmio(&dev_priv->uncore);
        pci_dev_put(dev_priv->bridge_dev);
 }
 
@@ -592,7 +587,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
        if (ret)
                goto err_ggtt;
 
-       ret = intel_gt_probe_lmem(to_gt(dev_priv));
+       ret = intel_gt_tiles_init(dev_priv);
        if (ret)
                goto err_mem_regions;
 
@@ -843,10 +838,14 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        intel_vgpu_detect(i915);
 
-       ret = i915_driver_mmio_probe(i915);
+       ret = intel_gt_probe_all(i915);
        if (ret < 0)
                goto out_runtime_pm_put;
 
+       ret = i915_driver_mmio_probe(i915);
+       if (ret < 0)
+               goto out_tiles_cleanup;
+
        ret = i915_driver_hw_probe(i915);
        if (ret < 0)
                goto out_cleanup_mmio;
@@ -903,6 +902,8 @@ out_cleanup_hw:
        i915_ggtt_driver_late_release(i915);
 out_cleanup_mmio:
        i915_driver_mmio_release(i915);
+out_tiles_cleanup:
+       intel_gt_release_all(i915);
 out_runtime_pm_put:
        enable_rpm_wakeref_asserts(&i915->runtime_pm);
        i915_driver_late_release(i915);
@@ -1006,6 +1007,7 @@ static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
        struct drm_i915_file_private *file_priv = file->driver_priv;
 
        i915_gem_context_close(file);
+       i915_drm_client_put(file_priv->client);
 
        kfree_rcu(file_priv, rcu);
 
@@ -1736,6 +1738,9 @@ static const struct file_operations i915_driver_fops = {
        .read = drm_read,
        .compat_ioctl = i915_ioc32_compat_ioctl,
        .llseek = noop_llseek,
+#ifdef CONFIG_PROC_FS
+       .show_fdinfo = i915_drm_client_fdinfo,
+#endif
 };
 
 static int