[PATCH 1/2] usb: xhci-mtk: relax TT periodic bandwidth allocation
Chunfeng Yun
chunfeng.yun at mediatek.com
Tue Aug 2 00:59:45 PDT 2022
Currently uses the worst case byte budgets on full-speed bus bandwidth,
for example, for an isochronos IN endpoint with 192 bytes budget, it
will consume the whole 5 u-frames(188 * 5) while the actual full-speed
bus budget should be just 192 bytes.
This patch changes the low/full-speed bandwidth allocation logic to use
"approximate" best case budget for lower speed bandwidth management.
For the same endpoint from the above example, the approximate best case
budget is now reduced to (188 * 2) bytes.
Without this patch, many usb audio headsets with 3 interfaces (audio
input, audio output, and HID) cannot be configured on xhci-mtk.
Signed-off-by: Chunfeng Yun <chunfeng.yun at mediatek.com>
---
drivers/usb/host/xhci-mtk-sch.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/host/xhci-mtk-sch.c b/drivers/usb/host/xhci-mtk-sch.c
index 06a6b19acaae..a17bc584ee99 100644
--- a/drivers/usb/host/xhci-mtk-sch.c
+++ b/drivers/usb/host/xhci-mtk-sch.c
@@ -425,7 +425,6 @@ static int check_fs_bus_bw(struct mu3h_sch_ep_info *sch_ep, int offset)
static int check_sch_tt(struct mu3h_sch_ep_info *sch_ep, u32 offset)
{
- u32 extra_cs_count;
u32 start_ss, last_ss;
u32 start_cs, last_cs;
@@ -461,18 +460,12 @@ static int check_sch_tt(struct mu3h_sch_ep_info *sch_ep, u32 offset)
if (last_cs > 7)
return -ESCH_CS_OVERFLOW;
- if (sch_ep->ep_type == ISOC_IN_EP)
- extra_cs_count = (last_cs == 7) ? 1 : 2;
- else /* ep_type : INTR IN / INTR OUT */
- extra_cs_count = 1;
-
- cs_count += extra_cs_count;
if (cs_count > 7)
cs_count = 7; /* HW limit */
sch_ep->cs_count = cs_count;
- /* one for ss, the other for idle */
- sch_ep->num_budget_microframes = cs_count + 2;
+ /* ss, idle are ignored */
+ sch_ep->num_budget_microframes = cs_count;
/*
* if interval=1, maxp >752, num_budge_micoframe is larger
--
2.18.0
More information about the Linux-mediatek
mailing list