Merge tag 'drm-intel-gt-next-2021-05-28' of git://anongit.freedesktop.org/drm/drm...
[platform/kernel/linux-rpi.git] / drivers / gpu / drm / i915 / i915_drv.c
index f50f7b4..5118dc8 100644 (file)
@@ -39,6 +39,7 @@
 #include <linux/vga_switcheroo.h>
 #include <linux/vt.h>
 
+#include <drm/drm_aperture.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_ioctl.h>
 #include <drm/drm_irq.h>
@@ -553,7 +554,7 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
        if (ret)
                goto err_perf;
 
-       ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, "inteldrmfb");
+       ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, "inteldrmfb");
        if (ret)
                goto err_ggtt;
 
@@ -757,7 +758,6 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (IS_ERR(i915))
                return i915;
 
-       i915->drm.pdev = pdev;
        pci_set_drvdata(pdev, i915);
 
        /* Device parameters start as a copy of module parameters. */
@@ -971,8 +971,12 @@ static int i915_driver_open(struct drm_device *dev, struct drm_file *file)
  */
 static void i915_driver_lastclose(struct drm_device *dev)
 {
+       struct drm_i915_private *i915 = to_i915(dev);
+
        intel_fbdev_restore_mode(dev);
-       vga_switcheroo_process_delayed_switch();
+
+       if (HAS_DISPLAY(i915))
+               vga_switcheroo_process_delayed_switch();
 }
 
 static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
@@ -992,6 +996,9 @@ static void intel_suspend_encoders(struct drm_i915_private *dev_priv)
        struct drm_device *dev = &dev_priv->drm;
        struct intel_encoder *encoder;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        drm_modeset_lock_all(dev);
        for_each_intel_encoder(dev, encoder)
                if (encoder->suspend)
@@ -1004,6 +1011,9 @@ static void intel_shutdown_encoders(struct drm_i915_private *dev_priv)
        struct drm_device *dev = &dev_priv->drm;
        struct intel_encoder *encoder;
 
+       if (!HAS_DISPLAY(dev_priv))
+               return;
+
        drm_modeset_lock_all(dev);
        for_each_intel_encoder(dev, encoder)
                if (encoder->shutdown)
@@ -1019,9 +1029,11 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
 
        i915_gem_suspend(i915);
 
-       drm_kms_helper_poll_disable(&i915->drm);
+       if (HAS_DISPLAY(i915)) {
+               drm_kms_helper_poll_disable(&i915->drm);
 
-       drm_atomic_helper_shutdown(&i915->drm);
+               drm_atomic_helper_shutdown(&i915->drm);
+       }
 
        intel_dp_mst_suspend(i915);
 
@@ -1031,10 +1043,18 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
        intel_suspend_encoders(i915);
        intel_shutdown_encoders(i915);
 
+       intel_csr_ucode_suspend(i915);
+
        /*
         * The only requirement is to reboot with display DC states disabled,
         * for now leaving all display power wells in the INIT power domain
-        * enabled matching the driver reload sequence.
+        * enabled.
+        *
+        * TODO:
+        * - unify the pci_driver::shutdown sequence here with the
+        *   pci_driver.driver.pm.poweroff,poweroff_late sequence.
+        * - unify the driver remove and system/runtime suspend sequences with
+        *   the above unified shutdown/poweroff sequence.
         */
        intel_power_domains_driver_remove(i915);
        enable_rpm_wakeref_asserts(&i915->runtime_pm);
@@ -1077,8 +1097,8 @@ static int i915_drm_suspend(struct drm_device *dev)
        /* We do a lot of poking in a lot of registers, make sure they work
         * properly. */
        intel_power_domains_disable(dev_priv);
-
-       drm_kms_helper_poll_disable(dev);
+       if (HAS_DISPLAY(dev_priv))
+               drm_kms_helper_poll_disable(dev);
 
        pci_save_state(pdev);
 
@@ -1225,7 +1245,8 @@ static int i915_drm_resume(struct drm_device *dev)
         */
        intel_runtime_pm_enable_interrupts(dev_priv);
 
-       drm_mode_config_reset(dev);
+       if (HAS_DISPLAY(dev_priv))
+               drm_mode_config_reset(dev);
 
        i915_gem_resume(dev_priv);
 
@@ -1238,7 +1259,8 @@ static int i915_drm_resume(struct drm_device *dev)
        intel_display_resume(dev);
 
        intel_hpd_poll_disable(dev_priv);
-       drm_kms_helper_poll_enable(dev);
+       if (HAS_DISPLAY(dev_priv))
+               drm_kms_helper_poll_enable(dev);
 
        intel_opregion_resume(dev_priv);