From: Niklas Neronin <niklas.neronin@linux.intel.com>
To: mathias.nyman@linux.intel.com
Cc: linux-usb@vger.kernel.org, raoxu@uniontech.com,
Thinh.Nguyen@synopsys.com,
Niklas Neronin <niklas.neronin@linux.intel.com>
Subject: [RFC PATCH 11/12] usb: xhci: prepare for multiple interrupters
Date: Thu, 5 Mar 2026 15:48:23 +0100 [thread overview]
Message-ID: <20260305144824.3264408-12-niklas.neronin@linux.intel.com> (raw)
In-Reply-To: <20260305144824.3264408-1-niklas.neronin@linux.intel.com>
The core xhci driver only uses a single interrupter. Prepares the driver
to handle multiple interrupters, although it still uses only one interrupt
for now.
Some initialization, such as IP bit auto-clear and IMODI, was previously
done in xhci_run() (called once per xHCI instance). For simplicity,
move these to xhci_init() to consolidate all interrupter-related setup
in a single place.
Move the ERST dequeue debug message from xhci_run() to the existing ERST
debug message in xhci_set_hc_event_deq(). This function is always called
before xhci_run(), and is called for all interrupters.
This change is necessary to prepare the driver for multiple interrupters.
Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com>
---
drivers/usb/host/xhci-mem.c | 3 +--
drivers/usb/host/xhci-pci.c | 4 ++++
drivers/usb/host/xhci.c | 13 +------------
3 files changed, 6 insertions(+), 14 deletions(-)
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 46d977f9e5c5..a6fde127c569 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -2017,8 +2017,7 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci, struct xhci_interrupter
/* Don't clear the EHB bit (which is RW1C) because
* there might be more events to service.
*/
- xhci_dbg_trace(xhci, trace_xhci_dbg_init,
- "// Write event ring dequeue pointer, preserving EHB bit");
+ xhci_dbg_trace(xhci, trace_xhci_dbg_init, "Write ERST %pad, preserving EHB bit", &deq);
xhci_write_64(xhci, deq & ERST_PTR_MASK, &ir->ir_set->erst_dequeue);
}
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 585b2f3117b0..ea43b0153430 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -181,6 +181,10 @@ static int xhci_try_enable_msi(struct usb_hcd *hcd)
hcd->msi_enabled = 1;
hcd->msix_enabled = pdev->msix_enabled;
+
+ /* MSI/MSI-X interrupts clear IMAN IP bit automatically */
+ xhci->interrupters[0]->ip_autoclear = true;
+
return 0;
free_irq_vectors:
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 329fe9ff19f8..e846ab402d3e 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -573,6 +573,7 @@ static void xhci_init(struct usb_hcd *hcd)
xhci_ring_init(xhci, xhci->interrupters[0]->event_ring);
xhci_add_interrupter(xhci, 0);
xhci->interrupters[0]->isoc_bei_interval = AVOID_BEI_INTERVAL_MAX;
+ xhci_set_interrupter_moderation(xhci->interrupters[0], xhci->imod_interval);
/* Initializing Compliance Mode Recovery Data If Needed */
if (xhci_compliance_mode_recovery_timer_quirk_check()) {
@@ -633,30 +634,18 @@ static int xhci_run_finished(struct xhci_hcd *xhci)
*/
int xhci_run(struct usb_hcd *hcd)
{
- u64 temp_64;
int ret;
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
- struct xhci_interrupter *ir = xhci->interrupters[0];
/* Start the xHCI host controller running only after the USB 2.0 roothub
* is setup.
*/
hcd->uses_new_polling = 1;
- if (hcd->msi_enabled)
- ir->ip_autoclear = true;
-
if (!usb_hcd_is_primary_hcd(hcd))
return xhci_run_finished(xhci);
xhci_dbg_trace(xhci, trace_xhci_dbg_init, "xhci_run");
- temp_64 = xhci_read_64(xhci, &ir->ir_set->erst_dequeue);
- temp_64 &= ERST_PTR_MASK;
- xhci_dbg_trace(xhci, trace_xhci_dbg_init,
- "ERST deq = 64'h%0lx", (long unsigned int) temp_64);
-
- xhci_set_interrupter_moderation(ir, xhci->imod_interval);
-
if (xhci->quirks & XHCI_NEC_HOST) {
struct xhci_command *command;
--
2.50.1
next prev parent reply other threads:[~2026-03-05 14:49 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
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 ` Niklas Neronin [this message]
2026-03-05 14:48 ` [RFC PATCH 12/12] usb: xhci: prepare IRQ handler for multiple interrupters 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=20260305144824.3264408-12-niklas.neronin@linux.intel.com \
--to=niklas.neronin@linux.intel.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@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