
On Thu, Mar 10, 2016 at 3:46 PM, Steve Rae srae@broadcom.com wrote:
... updated the subject line, was: Re: [U-Boot][PATCH v3 1/3] fastboot: OUT transaction length must be aligned to wMaxPacketSize
-static unsigned int rx_bytes_expected(void) +static unsigned int rx_bytes_expected(unsigned int maxpacket) { int rx_remain = download_size - download_bytes;
int rem = 0; if (rx_remain < 0) return 0; if (rx_remain > EP_BUFFER_SIZE) return EP_BUFFER_SIZE;
if (rx_remain < maxpacket) {
rx_remain = maxpacket;
} else if (rx_remain % maxpacket != 0) {
rem = rx_remain % maxpacket;
rx_remain = rx_remain + (maxpacket - rem);
}
Is anyone else having problems with this code??? I need to remove these six (newly added) lines in order to get my boards to work -- otherwise, they just "hang" druing the download phase of "fastboot flash"....
Thanks in advance, Steve
MORE INFO:
I added some logs to see what is happening:
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index f87aae7..824430f 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -427,12 +427,17 @@ static unsigned int rx_bytes_expected(unsigned int maxpacket) return 0; if (rx_remain > EP_BUFFER_SIZE) return EP_BUFFER_SIZE; +#if 1 if (rx_remain < maxpacket) { + printf("\nVALIDATE: %s: %d (%d) %d\n", __func__, rx_remain, maxpacket, maxpacket); rx_remain = maxpacket; } else if (rx_remain % maxpacket != 0) { rem = rx_remain % maxpacket; + printf("\nVALIDATE: %s: %d (%d) %d %d\n", __func__, rx_remain, maxpacket, rem, rx_remain + (maxpacket - rem)); rx_remain = rx_remain + (maxpacket - rem); } +#endif + printf("\nVALIDATE: using %d\n", rx_remain); return rx_remain; }
RESULTS:
In the case that fails, (#if 1), it reports: VALIDATE: rx_bytes_expected: 812 (512) 300 1024 VALIDATE: using 1024
In the case that works (#if 0), it reports: VALIDATE: using 812
To me, it looks like there is only 812 bytes more to be downloaded, but this code modifies that value to expect 1024 bytes; and I guess it hangs after the 812 have been received (while waiting for the rest of the 1024)....
Please advise!