On Wed, Nov 18, 2020 at 11:46 AM Ran Wang <ran.wan...@nxp.com> wrote: > > For bulk IN transfer, the codes will set ISP flag to request event TRB > being generated by xHC for case of short packet. So for the case of
Looks you missed this one: for the case of > buffer-cross-64K-boundary (which we will divide payload and enqueuqe > more than 1 transfer TRB), if the first TRB ends up with a short packet > condition it will trigger an short packet code transfer event per that > flag and cause more than 1 event TRB generated for this transfer. > > However, current codes will only handle the first transfer event TRB > then mark current transfer completed, causing next transfer > failure due to event TRB mis-match. > > Such issue has been observed on some Layerscape platforms (LS1028A, > LS1088A, etc) with USB ethernet device. > > This patch adds a loop to make sure the event TRB for last transfer TRB > has been handled in time. > > Signed-off-by: Ran Wang <ran.wan...@nxp.com> > --- > Change in v3: > - Update commit message according to v2 feedback . > - Replace (void *) with (uintptr_t) to fix below armv7 compile warning: > ... > drivers/usb/host/xhci-ring.c: In function 'xhci_bulk_tx': > drivers/usb/host/xhci-ring.c:726:6: warning: cast to pointer from integer of > different size [-Wint-to-pointer-cast] > 726 | if ((void *)le64_to_cpu(event->trans_event.buffer) != > last_transfer_trb_addr) { > | ^ > ... > > > Change in v2: > - Re-write commit message to describe context more clearly. > - Add prefix 'le64_to_cpu' for 'event->trans_event.buffer'. > > drivers/usb/host/xhci-ring.c | 18 +++++++++++++++--- > 1 file changed, 15 insertions(+), 3 deletions(-) > Looks good to me otherwise: Reviewed-by: Bin Meng <bmeng...@gmail.com>