aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/usb/host/xhci.c
diff options
context:
space:
mode:
authorNiklas Neronin <niklas.neronin@linux.intel.com>2025-05-15 16:56:05 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-05-21 12:35:32 +0200
commit943f7fddaa49cc797a2ccdff84f69ae4e6b87d40 (patch)
tree2f50602c82ff93b3efa30ac66771366a4a5b92c8 /drivers/usb/host/xhci.c
parentusb: xhci: move DCBAA pointer write (diff)
downloadwireguard-linux-943f7fddaa49cc797a2ccdff84f69ae4e6b87d40.tar.xz
wireguard-linux-943f7fddaa49cc797a2ccdff84f69ae4e6b87d40.zip
usb: xhci: move doorbell array pointer assignment
Move the assignment of the doorbell array pointer from xhci_mem_init() to xhci_init(). The assignment now utilizes the newly introduced xhci_set_doorbell_ptr() function. Doorbell Array Offset mask (DBOFF_MASK) is updated to directly specify its bit range as 31:2, rather than using inverted reserved bits 1:0. This change simplifies the mask representation, making it more intuitive and easier to understand. Remove the "// " prefix from trace messages, as it is unnecessary and distracting. Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20250515135621.335595-9-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to '')
-rw-r--r--drivers/usb/host/xhci.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index e8c262865188..0639d8b7372b 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -514,6 +514,16 @@ static void xhci_set_cmd_ring_deq(struct xhci_hcd *xhci)
xhci_write_64(xhci, crcr, &xhci->op_regs->cmd_ring);
}
+static void xhci_set_doorbell_ptr(struct xhci_hcd *xhci)
+{
+ u32 offset;
+
+ offset = readl(&xhci->cap_regs->db_off) & DBOFF_MASK;
+ xhci->dba = (void __iomem *)xhci->cap_regs + offset;
+ xhci_dbg_trace(xhci, trace_xhci_dbg_init,
+ "Doorbell array is located at offset 0x%x from cap regs base addr", offset);
+}
+
/*
* Initialize memory for HCD and xHC (one-time init).
*
@@ -548,6 +558,9 @@ static int xhci_init(struct usb_hcd *hcd)
/* Set Device Context Base Address Array pointer */
xhci_write_64(xhci, xhci->dcbaa->dma, &xhci->op_regs->dcbaa_ptr);
+ /* Set Doorbell array pointer */
+ xhci_set_doorbell_ptr(xhci);
+
/* Initializing Compliance Mode Recovery Data If Needed */
if (xhci_compliance_mode_recovery_timer_quirk_check()) {
xhci->quirks |= XHCI_COMP_MODE_QUIRK;