From: Michal Pecio <michal.pecio@gmail.com>
To: Niklas Neronin <niklas.neronin@linux.intel.com>
Cc: mathias.nyman@linux.intel.com, linux-usb@vger.kernel.org,
raoxu@uniontech.com, Thinh.Nguyen@synopsys.com,
Andy Shevchenko <andriy.shevchenko@intel.com>
Subject: Re: [RFC PATCH 03/12] usb: xhci: simplify USBSTS register reset
Date: Thu, 5 Mar 2026 20:26:32 +0100 [thread overview]
Message-ID: <20260305202632.5a2d0d0d.michal.pecio@gmail.com> (raw)
In-Reply-To: <20260305144824.3264408-4-niklas.neronin@linux.intel.com>
On Thu, 5 Mar 2026 15:48:15 +0100, Niklas Neronin wrote:
> The current code clears the USB Status Register (USBSTS) and then sets
> the Enable Interrupt (EINT) bit to '1'. A mask (~0x1fff) is used to
> avoid modifying reserved bits 31:13, but it also inadvertently
> excludes reserved bits 7:5, 1. These fields are defined as RsvdZ, so
> writing '0' to them has no effect.
This paragraph is misleading because it suggests that treatment of bits
31:13 was correct and treatment of bits 7:5 was harmlessly wrong.
In reality, bits 7:5 were done correctly, while preserving bits 31:13
was a bug. They should be written as zero just like 7:5.
Table 5-3 is completely clear:
Software shall use ‘0’ for writes to these bits.
> According to the xHCI specification, section 5.1.1:
> "System software shall mask all reserved fields (Rsvd, RsvdP or RsvdZ) to
> '0' before evaluating a register or data structure value. This will enable
> current system software to run with future xHCI implementations that
> define the reserved fields."
This quote seems irrelevant. We aren't evaluating anything here, just
changing one bit.
It obviously doesn't apply to the case of read-modify-write, because if
we mask RsvdP bits to zero and then write back, that's a bug too.
>
> Given this, it is safe to write zero to all bits of USBSTS except EINT.
> This allows the mask and the register read to be removed, simplifying the
> code, avoiding potential future issues and removing unexplained hex.
>
> USB Status Register; xHCI Specification, version 1.2 section 5.4.2
>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
> Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com>
> ---
> drivers/usb/host/xhci.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index a288f59c604c..ad095768ed48 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -705,7 +705,6 @@ EXPORT_SYMBOL_GPL(xhci_run);
> */
> void xhci_stop(struct usb_hcd *hcd)
> {
> - u32 temp;
> struct xhci_hcd *xhci = hcd_to_xhci(hcd);
> struct xhci_interrupter *ir = xhci->interrupters[0];
>
> @@ -740,8 +739,7 @@ void xhci_stop(struct usb_hcd *hcd)
>
> xhci_dbg_trace(xhci, trace_xhci_dbg_init,
> "// Disabling event ring interrupts");
> - temp = readl(&xhci->op_regs->status);
> - writel((temp & ~0x1fff) | STS_EINT, &xhci->op_regs->status);
Makes sense,
> + writel(STS_EINT, &xhci->op_regs->status);
but what is actually the point of clearing this bit here at all?
This is USBSTS.EINT, not USBCMD.INTE. Per 5.4.2 (including notes),
this bit has no effect on anything, it's only for SW's convenience.
And we are shutting down the driver right now.
> xhci_disable_interrupter(xhci, ir);
>
> xhci_dbg_trace(xhci, trace_xhci_dbg_init, "cleaning up memory");
> @@ -1174,8 +1172,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool power_lost, bool is_auto_resume)
> return retval;
>
> xhci_dbg(xhci, "// Disabling event ring interrupts\n");
> - temp = readl(&xhci->op_regs->status);
> - writel((temp & ~0x1fff) | STS_EINT, &xhci->op_regs->status);
> + writel(STS_EINT, &xhci->op_regs->status);
> xhci_disable_interrupter(xhci, xhci->interrupters[0]);
This runs right after xhci_reset(), so I suspect this whole block is
pointless. Apparently copy-pasted with other stuff from xhci_stop().
>
> xhci_dbg(xhci, "cleaning up memory\n");
> --
> 2.50.1
>
next prev parent reply other threads:[~2026-03-05 19:26 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-05 14:48 [RFC PATCH 00/12] usb: xhci: groundwork for secondary interrupters Niklas Neronin
2026-03-05 14:48 ` [RFC PATCH 01/12] usb: xhci: simplify CMRT initialization logic Niklas Neronin
2026-03-05 14:48 ` [RFC PATCH 02/12] usb: xhci: relocate Restore/Controller error check Niklas Neronin
2026-03-05 14:48 ` [RFC PATCH 03/12] usb: xhci: simplify USBSTS register reset Niklas Neronin
2026-03-05 19:26 ` Michal Pecio [this message]
2026-03-05 14:48 ` [RFC PATCH 04/12] usb: xhci: move reserving command ring trb Niklas Neronin
2026-03-05 14:48 ` [RFC PATCH 05/12] usb: xhci: move ring initialization Niklas Neronin
2026-03-05 14:48 ` [RFC PATCH 06/12] usb: xhci: move initialization for lifetime objects Niklas Neronin
2026-03-05 22:14 ` Michal Pecio
2026-03-06 9:47 ` Neronin, Niklas
2026-03-05 14:48 ` [RFC PATCH 07/12] usb: xhci: split core allocation and initialization Niklas Neronin
2026-03-05 22:23 ` Michal Pecio
2026-03-05 14:48 ` [RFC PATCH 08/12] usb: xhci: improve debug messages during suspend Niklas Neronin
2026-03-05 14:48 ` [RFC PATCH 09/12] usb: xhci: optimize resuming from S4 (suspend-to-RAM) Niklas Neronin
2026-03-06 6:52 ` raoxu
2026-03-06 10:16 ` Neronin, Niklas
2026-03-06 7:05 ` Michal Pecio
2026-03-05 14:48 ` [RFC PATCH 10/12] usb: xhci: add interrupter type Niklas Neronin
2026-03-05 14:48 ` [RFC PATCH 11/12] usb: xhci: prepare for multiple interrupters Niklas Neronin
2026-03-05 14:48 ` [RFC PATCH 12/12] usb: xhci: prepare IRQ handler " Niklas Neronin
2026-03-06 6:53 ` raoxu
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=20260305202632.5a2d0d0d.michal.pecio@gmail.com \
--to=michal.pecio@gmail.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=andriy.shevchenko@intel.com \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@linux.intel.com \
--cc=niklas.neronin@linux.intel.com \
--cc=raoxu@uniontech.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