diff mbox series

drm/i915/dgfx: Enable d3cold at s2idle

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

Commit Message

Gupta, Anshuman Aug. 14, 2023, 11:04 a.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.

Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8755
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com>
---
 drivers/gpu/drm/i915/i915_driver.c | 33 ++++++++++++++++--------------
 1 file changed, 18 insertions(+), 15 deletions(-)

Comments

Rodrigo Vivi Aug. 14, 2023, 4:03 p.m. UTC | #1
On Mon, Aug 14, 2023 at 04:34:18PM +0530, Anshuman Gupta wrote:
> 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.
> 
> Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8755
> 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. 15, 2023, 7:29 a.m. UTC | #2
> -----Original Message-----
> From: Vivi, Rodrigo <rodrigo.vivi@intel.com>
> Sent: Monday, August 14, 2023 9:33 PM
> To: Gupta, Anshuman <anshuman.gupta@intel.com>
> Cc: intel-gfx@lists.freedesktop.org; Nilawar, Badal
> <badal.nilawar@intel.com>; Tauro, Riana <riana.tauro@intel.com>
> Subject: Re: [PATCH] drm/i915/dgfx: Enable d3cold at s2idle
> 
> On Mon, Aug 14, 2023 at 04:34:18PM +0530, Anshuman Gupta wrote:
> > 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.
> >
> > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8755
> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com>
> 
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Hi Rodrigo,
Thanks for review, will this be good candidate for Linux stable tree ?
Thanks,
Anshuman Gupta.
> 
> > ---
> >  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
> >
Rodrigo Vivi Aug. 15, 2023, 1:58 p.m. UTC | #3
On Tue, Aug 15, 2023 at 03:29:12AM -0400, Gupta, Anshuman wrote:
> 
> 
> > -----Original Message-----
> > From: Vivi, Rodrigo <rodrigo.vivi@intel.com>
> > Sent: Monday, August 14, 2023 9:33 PM
> > To: Gupta, Anshuman <anshuman.gupta@intel.com>
> > Cc: intel-gfx@lists.freedesktop.org; Nilawar, Badal
> > <badal.nilawar@intel.com>; Tauro, Riana <riana.tauro@intel.com>
> > Subject: Re: [PATCH] drm/i915/dgfx: Enable d3cold at s2idle
> > 
> > On Mon, Aug 14, 2023 at 04:34:18PM +0530, Anshuman Gupta wrote:
> > > 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.
> > >
> > > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8755
> > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com>
> > 
> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Hi Rodrigo,
> Thanks for review, will this be good candidate for Linux stable tree ?

Yes, I think so.

do we have a good commit to mark for 'Fixes:'?

but we can add the cc: stable even without the Fixes already in
advance anyway.

otherwise we need to wait for this to land in Linus tree and then
send directly again to the stable mailing list.

> Thanks,
> Anshuman Gupta.
> > 
> > > ---
> > >  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. 16, 2023, 12:29 p.m. UTC | #4
> -----Original Message-----
> From: Vivi, Rodrigo <rodrigo.vivi@intel.com>
> Sent: Tuesday, August 15, 2023 7:28 PM
> To: Gupta, Anshuman <anshuman.gupta@intel.com>
> Cc: intel-gfx@lists.freedesktop.org; Nilawar, Badal
> <badal.nilawar@intel.com>; Tauro, Riana <riana.tauro@intel.com>; Wang,
> Lidong <lidong.wang@intel.com>; Yu, Jianshui <jianshui.yu@intel.com>
> Subject: Re: [PATCH] drm/i915/dgfx: Enable d3cold at s2idle
> 
> On Tue, Aug 15, 2023 at 03:29:12AM -0400, Gupta, Anshuman wrote:
> >
> >
> > > -----Original Message-----
> > > From: Vivi, Rodrigo <rodrigo.vivi@intel.com>
> > > Sent: Monday, August 14, 2023 9:33 PM
> > > To: Gupta, Anshuman <anshuman.gupta@intel.com>
> > > Cc: intel-gfx@lists.freedesktop.org; Nilawar, Badal
> > > <badal.nilawar@intel.com>; Tauro, Riana <riana.tauro@intel.com>
> > > Subject: Re: [PATCH] drm/i915/dgfx: Enable d3cold at s2idle
> > >
> > > On Mon, Aug 14, 2023 at 04:34:18PM +0530, Anshuman Gupta wrote:
> > > > 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.
> > > >
> > > > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/8755
> > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > > Signed-off-by: Anshuman Gupta <anshuman.gupta@intel.com>
> > >
> > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > Hi Rodrigo,
> > Thanks for review, will this be good candidate for Linux stable tree ?
> 
> Yes, I think so.
> 
> do we have a good commit to mark for 'Fixes:'?
> 
> but we can add the cc: stable even without the Fixes already in advance
> anyway.
Thanks I will  add "Cc: stable@vger.kernel.org"  tag to v2. 
Thanks,
Anshuman Gupta.
> 
> otherwise we need to wait for this to land in Linus tree and then send
> directly again to the stable mailing list.
> 
> > Thanks,
> > Anshuman Gupta.
> > >
> > > > ---
> > > >  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");