From: Bjorn Helgaas <helgaas@kernel.org>
To: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
Cc: bhelgaas@google.com, linux-pci@vger.kernel.org,
mario.limonciello@amd.com, thomas@glanzmann.de
Subject: Re: [PATCH] PCI: Add quirk to clear MSI-X
Date: Wed, 8 Mar 2023 16:44:28 -0600 [thread overview]
Message-ID: <20230308224428.GA1050977@bhelgaas> (raw)
In-Reply-To: <20230306072340.172306-1-Basavaraj.Natikar@amd.com>
Let's mention the vendor and device name in the subject to make the
log more useful.
On Mon, Mar 06, 2023 at 12:53:40PM +0530, Basavaraj Natikar wrote:
> One of the AMD USB controllers fails to maintain internal functional
> context when transitioning from D3 to D0, desynchronizing MSI-X bits.
> As a result, add a quirk to this controller to clear the MSI-X bits
> on suspend.
Is this a documented erratum? Please include a citation if so.
Are there any other AMD USB devices with the same defect?
The quick clears the Function Mask bit, so the MSI-X vectors may be
*unmasked* depending on the state of each vectors Mask bit. I assume
the potential unmasking is safe because you also clear the MSI-X
Enable bit, so the function can't use MSI-X at all.
All state is lost in D3cold, so I guess this problem must occur during
a D3hot to D0 transition, right? I assume this device sets
No_Soft_Reset, so the function is supposed to return to D0active with
all internal state intact. But this device returns to D0active with
the MSI-X internal state corrupted?
I assume this relies on pci_restore_state() to restore the MSI-X
state. Seems like that might be enough to restore the internal state
even without this quirk, but I guess it must not be.
> Note: This quirk works in all scenarios, regardless of whether the
> integrated GPU is disabled in the BIOS.
I don't know how the integrated GPU is related to this USB controller,
but I assume this fact is important somehow?
> Cc: Mario Limonciello <mario.limonciello@amd.com>
> Reported-by: Thomas Glanzmann <thomas@glanzmann.de>
> Link: https://lore.kernel.org/linux-usb/Y%2Fz9GdHjPyF2rNG3@glanzmann.de/T/#u
Apparently the symptom is one of these:
xhci_hcd 0000:0c:00.0: Error while assigning device slot ID: Command Aborted
xhci_hcd 0000:0c:00.0: Max number of devices this xHCI host supports is 64.
usb usb1-port1: couldn't allocate usb_device
xhci_hcd 0000:0c:00.0: WARN: xHC save state timeout
xhci_hcd 0000:0c:00.0: PM: suspend_common(): xhci_pci_suspend+0x0/0x150 [xhci_pci] returns -110
xhci_hcd 0000:0c:00.0: can't suspend (hcd_pci_runtime_suspend [usbcore] returned -110)
We should include the critical line or two in the commit log to help
users find the fix.
I see this must be xhci_suspend() returning -ETIMEDOUT after
xhci_save_registers(), but I don't see the connection from there to a
PCI_FIXUP_SUSPEND. Can you connect the dots for me?
> Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
> ---
> drivers/pci/quirks.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index 44cab813bf95..ddf7100227d3 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -6023,3 +6023,13 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9a2d, dpc_log_size);
> DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9a2f, dpc_log_size);
> DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x9a31, dpc_log_size);
> #endif
> +
> +static void quirk_clear_msix(struct pci_dev *dev)
> +{
> + u16 ctrl;
> +
> + pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &ctrl);
> + ctrl &= ~(PCI_MSIX_FLAGS_MASKALL | PCI_MSIX_FLAGS_ENABLE);
> + pci_write_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, ctrl);
> +}
> +DECLARE_PCI_FIXUP_SUSPEND(PCI_VENDOR_ID_AMD, 0x15b8, quirk_clear_msix);
> --
> 2.25.1
>
next prev parent reply other threads:[~2023-03-08 22:44 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-06 7:23 [PATCH] PCI: Add quirk to clear MSI-X Basavaraj Natikar
2023-03-06 8:14 ` Thomas Glanzmann
2023-03-08 22:44 ` Bjorn Helgaas [this message]
2023-03-08 23:04 ` Limonciello, Mario
2023-03-09 7:34 ` Basavaraj Natikar
2023-03-09 18:25 ` Bjorn Helgaas
2023-03-09 18:32 ` Limonciello, Mario
2023-03-09 22:30 ` Bjorn Helgaas
2023-03-10 0:57 ` Mario Limonciello
2023-03-10 7:41 ` Basavaraj Natikar
2023-03-10 22:13 ` Bjorn Helgaas
2023-03-20 1:32 ` Limonciello, Mario
2023-03-20 17:14 ` Bjorn Helgaas
2023-03-20 17:20 ` Limonciello, Mario
2023-03-20 19:36 ` Bjorn Helgaas
2023-03-20 19:47 ` Limonciello, Mario
2023-03-20 21:30 ` Bjorn Helgaas
2023-03-20 21:37 ` Limonciello, Mario
2023-03-20 22:08 ` Bjorn Helgaas
2023-03-20 22:52 ` Mario Limonciello
2023-03-21 11:07 ` Bjorn Helgaas
2023-03-28 13:15 ` Basavaraj Natikar
2023-03-28 13:25 ` Limonciello, Mario
2023-03-28 17:42 ` Bjorn Helgaas
2023-03-10 7:22 ` Basavaraj Natikar
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=20230308224428.GA1050977@bhelgaas \
--to=helgaas@kernel.org \
--cc=Basavaraj.Natikar@amd.com \
--cc=bhelgaas@google.com \
--cc=linux-pci@vger.kernel.org \
--cc=mario.limonciello@amd.com \
--cc=thomas@glanzmann.de \
/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.