Kyösti Mälkki (kyosti.malkki@gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3861
-gerrit
commit 5ada3c5aa6152ed939f6ad6a40496f790ea76765 Author: Kyösti Mälkki kyosti.malkki@gmail.com Date: Mon Aug 12 00:09:21 2013 +0300
usbdebug: Only test two possible USB device numbers
After an USB device sees USB bus reset on the bus, it will reset to device number 0. Per the EHCI debug port specification, a debug dongle device may reset to the fixed debug device number of 127 instead.
Thus there is no need to try device numbers from 1 to 126.
Change-Id: I78d58f3dc049cd8c20c6e2aa3a4207ad7e6a6d33 Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- src/lib/usbdebug.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c index 53ba4db..4ac7762 100644 --- a/src/lib/usbdebug.c +++ b/src/lib/usbdebug.c @@ -523,21 +523,27 @@ try_next_port: dbgp_mdelay(100);
/* Find the debug device and make it device number 127 */ - for (devnum = 0; devnum <= 127; devnum++) { + devnum = 0; + do { + memset(&dbgp_desc, 0, sizeof(dbgp_desc)); ret = dbgp_control_msg(ehci_debug, devnum, USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE, USB_REQ_GET_DESCRIPTOR, (USB_DT_DEBUG << 8), 0, &dbgp_desc, sizeof(dbgp_desc)); if (ret > 0) break; - } - if (devnum > 127) { + if (devnum == 0) + devnum = USB_DEBUG_DEVNUM; + else + break; + } while (1); + if (ret < 0) { dprintk(BIOS_INFO, "Could not find attached debug device.\n"); ret = -5; goto err; } - if (ret < 0) { - dprintk(BIOS_INFO, "Attached device is not a debug device.\n"); + if (ret != sizeof(dbgp_desc)) { + dprintk(BIOS_INFO, "Invalid debug device descriptor.\n"); ret = -6; goto err; }