[U-Boot] MUSB driver: Timeout is never detected as the while loop does not end

Submitted by Matej Frančeškin on Aug. 30, 2012, 7:24 a.m.

Details

Message ID 6AB4CEAFA8401D4B880B2C9D8BEBA82D3533D5BD@mail.hermes.si
State Accepted
Delegated to: Marek Vasut
Headers show

Commit Message

Matej Frančeškin Aug. 30, 2012, 7:24 a.m.
Timeout variable is decremented once more when while condition is not met.
Following "if" does not detect correctly that timeout has occurred.
Because of this bug the "usb start" command on AM335X-EVM board did not detect correctly that USB device was not attached.

	timeout = musb_cfg.timeout;
	while (timeout--)
		if (readb(&musbr->devctl) & MUSB_DEVCTL_HM)
 			break;
	/* if musb core is not in host mode, then return */
	if (!timeout)
		return -1;


Signed-off-by: Matej Franceskin <Matej.Franceskin@comtrade.com>
CC: Marek Vasut <matex@denx.de>?

---
 drivers/usb/musb/musb_hcd.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

	if (!timeout)
		return -1;

Comments

Tom Rini Aug. 30, 2012, 6:18 p.m.
On Thu, Aug 30, 2012 at 09:24:39AM +0200, Matej Fran?e?kin wrote:

> Timeout variable is decremented once more when while condition is not met.
> Following "if" does not detect correctly that timeout has occurred.
> Because of this bug the "usb start" command on AM335X-EVM board did not detect correctly that USB device was not attached.
> 
> 	timeout = musb_cfg.timeout;
> 	while (timeout--)
> 		if (readb(&musbr->devctl) & MUSB_DEVCTL_HM)
>  			break;
> 	/* if musb core is not in host mode, then return */
> 	if (!timeout)
> 		return -1;
> 
> 
> Signed-off-by: Matej Franceskin <Matej.Franceskin@comtrade.com>
> CC: Marek Vasut <matex@denx.de>?

Acked-by: Tom Rini <trini@ti.com>
Marek Vasut Aug. 30, 2012, 6:35 p.m.
Dear Matej Frančeškin,

> Timeout variable is decremented once more when while condition is not met.
> Following "if" does not detect correctly that timeout has occurred.
> Because of this bug the "usb start" command on AM335X-EVM board did not
> detect correctly that USB device was not attached.
> 
> 	timeout = musb_cfg.timeout;
> 	while (timeout--)
> 		if (readb(&musbr->devctl) & MUSB_DEVCTL_HM)
>  			break;
> 	/* if musb core is not in host mode, then return */
> 	if (!timeout)
> 		return -1;
> 
> 
> Signed-off-by: Matej Franceskin <Matej.Franceskin@comtrade.com>
> CC: Marek Vasut <matex@denx.de>?

Applied, thanks

Best regards,
Marek Vasut

Patch hide | download patch | download mbox

diff --git a/drivers/usb/musb/musb_hcd.c b/drivers/usb/musb/musb_hcd.c
index 2df52c1..8d44c46 100644
--- a/drivers/usb/musb/musb_hcd.c
+++ b/drivers/usb/musb/musb_hcd.c
@@ -1113,7 +1113,7 @@  int usb_lowlevel_init(void)
 	 * should be a usb device connected.
 	 */
 	timeout = musb_cfg.timeout;
-	while (timeout--)
+	while (--timeout)
 		if (readb(&musbr->devctl) & MUSB_DEVCTL_HM)
 			break;
	/* if musb core is not in host mode, then return */