On Tue, Nov 05, 2024 at 02:48:50PM +0530, Raju Rangoju wrote: > During the High-Speed Isochronous Audio transfers, xHCI > controller on certain AMD platforms experiences momentary data > loss. This results in Missed Service Errors (MSE) being > generated by the xHCI. > > The root cause of the MSE is attributed to the ISOC OUT endpoint > being omitted from scheduling. This can happen either when an IN > endpoint with a 64ms service interval is pre-scheduled prior to > the ISOC OUT endpoint or when the interval of the ISOC OUT > endpoint is shorter than that of the IN endpoint. Consequently, > the OUT service is neglected when an IN endpoint with a service > interval exceeding 32ms is scheduled concurrently (every 64ms in > this scenario). > > This issue is particularly seen on certain older AMD platforms. > To mitigate this problem, it is recommended to adjust the service > interval of the IN endpoint to exceed 32ms (interval 8). This Do you mean "not to exceed 32 ms"? > adjustment ensures that the OUT endpoint will not be bypassed, > even if a smaller interval value is utilized. > > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Raju Rangoju <Raju.Rangoju@xxxxxxx> > --- > drivers/usb/host/xhci-mem.c | 5 +++++ > drivers/usb/host/xhci-pci.c | 14 ++++++++++++++ > drivers/usb/host/xhci.h | 1 + > 3 files changed, 20 insertions(+) > > diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c > index d2900197a49e..4892bb9afa6e 100644 > --- a/drivers/usb/host/xhci-mem.c > +++ b/drivers/usb/host/xhci-mem.c > @@ -1426,6 +1426,11 @@ int xhci_endpoint_init(struct xhci_hcd *xhci, > /* Periodic endpoint bInterval limit quirk */ > if (usb_endpoint_xfer_int(&ep->desc) || > usb_endpoint_xfer_isoc(&ep->desc)) { > + if ((xhci->quirks & XHCI_LIMIT_ENDPOINT_INTERVAL_9) && > + usb_endpoint_xfer_int(&ep->desc) && > + interval >= 9) { > + interval = 8; > + } This change ensures that the interval is <= 32 ms. Alan Stern