| From dec687bcc93701a13e19a359c687e20c33a382a3 Mon Sep 17 00:00:00 2001 |
| From: Roger Quadros <rogerq@ti.com> |
| Date: Fri, 7 Apr 2017 17:57:12 +0300 |
| Subject: [PATCH 198/286] usb: xhci: bInterval quirk for TI TUSB73x0 |
| |
| As per [1] issue #4, |
| "The periodic EP scheduler always tries to schedule the EPs |
| that have large intervals (interval equal to or greater than |
| 128 microframes) into different microframes. So it maintains |
| an internal counter and increments for each large interval |
| EP added. When the counter is greater than 128, the scheduler |
| rejects the new EP. So when the hub re-enumerated 128 times, |
| it triggers this condition." |
| |
| This results in Bandwidth error when devices with periodic |
| endpoints (ISO/INT) having bInterval > 7 are plugged and |
| unplugged several times on a TUSB73x0 XHCI host. |
| |
| Workaround this issue by limiting the bInterval to 7 |
| (i.e. interval to 6) for High-speed or faster periodic endpoints. |
| |
| [1] - http://www.ti.com/lit/er/sllz076/sllz076.pdf |
| |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Roger Quadros <rogerq@ti.com> |
| Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| (cherry picked from commit 69307ccb9ad7ccb653e332de68effdeaaab6907d) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/usb/host/xhci-pci.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/usb/host/xhci-pci.c |
| +++ b/drivers/usb/host/xhci-pci.c |
| @@ -217,6 +217,9 @@ static void xhci_pci_quirks(struct devic |
| if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241) |
| xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7; |
| |
| + if (pdev->vendor == PCI_VENDOR_ID_TI && pdev->device == 0x8241) |
| + xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_7; |
| + |
| if (xhci->quirks & XHCI_RESET_ON_RESUME) |
| xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, |
| "QUIRK: Resetting on resume"); |