Just an update. I added the TRUST_TX_LENGTH quirk for my chipset and the remaining errors have gone away. The combination of the RTF and this together seems to fix a lot. The only way I can reproduce anything similar to the problems I had before is to unplug the USB tuner while its in use! <<if it hurts when you do that, don't do that>> However, it doesn't "screw up" anything internally. I needed a reboot to get USB functioning before, and I wasn't unplugging anything when it was live. Now I can just plug it back in and restart the application and it works fine like nothing ever happened. If anyone wants to see the log as to what it says when I unplug it, I saved it. Should I submit a patch for the TRUST_TX_LENGTH quirk? Its PCI vendor 1022 (AMD), and the XHCI controller is 7814. It shows up as rev 09, so I wrote it to only set the quirk for this revision. I don't know if other revisions other than mine need it. In fact, I'll just attach it here. On Wed, Jul 30, 2014 at 8:04 AM, Evan Langlois <uudruid74@xxxxxxxxx> wrote: > I'm not getting this in 3.16.0-rc7. Function must have been removed. > > On Wed, Jul 30, 2014 at 7:24 AM, Maciej Puzio <mx34567@xxxxxxxxx> wrote: >> Apologies, my positive report was somewhat premature. I had to apply >> the patch manually to 3.2.61, and I missed the deletion of >> find_trb_seg function. After applying the full patch, xhci-ring.c does >> not compile, due to call to find_trb_seg in xhci_cmd_to_noop: >> >> drivers/usb/host/xhci-ring.c: In function ‘xhci_cmd_to_noop’: >> drivers/usb/host/xhci-ring.c:1201:2: error: implicit declaration of >> function ‘find_trb_seg’ [-Werror=implicit-function-declaration]
--- linux-3.16-rc7/drivers/usb/host/xhci-pci.c 2014-07-27 14:41:55.000000000 -0500 +++ linux-3.16-rc7-work/drivers/usb/host/xhci-pci.c 2014-07-30 08:16:38.171464294 -0500 @@ -32,6 +32,8 @@ #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 #define PCI_DEVICE_ID_FRESCO_LOGIC_FL1400 0x1400 +#define PCI_DEVICE_ID_AMD_FCH_XHCI 0x7814 + #define PCI_VENDOR_ID_ETRON 0x1b6f #define PCI_DEVICE_ID_ASROCK_P67 0x7023 @@ -98,6 +100,18 @@ if (pdev->vendor == PCI_VENDOR_ID_AMD && xhci->hci_version == 0x96) xhci->quirks |= XHCI_AMD_0x96_HOST; + if (pdev->vendor == PCI_VENDOR_ID_AMD && + pdev->device == PCI_DEVICE_ID_AMD_FCH_XHCI && + pdev->revision == 0x09) { + /* Should this go in pci_quirks.c ? */ + xhci->quirks |= XHCI_TRUST_TX_LENGTH; + xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, + "QUIRK: AMD XHCI revision %u " + "needs TRUST_TX_LENGTH quirk", + pdev->revision); + printk (KERN_DEBUG "QUIRK: Enable AMD TRUST_TX_LENGTH fix\n"); + } + /* AMD PLL quirk */ if (pdev->vendor == PCI_VENDOR_ID_AMD && usb_amd_find_chipset_info()) xhci->quirks |= XHCI_AMD_PLL_FIX;