From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: <intel-gfx@lists.freedesktop.org>,
Bjorn Helgaas <bhelgaas@google.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
<linux-pci@vger.kernel.org>
Subject: Re: [PATCH 2/6] drm/i915/pm: Hoist pci_save_state()+pci_set_power_state() to the end of pm _late() hook
Date: Thu, 26 Sep 2024 10:43:21 -0400 [thread overview]
Message-ID: <ZvVzCbkfUkDb_0Ch@intel.com> (raw)
In-Reply-To: <20240925144526.2482-3-ville.syrjala@linux.intel.com>
On Wed, Sep 25, 2024 at 05:45:22PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> driver/pci does the pci_save_state()+pci_set_power_state() from the
> _noirq() pm hooks. Move our manual calls (needed for the hibernate+D3
> workaround with buggy BIOSes) towards that same point. We currently
> have no _noirq() hooks, so end of _late() hooks is the best we can
> do right now.
>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: "Rafael J. Wysocki" <rafael@kernel.org>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: linux-pci@vger.kernel.org
> Cc: intel-gfx@lists.freedesktop.org
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/i915_driver.c | 19 ++++++++++++++-----
> 1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index 6dc0104a3e36..9d557ff8adf5 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -1015,7 +1015,6 @@ static int i915_drm_suspend(struct drm_device *dev)
> {
> struct drm_i915_private *dev_priv = to_i915(dev);
> struct intel_display *display = &dev_priv->display;
> - struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> pci_power_t opregion_target_state;
>
> disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
> @@ -1029,8 +1028,6 @@ static int i915_drm_suspend(struct drm_device *dev)
> intel_display_driver_disable_user_access(dev_priv);
> }
>
> - pci_save_state(pdev);
> -
> intel_display_driver_suspend(dev_priv);
>
> intel_dp_mst_suspend(dev_priv);
> @@ -1090,10 +1087,16 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
> drm_err(&dev_priv->drm, "Suspend complete failed: %d\n", ret);
> intel_power_domains_resume(dev_priv);
>
> - goto out;
> + goto fail;
> }
>
> + enable_rpm_wakeref_asserts(rpm);
> +
> + if (!dev_priv->uncore.user_forcewake_count)
> + intel_runtime_pm_driver_release(rpm);
> +
why do we need this?
probably deserves a separate patch?
> pci_disable_device(pdev);
> +
> /*
> * During hibernation on some platforms the BIOS may try to access
> * the device even though it's already in D3 and hang the machine. So
> @@ -1105,11 +1108,17 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
> * Lenovo Thinkpad X301, X61s, X60, T60, X41
> * Fujitsu FSC S7110
> * Acer Aspire 1830T
> + *
> + * pci_save_state() is needed to prevent driver/pci from
> + * automagically putting the device into D3.
> */
I'm still not convinced that this would automagically prevent the D3,
specially in this part of the code.
I would prefer to simply remove this call, or keep it and move it
here to be consistent with other drivers, but also add the restore
portion of it for consistency and alignment...
> + pci_save_state(pdev);
> if (!(hibernation && GRAPHICS_VER(dev_priv) < 6))
> pci_set_power_state(pdev, PCI_D3hot);
>
> -out:
> + return 0;
> +
> +fail:
> enable_rpm_wakeref_asserts(rpm);
> if (!dev_priv->uncore.user_forcewake_count)
> intel_runtime_pm_driver_release(rpm);
> --
> 2.44.2
>
next prev parent reply other threads:[~2024-09-26 14:43 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-25 14:45 [PATCH 0/6] drm/i915/pm: Clean up the hibernate vs. PCI D3 quirk Ville Syrjala
2024-09-25 14:45 ` [PATCH 1/6] PCI/PM: Respect pci_dev->skip_bus_pm in the .poweroff() path Ville Syrjala
2024-09-25 19:28 ` Bjorn Helgaas
2024-09-26 16:03 ` Ville Syrjälä
2024-09-30 19:50 ` Bjorn Helgaas
2024-10-01 13:12 ` Ville Syrjälä
2024-10-23 15:31 ` Ville Syrjälä
2024-09-25 14:45 ` [PATCH 2/6] drm/i915/pm: Hoist pci_save_state()+pci_set_power_state() to the end of pm _late() hook Ville Syrjala
2024-09-26 14:43 ` Rodrigo Vivi [this message]
2024-09-26 15:41 ` Ville Syrjälä
2024-09-26 16:40 ` Rodrigo Vivi
2024-09-25 14:45 ` [PATCH 3/6] drm/i915/pm: Simplify pm hook documentation Ville Syrjala
2024-09-26 14:45 ` Rodrigo Vivi
2024-09-26 15:38 ` Ville Syrjälä
2024-09-26 16:10 ` Rodrigo Vivi
2024-09-25 14:45 ` [PATCH 4/6] drm/i915/pm: Move the hibernate+D3 quirk stuff into noirq() pm hooks Ville Syrjala
2024-09-25 19:28 ` Bjorn Helgaas
2024-09-25 14:45 ` [PATCH 5/6] drm/i915/pm: Do pci_restore_state() in switcheroo resume hook Ville Syrjala
2024-09-26 14:48 ` Rodrigo Vivi
2024-09-26 15:36 ` Ville Syrjälä
2024-09-26 16:27 ` Rodrigo Vivi
2024-09-25 14:45 ` [PATCH 6/6] drm/i915/pm: Use pci_dev->skip_bus_pm for hibernate vs. D3 workaround Ville Syrjala
2024-09-25 19:28 ` Bjorn Helgaas
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=ZvVzCbkfUkDb_0Ch@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=bhelgaas@google.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-pci@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).