]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/pm: Drop redundant pci stuff from suspend/resume paths
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 19 Sep 2025 18:50:15 +0000 (21:50 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 22 Sep 2025 16:34:57 +0000 (19:34 +0300)
I don't think there should be any need for us to call any of
pci_enable_device(), pci_disable_device() or pci_set_master()
from the suspend/resume paths. The config space save/restore should
take care of all of this.

Cc: Karthik Poosa <karthik.poosa@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250919185015.14561-7-ville.syrjala@linux.intel.com
drivers/gpu/drm/i915/i915_driver.c

index 0cb874e649711e6d323b1930e10aca0e838f1f56..95165e45de745e3407c8486abe7fbc18b5d8cb1d 100644 (file)
@@ -1100,7 +1100,6 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
        struct intel_display *display = dev_priv->display;
-       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
        struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
        struct intel_gt *gt;
        int ret, i;
@@ -1121,21 +1120,10 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
        if (ret) {
                drm_err(&dev_priv->drm, "Suspend complete failed: %d\n", ret);
                intel_display_power_resume_early(display);
-
-               goto fail;
        }
 
        enable_rpm_wakeref_asserts(rpm);
 
-       if (!dev_priv->uncore.user_forcewake_count)
-               intel_runtime_pm_driver_release(rpm);
-
-       pci_disable_device(pdev);
-
-       return 0;
-
-fail:
-       enable_rpm_wakeref_asserts(rpm);
        if (!dev_priv->uncore.user_forcewake_count)
                intel_runtime_pm_driver_release(rpm);
 
@@ -1284,7 +1272,6 @@ static int i915_drm_resume_early(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
        struct intel_display *display = dev_priv->display;
-       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
        struct intel_gt *gt;
        int ret, i;
 
@@ -1298,24 +1285,6 @@ static int i915_drm_resume_early(struct drm_device *dev)
         * similar so that power domains can be employed.
         */
 
-       /*
-        * Note that pci_enable_device() first enables any parent bridge
-        * device and only then sets the power state for this device. The
-        * bridge enabling is a nop though, since bridge devices are resumed
-        * first. The order of enabling power and enabling the device is
-        * imposed by the PCI core as described above, so here we preserve the
-        * same order for the freeze/thaw phases.
-        *
-        * TODO: eventually we should remove pci_disable_device() /
-        * pci_enable_enable_device() from suspend/resume. Due to how they
-        * depend on the device enable refcount we can't anyway depend on them
-        * disabling/enabling the device.
-        */
-       if (pci_enable_device(pdev))
-               return -EIO;
-
-       pci_set_master(pdev);
-
        disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
 
        ret = vlv_resume_prepare(dev_priv, false);