Message ID | 20210825152233.2151037-2-rodrigo.vivi@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/4] drm/i915/runtime_pm: Consolidate runtime_pm functions | expand |
On Wed, Aug 25, 2021 at 11:22:31AM -0400, Rodrigo Vivi wrote: > During runtime or s2idle suspend and resume cases on discrete cards, > if D3Cold is really achieved, we will blow everything up and > freeze the machine because we are not yet handling the pci states > properly. Is this some ordering problem wrt. pci_save_state()? In theory the RPM core should take care of this (see pci_pm_runtime_suspend()) and the PCI rpm docs don't recommend doing this manually from the driver's callback. > On Integrated it simply doesn't matter because D3hot is the maximum > that we will get anyway, unless the system is on S3/S4 and our power > is cut. Is the support for D3cold indicated in the PCI PM capabailities? I can't see this being enabled for IGDs, so probably there's no problem with disabling it on those. I also checked a DG1 card, but it's also disabled there, do you have any having it enabled? > Let's put this hammer for now everywhere. So we can work to enable > the auto-suspend by default without blowing up the world. > > Then, this should be removed when we finally fix the D3Cold flow. > > Cc: Tilak Tangudu <tilak.tangudu@intel.com> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Since it helps with the discrete cards: Acked-by: Imre Deak <imre.deak@intel.com> > --- > drivers/gpu/drm/i915/i915_drv.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index a40b5d806321..086a9a475ce8 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -301,6 +301,7 @@ static void sanitize_gpu(struct drm_i915_private *i915) > */ > static int i915_driver_early_probe(struct drm_i915_private *dev_priv) > { > + struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); > int ret = 0; > > if (i915_inject_probe_failure(dev_priv)) > @@ -331,6 +332,13 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv) > if (ret < 0) > return ret; > > + /* > + * 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. > + */ > + pci_d3cold_disable(pdev); > + > ret = vlv_suspend_init(dev_priv); > if (ret < 0) > goto err_workqueues; > -- > 2.31.1 >
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index a40b5d806321..086a9a475ce8 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -301,6 +301,7 @@ static void sanitize_gpu(struct drm_i915_private *i915) */ static int i915_driver_early_probe(struct drm_i915_private *dev_priv) { + struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); int ret = 0; if (i915_inject_probe_failure(dev_priv)) @@ -331,6 +332,13 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv) if (ret < 0) return ret; + /* + * 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. + */ + pci_d3cold_disable(pdev); + ret = vlv_suspend_init(dev_priv); if (ret < 0) goto err_workqueues;
During runtime or s2idle suspend and resume cases on discrete cards, if D3Cold is really achieved, we will blow everything up and freeze the machine because we are not yet handling the pci states properly. On Integrated it simply doesn't matter because D3hot is the maximum that we will get anyway, unless the system is on S3/S4 and our power is cut. Let's put this hammer for now everywhere. So we can work to enable the auto-suspend by default without blowing up the world. Then, this should be removed when we finally fix the D3Cold flow. Cc: Tilak Tangudu <tilak.tangudu@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> --- drivers/gpu/drm/i915/i915_drv.c | 8 ++++++++ 1 file changed, 8 insertions(+)