firewire: ohci: enable MSI for VIA VT6315 rev 1, drop cycle timer quirk
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Tue, 15 Apr 2014 23:08:08 +0000 (01:08 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Thu, 29 May 2014 17:02:22 +0000 (19:02 +0200)
Commit af0cdf494781 "firewire: ohci: fix regression with VIA VT6315,
disable MSI" acted upon a report against VT6315 rev 0:
http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-12/msg02301.html
$ lspci -nn
VIA Technologies, Inc. VT6315 Series Firewire Controller [1106:3403]

I now got a card with
$ lspci -nn
VIA Technologies, Inc. VT6315 Series Firewire Controller [1106:3403] (rev 01)
and this works fine with MSI enabled.

Second, I tested this VT6315 rev 1 without CYCLE_TIMER quirk flag using
http://me.in-berlin.de/~s5r6/linux1394/utils/test_cycle_time_v20100125.c
and found that this chip does in fact access the cycle timer atomically.

Things I can't test because I don't have the hardware:
  - whether VT6315 rev 0 really needs QUIRK_CYCLE_TIMER,
  - whether the VT6320 PCI device needs QUIRK_CYCLE_TIMER,
  - whether the VT6325 and VT6330 PCIe devices need QUIRK_CYCLE_TIMER
    and QUIRK_NO_MSI.

Hence, just add a whitelist entry specifically for VT6315 rev >= 1
without any quirk flags.  Before this entry we need an extra entry to
catch VT6315 rev <= 0 due to how our ID matching logic works.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/firewire/ohci.c

index 8db66321956068701cde997e0bc25e167e781eb3..5b0934d0d968e34486f9d20368926a3e19ad8329 100644 (file)
@@ -282,6 +282,7 @@ static char ohci_driver_name[] = KBUILD_MODNAME;
 #define PCI_DEVICE_ID_TI_TSB82AA2      0x8025
 #define PCI_DEVICE_ID_VIA_VT630X       0x3044
 #define PCI_REV_ID_VIA_VT6306          0x46
+#define PCI_DEVICE_ID_VIA_VT6315       0x3403
 
 #define QUIRK_CYCLE_TIMER              0x1
 #define QUIRK_RESET_PACKET             0x2
@@ -334,6 +335,12 @@ static const struct {
        {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT630X, PCI_REV_ID_VIA_VT6306,
                QUIRK_CYCLE_TIMER | QUIRK_IR_WAKE},
 
+       {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT6315, 0,
+               QUIRK_CYCLE_TIMER | QUIRK_NO_MSI},
+
+       {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT6315, PCI_ANY_ID,
+               0},
+
        {PCI_VENDOR_ID_VIA, PCI_ANY_ID, PCI_ANY_ID,
                QUIRK_CYCLE_TIMER | QUIRK_NO_MSI},
 };