On 05/11/2012 03:53 AM, Quach, Brian wrote: > Hello, > > I work for Texas Instruments on the group that develops our USB 3.0 products. Recently, we discovered a timing issue in our USB3.0 re-drivers that can delay the negotiation between a device and the host past the usual handshake timeout, and if that happens on the first insertion, the host controller port will enter in Compliance mode as per the xHCI spec. The host controller does not generate a Port Status Change (PSC) event as a result of a transition to compliance mode so the only way method to detect and resolve the issue is to periodically poll the port to check for compliance mode and issue a Warm Reset to recover the port. This polling is only required if the port had never previously entered U0. > Does xHCI driver see this transition in GetPortStatus when it occurs? > We implemented a small app to monitor the device's PORTSC registers and to issue a warm reset whenever we find the port is in compliance mode. Although this seems to work-around the issue, we believe this should be implemented on the driver source code for robustness. > > Due to your bandwidth limitations, I was told that we should be making our own patches and submitting them to you for integration into the mainline. Based on the information I provided about the issue, can you provide any advice on how/where the source code the patch should be implemented so that it will be acceptable for the mainline and whether it should be a menuconfig option. > Currently USB3.0 driver support warm reset and it will issue a warm reset when detects a port in SS.Inactive state. See the code from drivers/usb/core/hub.c:hub_events(): /* Warm reset a USB3 protocol port if it's in * SS.Inactive state. */ if (hub_is_superspeed(hub->hdev) && (portstatus & USB_PORT_STAT_LINK_STATE) == USB_SS_PORT_LS_SS_INACTIVE) { dev_dbg(hub_dev, "warm reset port %d\n", i); hub_port_reset(hub, i, NULL, HUB_BH_RESET_TIME, true); } You can perform similar steps for a port in compliance mode if xHCI driver can detect the port status. Thanks, Andiry -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html