[U-Boot] [PATCH 1/1] USB: usb_control_msg wait for driver ISR to set status.

This patch changes usb_control_msg back to the state prior to commit 48867208444cb2a82e2af9c3249e90b7ed4a1751.
The USB driver ISR routine may update the status.
Signed-off-by: Daniel Hellstrom daniel@gaisler.com --- common/usb.c | 21 ++++++++++++--------- 1 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/common/usb.c b/common/usb.c index eef4b34..f7a5513 100644 --- a/common/usb.c +++ b/common/usb.c @@ -197,16 +197,19 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe, if (timeout == 0) return (int)size;
- if (dev->status != 0) { - /* - * Let's wait a while for the timeout to elapse. - * It has no real use, but it keeps the interface happy. - */ - wait_ms(timeout); - return -1; + /* Wait for status to update until timeout expires, USB driver + * interrupt handler may set the status when the USB operation has + * been completed. + */ + while (timeout--) { + if ( !((volatile unsigned long)dev->status & USB_ST_NOT_PROC) ) + break; + wait_ms(1); } - - return dev->act_len; + if ( dev->status == 0 ) + return dev->act_len; + else + return -1; }
/*-------------------------------------------------------------------

Hi Daniel,
2010/2/1 Daniel Hellstrom daniel@gaisler.com:
This patch changes usb_control_msg back to the state prior to commit 48867208444cb2a82e2af9c3249e90b7ed4a1751.
The USB driver ISR routine may update the status.
Signed-off-by: Daniel Hellstrom daniel@gaisler.com
common/usb.c | 21 ++++++++++++--------- 1 files changed, 12 insertions(+), 9 deletions(-)
Applied to u-boot-usb after fixing several coding style issues.
Kind regards,
Remy
participants (2)
-
Daniel Hellstrom
-
Remy Bohmer