From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: "Ville Syrjälä" <ville.syrjala@linux.intel.com>,
"Anshuman Gupta" <anshuman.gupta@intel.com>
Cc: <rafael@kernel.org>, <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH] drm/xe: Restore pci state upon resume
Date: Tue, 17 Sep 2024 14:49:37 -0400 [thread overview]
Message-ID: <ZunPQeJb2zoVbNSN@intel.com> (raw)
In-Reply-To: <ZuRuSgnnjGSr8xI_@intel.com>
On Fri, Sep 13, 2024 at 07:54:34PM +0300, Ville Syrjälä wrote:
> On Fri, Sep 13, 2024 at 11:43:52AM -0400, Rodrigo Vivi wrote:
> > On Fri, Sep 13, 2024 at 02:01:49PM +0300, Ville Syrjälä wrote:
> > > On Thu, Sep 12, 2024 at 03:05:30PM -0400, Rodrigo Vivi wrote:
> > > > The pci state was saved, but not restored. Restore
> > > > right after the power state transition request like
> > > > every other driver.
> > > >
> > > > Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
> > > > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > > ---
> > > > drivers/gpu/drm/xe/xe_pci.c | 2 ++
> > > > 1 file changed, 2 insertions(+)
> > > >
> > > > diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> > > > index 5ba4ec229494..6d29ef4b396f 100644
> > > > --- a/drivers/gpu/drm/xe/xe_pci.c
> > > > +++ b/drivers/gpu/drm/xe/xe_pci.c
> > > > @@ -949,6 +949,8 @@ static int xe_pci_resume(struct device *dev)
> > > > if (err)
> > > > return err;
> > > >
> > > > + pci_restore_state(pdev);
> > >
> > > Why is xe even doing this stuff by hand instead of letting
> > > the pci core handle it?
> >
> > That's a fair question, given that there's not much documentation
> > around it.
> >
> > Looking the pci code, it looks that the pci core is not calling itself
> > for the restoration of the config space anywhere and looking to
> > other drivers around it looks like a safe thing to do.
> >
> > And the pci_restore_state is paired with the pci_save_state.
> > Both i915 and Xe are doing the pci_save_state and not restoring
> > it.
>
> i915 needs it because (as a side effect) it prevents the pci
> code from automagically sticking the device into D3, which
> apparently breaks hibernation on some old crappy laptops.
> But xe shouldn't need that.
Hmm, doing some archaeology here, it looks like the
both pci_save and pci_restore were added together on
regular system suspend-resume by Jesse from the very
beginning:
ba8bbcf6ff46 ("i915: add suspend/resume support")
Then, later pci_restore was removed by Zhenyu on
b7e53aba2f0e ("drm/i915: remove restore in resume")
because it was hanging some platforms.
The only reference to d3 related issues that I could find
was this one:
https://lore.kernel.org/intel-gfx/1497281047-25204-5-git-send-email-animesh.manna@intel.com/
but that was trying to add the support to the the save/restore
in the runtime pm side and not here in the regular system suspend/resume.
Am I missing anything?
Empirically Anshuman showed us that PCI subsystem is indeed taking
care of the save/restore.
Ville, my question to you now is: can I go ahead and simply remove
the pci_save_state() call from i915? Or you still believe some
hibernation somewhere could be broken?
I believe we should either remove both save and restore for both
drivers or add both to both. But staying with a lingering stand
alone case is bad. Also it kinds of block some of the refactor
code that I'm going around intel_display suspend/resume when
trying to reconcile xe and i915 calls.
Thanks a lot for all the inputs,
Rodrigo.
>
> >
> > So, we either add the restore state to both, or we remove the
> > save state. Adding seems to be the most conservative approach,
> > hence this patch (i915 is queued in a branch with other display
> > refactor).
> >
> > Rafael, any guidance here?
> >
> > Cc: Rafael J. Wysocki <rafael@kernel.org>
> >
> > >
> > > > +
> > > > err = pci_enable_device(pdev);
> > > > if (err)
> > > > return err;
> > > > --
> > > > 2.46.0
> > >
> > > --
> > > Ville Syrjälä
> > > Intel
>
> --
> Ville Syrjälä
> Intel
next prev parent reply other threads:[~2024-09-17 18:49 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-12 19:05 [PATCH] drm/xe: Restore pci state upon resume Rodrigo Vivi
2024-09-12 19:47 ` Cavitt, Jonathan
2024-09-12 20:05 ` ✓ CI.Patch_applied: success for " Patchwork
2024-09-12 20:05 ` ✓ CI.checkpatch: " Patchwork
2024-09-12 20:07 ` ✓ CI.KUnit: " Patchwork
2024-09-12 20:11 ` [PATCH] " Lucas De Marchi
2024-09-12 21:20 ` Rodrigo Vivi
2024-09-12 21:40 ` Lucas De Marchi
2024-09-17 21:37 ` Maarten Lankhorst
2024-09-12 20:18 ` ✓ CI.Build: success for " Patchwork
2024-09-12 20:21 ` ✓ CI.Hooks: " Patchwork
2024-09-12 20:22 ` ✓ CI.checksparse: " Patchwork
2024-09-12 20:37 ` ✓ CI.BAT: " Patchwork
2024-09-13 11:01 ` [PATCH] " Ville Syrjälä
2024-09-13 15:43 ` Rodrigo Vivi
2024-09-13 15:50 ` Gupta, Anshuman
2024-09-13 16:54 ` Ville Syrjälä
2024-09-17 18:49 ` Rodrigo Vivi [this message]
2024-09-17 21:09 ` Ville Syrjälä
2024-09-19 22:10 ` Rodrigo Vivi
2024-09-20 10:19 ` Ville Syrjälä
2024-09-13 14:10 ` ✗ CI.FULL: failure for " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2024-09-12 21:45 [PATCH] " Rodrigo Vivi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZunPQeJb2zoVbNSN@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=anshuman.gupta@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=rafael@kernel.org \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.