diff mbox series

[v2] drm/i915/dgfx: Enable d3cold at s2idle

Message ID 20230816125216.1722002-1-anshuman.gupta@intel.com (mailing list archive)
State New, archived
Headers show
Series [v2] drm/i915/dgfx: Enable d3cold at s2idle | expand

Commit Message

Gupta, Anshuman Aug. 16, 2023, 12:52 p.m. UTC
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>
---
 drivers/gpu/drm/i915/i915_driver.c | 33 ++++++++++++++++--------------
 1 file changed, 18 insertions(+), 15 deletions(-)

Comments

Aaron Ma Aug. 17, 2023, 1:10 p.m. UTC | #1
Tested-by: Aaron Ma <aaron.ma@canonical.com>
Yu, Jianshui Aug. 17, 2023, 2:39 p.m. UTC | #2
Tested-By: Jianshui Yu <Jianshui.yu@intel.com>

-----Original Message-----
From: Gupta, Anshuman <anshuman.gupta@intel.com> 
Sent: Wednesday, August 16, 2023 8:52 PM
To: intel-gfx@lists.freedesktop.org
Cc: Nilawar, Badal <badal.nilawar@intel.com>; Tauro, Riana <riana.tauro@intel.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>; Yu, Jianshui <jianshui.yu@intel.com>; Wang, Lidong <lidong.wang@intel.com>; Gupta, Anshuman <anshuman.gupta@intel.com>; stable@vger.kernel.org
Subject: [PATCH v2] 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>
---
 drivers/gpu/drm/i915/i915_driver.c | 33 ++++++++++++++++--------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index b870c0df081a..ec4d26b3c17c 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -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 @@ static int i915_driver_hw_probe(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 *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");
--
2.25.1
Gupta, Anshuman Aug. 17, 2023, 4:07 p.m. UTC | #3
Thanks for review and Testing.
CI Full run failure was unrelated to this patch.
Pushed to drm-intel-next
Regards,
Anshuman Gupta. 

> -----Original Message-----
> From: Yu, Jianshui <jianshui.yu@intel.com>
> Sent: Thursday, August 17, 2023 8:09 PM
> To: Gupta, Anshuman <anshuman.gupta@intel.com>; intel-
> gfx@lists.freedesktop.org
> Cc: Nilawar, Badal <badal.nilawar@intel.com>; Tauro, Riana
> <riana.tauro@intel.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>; Wang,
> Lidong <lidong.wang@intel.com>; stable@vger.kernel.org
> Subject: RE: [PATCH v2] drm/i915/dgfx: Enable d3cold at s2idle
> 
> Tested-By: Jianshui Yu <Jianshui.yu@intel.com>
> 
> -----Original Message-----
> From: Gupta, Anshuman <anshuman.gupta@intel.com>
> Sent: Wednesday, August 16, 2023 8:52 PM
> To: intel-gfx@lists.freedesktop.org
> Cc: Nilawar, Badal <badal.nilawar@intel.com>; Tauro, Riana
> <riana.tauro@intel.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>; Yu, Jianshui
> <jianshui.yu@intel.com>; Wang, Lidong <lidong.wang@intel.com>; Gupta,
> Anshuman <anshuman.gupta@intel.com>; stable@vger.kernel.org
> Subject: [PATCH v2] 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>
> ---
>  drivers/gpu/drm/i915/i915_driver.c | 33 ++++++++++++++++--------------
>  1 file changed, 18 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_driver.c
> b/drivers/gpu/drm/i915/i915_driver.c
> index b870c0df081a..ec4d26b3c17c 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -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 @@ static int i915_driver_hw_probe(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 *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");
> --
> 2.25.1
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index b870c0df081a..ec4d26b3c17c 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -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 @@  static int i915_driver_hw_probe(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 *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");