drm/i915/dgfx: Enable d3cold at s2idle
authorjsg <jsg@openbsd.org>
Thu, 31 Aug 2023 04:40:08 +0000 (04:40 +0000)
committerjsg <jsg@openbsd.org>
Thu, 31 Aug 2023 04:40:08 +0000 (04:40 +0000)
From Anshuman Gupta
3abffee6091c5a2716963c229e192a36a9590a88 in linux-6.1.y/6.1.50
2872144aec04baa7e43ecd2a60f7f0be3aa843fd in mainline linux

sys/dev/pci/drm/i915/i915_driver.c

index 05d373c..28c3770 100644 (file)
@@ -603,7 +603,6 @@ static int i915_pcode_init(struct drm_i915_private *i915)
 static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
 {
        struct pci_dev *pdev = dev_priv->drm.pdev;
-       struct pci_dev *root_pdev;
        int ret;
 
        if (i915_inject_probe_failure(dev_priv))
@@ -715,17 +714,6 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
 
        intel_bw_init_hw(dev_priv);
 
-       /*
-        * FIXME: Temporary hammer to avoid freezing the machine on our DGFX
-        * This should be totally removed when we handle the pci states properly
-        * on runtime PM and on s2idle cases.
-        */
-#ifdef notyet
-       root_pdev = pcie_find_root_port(pdev);
-       if (root_pdev)
-               pci_d3cold_disable(root_pdev);
-#endif
-
        return 0;
 
 err_msi:
@@ -751,16 +739,11 @@ static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
        STUB();
 #ifdef notyet
        struct pci_dev *pdev = dev_priv->drm.pdev;
-       struct pci_dev *root_pdev;
 
        i915_perf_fini(dev_priv);
 
        if (pdev->msi_enabled)
                pci_disable_msi(pdev);
-
-       root_pdev = pcie_find_root_port(pdev);
-       if (root_pdev)
-               pci_d3cold_enable(root_pdev);
 #endif
 }
 
@@ -1785,6 +1768,8 @@ static int intel_runtime_suspend(struct device *kdev)
 {
        struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
        struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
+       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
+       struct pci_dev *root_pdev;
        struct intel_gt *gt;
        int ret, i;
 
@@ -1834,6 +1819,15 @@ static int intel_runtime_suspend(struct device *kdev)
                drm_err(&dev_priv->drm,
                        "Unclaimed access detected prior to suspending\n");
 
+       /*
+        * FIXME: Temporary hammer to avoid freezing the machine on our DGFX
+        * This should be totally removed when we handle the pci states properly
+        * on runtime PM.
+        */
+       root_pdev = pcie_find_root_port(pdev);
+       if (root_pdev)
+               pci_d3cold_disable(root_pdev);
+
        rpm->suspended = true;
 
        /*
@@ -1872,6 +1866,8 @@ static int intel_runtime_resume(struct device *kdev)
 {
        struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
        struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
+       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
+       struct pci_dev *root_pdev;
        struct intel_gt *gt;
        int ret, i;
 
@@ -1885,6 +1881,11 @@ static int intel_runtime_resume(struct device *kdev)
 
        intel_opregion_notify_adapter(dev_priv, PCI_D0);
        rpm->suspended = false;
+
+       root_pdev = pcie_find_root_port(pdev);
+       if (root_pdev)
+               pci_d3cold_enable(root_pdev);
+
        if (intel_uncore_unclaimed_mmio(&dev_priv->uncore))
                drm_dbg(&dev_priv->drm,
                        "Unclaimed access during suspend, bios?\n");