Re: [RFTv3 PATCH] xhci: rework cycle bit checking for new dequeue pointers

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

 



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;

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

  Powered by Linux