xHCI 1.0: Control endpoint average TRB length field set
authorAndiry Xu <andiry.xu@amd.com>
Thu, 5 May 2011 10:13:58 +0000 (18:13 +0800)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 9 May 2011 16:34:47 +0000 (09:34 -0700)
xHCI 1.0 specification indicates that software should set Average TRB Length
to '8' for control endpoints.

Signed-off-by: Andiry Xu <andiry.xu@amd.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/host/xhci-mem.c

index a4fc4d92938581fef8cc0c39b610901d777d9932..543833b9dbad94a5fdc8e46ea04b32d47f79989b 100644 (file)
@@ -1246,8 +1246,15 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
         * including link TRBs, No-op TRBs, and Event data TRBs.  Since we don't
         * use Event Data TRBs, and we don't chain in a link TRB on short
         * transfers, we're basically dividing by 1.
+        *
+        * xHCI 1.0 specification indicates that the Average TRB Length should
+        * be set to 8 for control endpoints.
         */
-       ep_ctx->tx_info |= cpu_to_le32(AVG_TRB_LENGTH_FOR_EP(max_esit_payload));
+       if (usb_endpoint_xfer_control(&ep->desc) && xhci->hci_version == 0x100)
+               ep_ctx->tx_info |= cpu_to_le32(AVG_TRB_LENGTH_FOR_EP(8));
+       else
+               ep_ctx->tx_info |=
+                        cpu_to_le32(AVG_TRB_LENGTH_FOR_EP(max_esit_payload));
 
        /* FIXME Debug endpoint context */
        return 0;