[RESEND PATCH v3] usb: xhci: fix lack of short packet event trb handling
Bin Meng
bmeng.cn at gmail.com
Wed Nov 18 08:23:00 CET 2020
On Wed, Nov 18, 2020 at 11:46 AM Ran Wang <ran.wang_1 at 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.wang_1 at 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.cn at gmail.com>
More information about the U-Boot
mailing list