libpayload: usb: dwc2: Always return 'size' transferred bytes for OUT

Seems like our transferred bytes calculation for OUT transfers that span
more than one packet had been wrong, and we just got lucky that we never
noticed it before. The HCTSIZ.xfersize register field we're reading only
counts bytes transferred by the last packet we sent.

OUT endpoints cannot have short transfers -- every transfer should
either finish all bytes we wanted to send or end in a proper error
condition. Therefore, in the absence of an error we can just conclude
that all input bytes have been transferred.

BRANCH=veyron
BUG=chrome-os-partner:35525
TEST=SMSC95xx netboot on Jerry now works.

Change-Id: Id0a127e6919f5786ba05218277705dda1067b8c3
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/294169
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Commit-Queue: David Hendricks <dhendrix@chromium.org>
Tested-by: David Hendricks <dhendrix@chromium.org>
This commit is contained in:
Julius Werner 2015-08-17 18:47:18 -07:00 committed by ChromeOS Commit Bot
commit ea7793fa3d

View file

@ -282,7 +282,7 @@ dwc2_do_xfer(endpoint_t *ep, int size, int pid, ep_dir_t dir,
if (ret >= 0) {
/* Calculate actual transferred length */
transferred = (dir == EPDIR_IN) ? inpkt_length - ret : ret;
transferred = (dir == EPDIR_IN) ? inpkt_length - ret : size;
if (do_copy && (dir == EPDIR_IN))
memcpy(data_buf, aligned_buf, transferred);