@ -970,23 +970,24 @@ static int usb_setup_descriptor(struct usb_device *dev, bool do_read)
dev - > epmaxpacketin [ 0 ] = dev - > descriptor . bMaxPacketSize0 ;
dev - > epmaxpacketout [ 0 ] = dev - > descriptor . bMaxPacketSize0 ;
if ( do_read ) {
if ( do_read & & dev - > speed = = USB_SPEED_FULL ) {
int err ;
/*
* Validate we ' ve received only at least 8 bytes , not that we ' ve
* received the entire descriptor . The reasoning is :
* - The code only uses fields in the first 8 bytes , so that ' s all we
* need to have fetched at this stage .
* - The smallest maxpacket size is 8 bytes . Before we know the actual
* maxpacket the device uses , the USB controller may only accept a
* single packet . Consequently we are only guaranteed to receive 1
* packet ( at least 8 bytes ) even in a non - error case .
* Validate we ' ve received only at least 8 bytes , not that
* we ' ve received the entire descriptor . The reasoning is :
* - The code only uses fields in the first 8 bytes , so
* that ' s all we need to have fetched at this stage .
* - The smallest maxpacket size is 8 bytes . Before we know
* the actual maxpacket the device uses , the USB controller
* may only accept a single packet . Consequently we are only
* guaranteed to receive 1 packet ( at least 8 bytes ) even in
* a non - error case .
*
* At least the DWC2 controller needs to be programmed with the number
* of packets in addition to the number of bytes . A request for 64
* bytes of data with the maxpacket guessed as 64 ( above ) yields a
* request for 1 packet .
* At least the DWC2 controller needs to be programmed with
* the number of packets in addition to the number of bytes .
* A request for 64 bytes of data with the maxpacket guessed
* as 64 ( above ) yields a request for 1 packet .
*/
err = get_descriptor_len ( dev , 64 , 8 ) ;
if ( err )
@ -1009,7 +1010,7 @@ static int usb_setup_descriptor(struct usb_device *dev, bool do_read)
dev - > maxpacketsize = PACKET_SIZE_64 ;
break ;
default :
printf ( " usb_new_device : invalid max packet size\n " ) ;
printf ( " %s : invalid max packet size\n " , __func__ ) ;
return - EIO ;
}