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 66eb93e71a7a ("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
This commit is contained in:
parent
c0eeae2142
commit
2643e6d1f2
@ -443,7 +443,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 = to_pci_dev(dev_priv->drm.dev);
|
||||
struct pci_dev *root_pdev;
|
||||
int ret;
|
||||
|
||||
if (i915_inject_probe_failure(dev_priv))
|
||||
@ -557,15 +556,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.
|
||||
*/
|
||||
root_pdev = pcie_find_root_port(pdev);
|
||||
if (root_pdev)
|
||||
pci_d3cold_disable(root_pdev);
|
||||
|
||||
return 0;
|
||||
|
||||
err_opregion:
|
||||
@ -591,7 +581,6 @@ err_perf:
|
||||
static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||
struct pci_dev *root_pdev;
|
||||
|
||||
i915_perf_fini(dev_priv);
|
||||
|
||||
@ -599,10 +588,6 @@ static void i915_driver_hw_remove(struct drm_i915_private *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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1519,6 +1504,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;
|
||||
|
||||
@ -1570,6 +1557,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;
|
||||
|
||||
/*
|
||||
@ -1608,6 +1604,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;
|
||||
|
||||
@ -1621,6 +1619,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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user