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@xxxxxxxxx> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> Since it helps with the discrete cards: Acked-by: Imre Deak <imre.deak@xxxxxxxxx> > --- > 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 >