Hi Peter, On Thu, May 30, 2019 at 5:50 AM Peter Chen <peter.chen@xxxxxxx> wrote: > > An endpoint conflict occurs when the USB is working in device mode > during an isochronous communication. When the endpointA IN direction > is an isochronous IN endpoint, and the host sends an IN token to > endpointA on another device, then the OUT transaction may be missed > regardless the OUT endpoint number. Generally, this occurs when the > device is connected to the host through a hub and other devices are > connected to the same hub. > > The affected OUT endpoint can be either control, bulk, isochronous, or > an interrupt endpoint. After the OUT endpoint is primed, if an IN token > to the same endpoint number on another device is received, then the OUT > endpoint may be unprimed (cannot be detected by software), which causes > this endpoint to no longer respond to the host OUT token, and thus, no > corresponding interrupt occurs. > > There is no good workaround for this issue, the only thing the software > could do is numbering isochronous IN from the highest endpoint since we > have observed most of device number endpoint from the lowest. > > Cc: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx> > Cc: Jun Li <jun.li@xxxxxxx> > Signed-off-by: Peter Chen <peter.chen@xxxxxxx> Should this patch have Cc stable so that it gets applied for older kernels? > diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c > index 829e947cabf5..21c1344bfc42 100644 > --- a/drivers/usb/chipidea/udc.c > +++ b/drivers/usb/chipidea/udc.c > @@ -1622,6 +1622,28 @@ static int ci_udc_pullup(struct usb_gadget *_gadget, int is_on) > static int ci_udc_start(struct usb_gadget *gadget, > struct usb_gadget_driver *driver); > static int ci_udc_stop(struct usb_gadget *gadget); > + > + One blank line is enough.