From: Alexander H Duyck <alexander.duyck@gmail.com>
To: Kai-Heng Feng <kai.heng.feng@canonical.com>,
jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com
Cc: linux-pm@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] e1000e: Use PME poll to circumvent unreliable ACPI wake
Date: Thu, 01 Jun 2023 13:24:24 -0700 [thread overview]
Message-ID: <269262acfcce8eb1b85ee1fe3424a5ef2991f481.camel@gmail.com> (raw)
In-Reply-To: <20230601162537.1163270-1-kai.heng.feng@canonical.com>
On Fri, 2023-06-02 at 00:25 +0800, Kai-Heng Feng wrote:
> On some I219 devices, ethernet cable plugging detection only works once
> from PCI D3 state. Subsequent cable plugging does set PME bit correctly,
> but device still doesn't get woken up.
Do we have a root cause on why things don't get woken up? This seems
like an issue where something isn't getting reset after the first
wakeup and so future ones are blocked.
> Since I219 connects to the root complex directly, it relies on platform
> firmware (ACPI) to wake it up. In this case, the GPE from _PRW only
> works for first cable plugging but fails to notify the driver for
> subsequent plugging events.
>
> The issue was originally found on CNP, but the same issue can be found
> on ADL too. So workaround the issue by continuing use PME poll after
> first ACPI wake. As PME poll is always used, the runtime suspend
> restriction for CNP can also be removed.
>
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> ---
> drivers/net/ethernet/intel/e1000e/netdev.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
> index bd7ef59b1f2e..f0e48f2bc3a2 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -7021,6 +7021,8 @@ static __maybe_unused int e1000e_pm_runtime_resume(struct device *dev)
> struct e1000_adapter *adapter = netdev_priv(netdev);
> int rc;
>
> + pdev->pme_poll = true;
> +
> rc = __e1000_resume(pdev);
> if (rc)
> return rc;
Doesn't this enable this too broadly. I know there are a number of
devices that run under the e1000e and I would imagine that we don't
want them all running with "pme_poll = true" do we?
It seems like at a minimum we should only be setting this for specific
platofrms or devices instead of on all of them.
Also this seems like something we should be setting on the suspend side
since it seems to be clared in the wakeup calls.
Lastly I am not sure the first one is necessarily succeding. You might
want to check the status of pme_poll before you run your first test.
From what I can tell it looks like the initial state is true in
pci_pm_init. If so it might be getting cleared after the first wakeup
which is what causes your issues.
> @@ -7682,7 +7684,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>
> dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_SMART_PREPARE);
>
> - if (pci_dev_run_wake(pdev) && hw->mac.type != e1000_pch_cnp)
> + if (pci_dev_run_wake(pdev))
> pm_runtime_put_noidle(&pdev->dev);
>
> return 0;
I assume this is the original workaround that was put in to address
this issue. Perhaps you should add a Fixes tag to this to identify
which workaround this patch is meant to be replacing.
next prev parent reply other threads:[~2023-06-01 20:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-01 16:25 [PATCH] e1000e: Use PME poll to circumvent unreliable ACPI wake Kai-Heng Feng
2023-06-01 20:24 ` Alexander H Duyck [this message]
2023-06-02 1:46 ` Kai-Heng Feng
2023-06-02 8:43 ` [Intel-wired-lan] " Paul Menzel
2023-06-05 8:25 ` Kai-Heng Feng
2023-06-25 6:28 ` naamax.meir
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=269262acfcce8eb1b85ee1fe3424a5ef2991f481.camel@gmail.com \
--to=alexander.duyck@gmail.com \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jesse.brandeburg@intel.com \
--cc=kai.heng.feng@canonical.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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).