RE: Workaround required for Texas Instruments USB3 re-driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>
> 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
>
>

Hello Andiry,

We really appreciate your feedback. We will confirm this and get back to you ASAP.

Thanks,
Jorge.

--
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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux