On Fri, 2021-11-26 at 19:09 +0800, Neal Liu wrote: > > diff --git a/drivers/usb/gadget/udc/aspeed-vhub/ep0.c > b/drivers/usb/gadget/udc/aspeed-vhub/ep0.c > index 74ea36c19b1e..bea9cbb191a2 100644 > --- a/drivers/usb/gadget/udc/aspeed-vhub/ep0.c > +++ b/drivers/usb/gadget/udc/aspeed-vhub/ep0.c > @@ -251,6 +251,13 @@ static void ast_vhub_ep0_do_receive(struct > ast_vhub_ep *ep, struct ast_vhub_req > len = remain; > rc = -EOVERFLOW; > } > + > + /* HW return wrong data len */ > + if (len < ep->ep.maxpacket && len != remain) { > + EPDBG(ep, "using expected data len instead\n"); > + len = remain; > + } > + Wow, that is a nasty hw bug ! Patch looks good, I had to swap some of that logic back into my brain but it looks like it won't break any normal case :-) Acked-by: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> Cheers, Ben.