drm/i915/dgfx: Enable d3cold at s2idle
commit2872144aec
upstream. 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) 'commit66eb93e71a
("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 2643e6d1f2a5e51877be24042d53cf956589be10) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
115f2ccd3a
commit
3abffee609
|
@ -574,7 +574,6 @@ static int i915_pcode_init(struct drm_i915_private *i915)
|
||||||
static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
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 *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||||
struct pci_dev *root_pdev;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (i915_inject_probe_failure(dev_priv))
|
if (i915_inject_probe_failure(dev_priv))
|
||||||
|
@ -686,15 +685,6 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||||
|
|
||||||
intel_bw_init_hw(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;
|
return 0;
|
||||||
|
|
||||||
err_msi:
|
err_msi:
|
||||||
|
@ -718,16 +708,11 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||||
static void i915_driver_hw_remove(struct drm_i915_private *dev_priv)
|
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 *pdev = to_pci_dev(dev_priv->drm.dev);
|
||||||
struct pci_dev *root_pdev;
|
|
||||||
|
|
||||||
i915_perf_fini(dev_priv);
|
i915_perf_fini(dev_priv);
|
||||||
|
|
||||||
if (pdev->msi_enabled)
|
if (pdev->msi_enabled)
|
||||||
pci_disable_msi(pdev);
|
pci_disable_msi(pdev);
|
||||||
|
|
||||||
root_pdev = pcie_find_root_port(pdev);
|
|
||||||
if (root_pdev)
|
|
||||||
pci_d3cold_enable(root_pdev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1625,6 +1610,8 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
||||||
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
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;
|
struct intel_gt *gt;
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
|
@ -1674,6 +1661,15 @@ static int intel_runtime_suspend(struct device *kdev)
|
||||||
drm_err(&dev_priv->drm,
|
drm_err(&dev_priv->drm,
|
||||||
"Unclaimed access detected prior to suspending\n");
|
"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;
|
rpm->suspended = true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1712,6 +1708,8 @@ static int intel_runtime_resume(struct device *kdev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
|
||||||
struct intel_runtime_pm *rpm = &dev_priv->runtime_pm;
|
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;
|
struct intel_gt *gt;
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
|
@ -1725,6 +1723,11 @@ static int intel_runtime_resume(struct device *kdev)
|
||||||
|
|
||||||
intel_opregion_notify_adapter(dev_priv, PCI_D0);
|
intel_opregion_notify_adapter(dev_priv, PCI_D0);
|
||||||
rpm->suspended = false;
|
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))
|
if (intel_uncore_unclaimed_mmio(&dev_priv->uncore))
|
||||||
drm_dbg(&dev_priv->drm,
|
drm_dbg(&dev_priv->drm,
|
||||||
"Unclaimed access during suspend, bios?\n");
|
"Unclaimed access during suspend, bios?\n");
|
||||||
|
|
Loading…
Reference in New Issue