From mboxrd@z Thu Jan 1 00:00:00 1970 From: Orjan Friberg Date: Mon, 4 Jul 2011 16:37:34 +0200 Subject: [U-Boot] [PATCH] MUSB timeout broken Message-ID: <4E11D02E.7030803@flatfrog.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de The following construct (musb_hcd.c, usb_lowlevel_init) timeout = musb_cfg.timeout; while (timeout--) if (readb(&musbr->devctl) & MUSB_DEVCTL_HM) break; will leave timeout == -1 when the timeout is reached, hence the timeout detecting code that follows will not trigger: /* if musb core is not in host mode, then return */ if (!timeout) return -1; Without the patch below, doing a 'usb reset' without a device connected makes it impossible to discover connected devices later. I have not investigated why this happens since the timeout logic was broken (and correcting that fixed the issue at hand). Changed to pre-decrement since I assume the timeout value is not *that* exact. Thanks, Orjan diff --git a/drivers/usb/musb/musb_hcd.c b/drivers/usb/musb/musb_hcd.c index 974bb31..adcf7f7 100644 --- a/drivers/usb/musb/musb_hcd.c +++ b/drivers/usb/musb/musb_hcd.c @@ -1114,7 +1114,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; -- Orjan Friberg FlatFrog Laboratories AB