[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