davinci, dm365, usb: timeoutvalue
Hello Thomas,
I just debugging some usb issues on an dm365 based board. I noticed that if no usb device is connected to the board, the "usb start" command does have a long timeout (also have access to an dm365evm board, same behaviour). Found the reason for this big timeout here:
./drivers/usb/musb/musb_hcd.c usb_lowlevel_init():
timeout = musb_cfg.timeout;
while (timeout--)
if (readb(&musbr->devctl) & MUSB_DEVCTL_HM)
break;with ./drivers/usb/musb/davinci.:
/* MUSB platform configuration */
struct musb_config musb_cfg = {
.regs = (struct musb_regs *)MENTOR_USB0_BASE,
.timeout = DAVINCI_USB_TIMEOUT,
.musb_speed = 0,};
and ./drivers/usb/musb/davinci.h:
#define DAVINCI_USB_TIMEOUT 0x3FFFFFF
Why is this DAVINCI_USB_TIMEOUT value so high? This could be shorter, or are there some reasons for such a long timeout?
Thanks!
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Dear Heiko Schocher,
Quoted 7 lines · In message <[email protected]> you wrote:
Hello Thomas,
I just debugging some usb issues on an dm365 based board. I noticed that if no usb device is connected to the board, the "usb start" command does have a long timeout (also have access to an dm365evm board, same behaviour). Found the reason for this big timeout here:
Quoted 5 lines
./drivers/usb/musb/musb_hcd.cusb_lowlevel_init():timeout = musb_cfg.timeout; while (timeout--) if (readb(&musbr->devctl) & MUSB_DEVCTL_HM) break;
Argh...
Quoted 4 lines
#define
DAVINCI_USB_TIMEOUT0x3FFFFFFWhy is this
DAVINCI_USB_TIMEOUTvalue so high? This could be shorter, or are there some reasons for such a long timeout?
Actually this means that the actual amount of time spent in this loop is not defined, and depends on the actual speed of the CPU, RAM, etc.
The timeout value should be changed into a time value (instead of cycle count), and the poll loop should be changed accordingly, for example like this:
#define DAVINCI_USB_TIMEOUT 250 /* 250 milliseconds */
...
while (timeout--) {
if (readb(&musbr->devctl) & MUSB_DEVCTL_HM)
break;
udelay (1000);
}Best regards,
Wolfgang Denk
Signature · 6 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de "Today's robots are very primitive, capable of understanding only a few simple instructions such as 'go left', 'go right', and 'build car'." - John Sladek