Other Parts Discussed in Thread: TUSB217, TPS2544, TUSB217-Q1
We have a device using the AM3352 (an Electronic Logging Device aka ELD), with an external USB host port we use to connect to a camera (also our hardware).
We use the AM3352 USB1 for the external port. It goes through a (TI) TPS2544 USB charging port controller and power switch, then through a (TI) TUSB217 USB High Speed signal conditioner. The cable to our camera is built in to the camera. It is 2m long, and the port/cable passes both near and far-end eye tests.
We use the AM3352 USB0 internally for a cell modem. This connection is not at issue here.
We occasionally observe a lock-up of USB communication, fixable by reboot of the ELD, or by disabling and re-enabling the USB1 port (turning off the EN of the TPS2544).
Analysis with a TotalPhase USB480 POWER USB protocol analyzer indicates "Invalid PID Sequence" errors when the lockup starts.

The logs when this starts:
Mar 24 18:32:35 lbb-1 ktcamd[621]: [HubbleXU_Control:281] UVC ioctl error EIO (bad pipe), retrying
Mar 24 18:32:35 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:36 lbb-1 ktcamd[621]: [HubbleXU_Control:291] UVC ioctl error (5) Input/output error. Offset: 256, DataSize: 351, XULen: 128, XU: 23
Mar 24 18:32:36 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:37 lbb-1 ktcamd[621]: [HubbleXU_Control:281] UVC ioctl error EIO (bad pipe), retrying
Mar 24 18:32:37 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:38 lbb-1 ktcamd[621]: [HubbleXU_Control:291] UVC ioctl error (5) Input/output error. Offset: 0, DataSize: 351, XULen: 128, XU: 23
Mar 24 18:32:38 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:39 lbb-1 ktcamd[621]: [HubbleXU_Control:281] UVC ioctl error EIO (bad pipe), retrying
Mar 24 18:32:39 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:40 lbb-1 ktcamd[621]: [HubbleXU_Control:291] UVC ioctl error (5) Input/output error. Offset: 128, DataSize: 351, XULen: 128, XU: 23
Mar 24 18:32:40 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:41 lbb-1 ktcamd[621]: [HubbleXU_Control:281] UVC ioctl error EIO (bad pipe), retrying
Mar 24 18:32:41 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:42 lbb-1 ktcamd[621]: [HubbleXU_Control:291] UVC ioctl error (5) Input/output error. Offset: 256, DataSize: 351, XULen: 128, XU: 23
Mar 24 18:32:42 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:43 lbb-1 ktcamd[621]: [HubbleXU_Control:281] UVC ioctl error EIO (bad pipe), retrying
Mar 24 18:32:43 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
Mar 24 18:32:44 lbb-1 ktcamd[621]: [HubbleXU_Control:291] UVC ioctl error (5) Input/output error. Offset: 0, DataSize: 351, XULen: 128, XU: 23
Mar 24 18:32:44 lbb-1 kernel: uvcvideo: Failed to query (SET_CUR) UVC control 23 on unit 10: -110 (exp. 128).
ktcamd is our camera management daemon. "Hubble" is an internal code name for the camera. These messages will continue whenever ktcamd attempts to control the camera. Restarting the camera does not recover the system. Removing the camera and re-inserting it to the USB port does cause a new enumeration, but the errors resume shortly thereafter. Restarting the ELD does fix the error.
We've found that enforcing a 5ms delay between XU control messages seems to prevent this issue.
Does TI have any suggestions?