On Thu, May 30, 2019 at 10:14 PM Fabio Estevam <festevam@xxxxxxxxx> wrote: > > 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. Thanks, both. Will be addressed at next version. Peter