Merge tag 'drm-intel-next-2021-05-19-1' of git://anongit.freedesktop.org/drm/drm...
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / i915_drv.c
index 6d28eff..db513f9 100644 (file)
@@ -768,8 +768,6 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
        memcpy(device_info, match_info, sizeof(*device_info));
        RUNTIME_INFO(i915)->device_id = pdev->device;
 
-       BUG_ON(device_info->gen > BITS_PER_TYPE(device_info->gen_mask));
-
        return i915;
 }
 
@@ -796,7 +794,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                return PTR_ERR(i915);
 
        /* Disable nuclear pageflip by default on pre-ILK */
-       if (!i915->params.nuclear_pageflip && match_info->gen < 5)
+       if (!i915->params.nuclear_pageflip && match_info->graphics_ver < 5)
                i915->drm.driver_features &= ~DRIVER_ATOMIC;
 
        /*
@@ -973,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)
@@ -994,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)
@@ -1006,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)
@@ -1021,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);
 
@@ -1033,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);
@@ -1079,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);
 
@@ -1227,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);
 
@@ -1240,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);