summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/usbdebug.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c
index a5d3c37027..53ba4db53c 100644
--- a/src/lib/usbdebug.c
+++ b/src/lib/usbdebug.c
@@ -411,7 +411,7 @@ static int usbdebug_init_(unsigned ehci_bar, unsigned offset, struct ehci_debug_
u32 cmd, ctrl, status, portsc, hcs_params;
u32 debug_port, new_debug_port = 0, n_ports;
u32 devnum;
- int ret, i;
+ int ret, i, configured;
int loop;
int port_map_tried;
int playtimes = 3;
@@ -569,9 +569,22 @@ try_next_port:
dprintk(BIOS_INFO, "EHCI debug interface enabled.\n");
/* Perform a small write to get the even/odd data state in sync */
+ configured = 0;
+small_write:
ret = dbgp_bulk_write(ehci_debug, USB_DEBUG_DEVNUM, dbgp_desc.bDebugOutEndpoint, "USB\r\n",5);
if (ret < 0) {
dprintk(BIOS_INFO, "dbgp_bulk_write failed: %d\n", ret);
+ if (!configured) {
+ /* Send Set Configure request to device. This is required for FX2
+ (CY7C68013) to transfer from USB state Addressed to Configured,
+ only then endpoints other than 0 are enabled. */
+ if (dbgp_control_msg(ehci_debug, USB_DEBUG_DEVNUM,
+ USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
+ USB_REQ_SET_CONFIGURATION, 1, 0, NULL, 0) >= 0) {
+ configured = 1;
+ goto small_write;
+ }
+ }
ret = -9;
goto err;
}