Message ID | 20220805060328.6189-1-chunfeng.yun@mediatek.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v2,1/2] usb: xhci-mtk: relax TT periodic bandwidth allocation | expand |
On Fri, Aug 05, 2022 at 02:03:27PM +0800, Chunfeng Yun wrote: > Currently uses the worst case byte budgets on FS/LS bus bandwidth, > for example, for an isochronos IN endpoint with 192 bytes budget, it > will consume the whole 5 uframes(188 * 5) while the actual FS bus > budget should be just 192 bytes. It cause that many usb audio headsets > with 3 interfaces (audio input, audio output, and HID) cannot be > configured. > To improve it, changes to use "approximate" best case budget for FS/LS > bandwidth management. For the same endpoint from the above example, > the approximate best case budget is now reduced to (188 * 2) bytes. > > Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> > --- > v2: change commit message > --- > 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 > This doesn't apply to my tree without fuzz, and when I force it, I get a build error. Can you please rebase against 6.0-rc1 and resend? thanks, greg k-h
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;
Currently uses the worst case byte budgets on FS/LS bus bandwidth, for example, for an isochronos IN endpoint with 192 bytes budget, it will consume the whole 5 uframes(188 * 5) while the actual FS bus budget should be just 192 bytes. It cause that many usb audio headsets with 3 interfaces (audio input, audio output, and HID) cannot be configured. To improve it, changes to use "approximate" best case budget for FS/LS bandwidth management. For the same endpoint from the above example, the approximate best case budget is now reduced to (188 * 2) bytes. Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> --- v2: change commit message --- drivers/usb/host/xhci-mtk-sch.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) @@ -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