Skip to content

Commit 2872144

Browse files
anshuma1rodrigovivi
authored andcommitted
drm/i915/dgfx: Enable d3cold at s2idle
System wide suspend already has support for lmem save/restore during suspend therefore enabling d3cold for s2idle and keepng it disable for runtime PM.(Refer below commit for d3cold runtime PM disable justification) 'commit 66eb93e ("drm/i915/dgfx: Keep PCI autosuspend control 'on' by default on all dGPU")' It will reduce the DG2 Card power consumption to ~0 Watt for s2idle power KPI. v2: - Added "Cc: stable@vger.kernel.org". Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8755 Cc: stable@vger.kernel.org Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Tested-by: Aaron Ma <aaron.ma@canonical.com> Tested-by: Jianshui Yu <Jianshui.yu@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230816125216.1722002-1-anshuman.gupta@intel.com (cherry picked from commit 2643e6d) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
1 parent 706a741 commit 2872144

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

drivers/gpu/drm/i915/i915_driver.c

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,6 @@ static int i915_pcode_init(struct drm_i915_private *i915)
443443
static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
444444
{
445445
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
446-
struct pci_dev *root_pdev;
447446
int ret;
448447

449448
if (i915_inject_probe_failure(dev_priv))
@@ -557,15 +556,6 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
557556

558557
intel_bw_init_hw(dev_priv);
559558

560-
/*
561-
* FIXME: Temporary hammer to avoid freezing the machine on our DGFX
562-
* This should be totally removed when we handle the pci states properly
563-
* on runtime PM and on s2idle cases.
564-
*/
565-
root_pdev = pcie_find_root_port(pdev);
566-
if (root_pdev)
567-
pci_d3cold_disable(root_pdev);
568-
569559
return 0;
570560

571561
err_opregion:
@@ -591,18 +581,13 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
591581
static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
592582
{
593583
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
594-
struct pci_dev *root_pdev;
595584

596585
i915_perf_fini(dev_priv);
597586

598587
intel_opregion_cleanup(dev_priv);
599588

600589
if (pdev->msi_enabled)
601590
pci_disable_msi(pdev);
602-
603-
root_pdev = pcie_find_root_port(pdev);
604-
if (root_pdev)
605-
pci_d3cold_enable(root_pdev);
606591
}
607592

608593
/**
@@ -1517,6 +1502,8 @@ static int intel_runtime_suspend(struct device *kdev)
15171502
{
15181503
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
15191504
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
1505+
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
1506+
struct pci_dev *root_pdev;
15201507
struct intel_gt *gt;
15211508
int ret, i;
15221509

@@ -1568,6 +1555,15 @@ static int intel_runtime_suspend(struct device *kdev)
15681555
drm_err(&dev_priv->drm,
15691556
"Unclaimed access detected prior to suspending\n");
15701557

1558+
/*
1559+
* FIXME: Temporary hammer to avoid freezing the machine on our DGFX
1560+
* This should be totally removed when we handle the pci states properly
1561+
* on runtime PM.
1562+
*/
1563+
root_pdev = pcie_find_root_port(pdev);
1564+
if (root_pdev)
1565+
pci_d3cold_disable(root_pdev);
1566+
15711567
rpm->suspended = true;
15721568

15731569
/*
@@ -1606,6 +1602,8 @@ static int intel_runtime_resume(struct device *kdev)
16061602
{
16071603
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
16081604
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
1605+
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
1606+
struct pci_dev *root_pdev;
16091607
struct intel_gt *gt;
16101608
int ret, i;
16111609

@@ -1619,6 +1617,11 @@ static int intel_runtime_resume(struct device *kdev)
16191617

16201618
intel_opregion_notify_adapter(dev_priv, PCI_D0);
16211619
rpm->suspended = false;
1620+
1621+
root_pdev = pcie_find_root_port(pdev);
1622+
if (root_pdev)
1623+
pci_d3cold_enable(root_pdev);
1624+
16221625
if (intel_uncore_unclaimed_mmio(&dev_priv->uncore))
16231626
drm_dbg(&dev_priv->drm,
16241627
"Unclaimed access during suspend, bios?\n");

0 commit comments

Comments
 (0)