mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 01:11:14 +00:00
d91f38a99e
Removed upstreamed: generic/backport-6.1/701-v6.5-net-bgmac-postpone-turning-IRQs-off-to-avoid-SoC-han.patch[1] generic/pending-6.1/160-workqueue-fix-enum-type-for-gcc-13.patch[2] qualcommax/patches-6.1/0022-v6.5-soc-qcom-mdt_loader-Fix-unconditional-call-to-scm_pa.patch[3] Manually rebased: bcm27xx/patches-6.1/950-0359-xhci-quirks-add-link-TRB-quirk-for-VL805.patch bcm27xx/patches-6.1/950-0362-usb-xhci-add-VLI_TRB_CACHE_BUG-quirk.patch bcm27xx/patches-6.1/950-0390-usb-xhci-add-a-quirk-for-Superspeed-bulk-OUT-transfe.patch bcm27xx/patches-6.1/950-0469-usb-xhci-add-XHCI_VLI_HUB_TT_QUIRK.patch bcm53xx/patches-6.1/180-usb-xhci-add-support-for-performing-fake-doorbell.patch All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.40&id=685b57a1221c38ec8b456f968264d2496715820c 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.40&id=2d57a1590f4d8c516f5aaf8fd5bb4f52d67275d8 3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.1.40&id=33f8dff6e1cbba5c2ec85fa5649c0a759a7e685c Build system: x86/64, filogic/xiaomi_redmi-router-ax6000-ubootmod Build-tested: x86/64, filogic/xiaomi_redmi-router-ax6000-ubootmod Run-tested: x86/64 Signed-off-by: John Audia <therealgraysky@proton.me>
61 lines
2.5 KiB
Diff
61 lines
2.5 KiB
Diff
From 44bfc1e281e081d9ddd0e633ed2dd73c969333f4 Mon Sep 17 00:00:00 2001
|
|
From: Jonathan Bell <jonathan@raspberrypi.org>
|
|
Date: Tue, 13 Aug 2019 15:53:29 +0100
|
|
Subject: [PATCH] xhci: Use more event ring segment table entries
|
|
|
|
Users have reported log spam created by "Event Ring Full" xHC event
|
|
TRBs. These are caused by interrupt latency in conjunction with a very
|
|
busy set of devices on the bus. The errors are benign, but throughput
|
|
will suffer as the xHC will pause processing of transfers until the
|
|
event ring is drained by the kernel. Expand the number of event TRB slots
|
|
available by increasing the number of event ring segments in the ERST.
|
|
|
|
Controllers have a hardware-defined limit as to the number of ERST
|
|
entries they can process, so make the actual number in use
|
|
min(ERST_MAX_SEGS, hw_max).
|
|
|
|
Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
|
---
|
|
drivers/usb/host/xhci-mem.c | 8 +++++---
|
|
drivers/usb/host/xhci.h | 4 ++--
|
|
2 files changed, 7 insertions(+), 5 deletions(-)
|
|
|
|
--- a/drivers/usb/host/xhci-mem.c
|
|
+++ b/drivers/usb/host/xhci-mem.c
|
|
@@ -2522,9 +2522,11 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
|
* Event ring setup: Allocate a normal ring, but also setup
|
|
* the event ring segment table (ERST). Section 4.9.3.
|
|
*/
|
|
+ val2 = 1 << HCS_ERST_MAX(xhci->hcs_params2);
|
|
+ val2 = min_t(unsigned int, ERST_MAX_SEGS, val2);
|
|
xhci_dbg_trace(xhci, trace_xhci_dbg_init, "// Allocating event ring");
|
|
- xhci->event_ring = xhci_ring_alloc(xhci, ERST_NUM_SEGS, 1, TYPE_EVENT,
|
|
- 0, flags);
|
|
+ xhci->event_ring = xhci_ring_alloc(xhci, val2, 1, TYPE_EVENT,
|
|
+ 0, flags);
|
|
if (!xhci->event_ring)
|
|
goto fail;
|
|
if (xhci_check_trb_in_td_math(xhci) < 0)
|
|
@@ -2537,7 +2539,7 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
|
/* set ERST count with the number of entries in the segment table */
|
|
val = readl(&xhci->ir_set->erst_size);
|
|
val &= ERST_SIZE_MASK;
|
|
- val |= ERST_NUM_SEGS;
|
|
+ val |= val2;
|
|
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
|
|
"// Write ERST size = %i to ir_set 0 (some bits preserved)",
|
|
val);
|
|
--- a/drivers/usb/host/xhci.h
|
|
+++ b/drivers/usb/host/xhci.h
|
|
@@ -1671,8 +1671,8 @@ struct urb_priv {
|
|
* Each segment table entry is 4*32bits long. 1K seems like an ok size:
|
|
* (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table,
|
|
* meaning 64 ring segments.
|
|
- * Initial allocated size of the ERST, in number of entries */
|
|
-#define ERST_NUM_SEGS 1
|
|
+ * Maximum number of segments in the ERST */
|
|
+#define ERST_MAX_SEGS 8
|
|
/* Poll every 60 seconds */
|
|
#define POLL_TIMEOUT 60
|
|
/* Stop endpoint command timeout (secs) for URB cancellation watchdog timer */
|