serial/8250_pci: init-quirk msi support for kt serial controller
authorDan Williams <dan.j.williams@intel.com>
Tue, 22 Nov 2011 21:41:29 +0000 (13:41 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 27 Nov 2011 04:11:20 +0000 (20:11 -0800)
The semantics of UPF_IIR_ONCE (once per serial irq) are only guaranteed
if the kt irq is not shared (once per serial isr in the shared case ==
potentially unwanted reads of the IIR).

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/tty/serial/8250_pci.c

index 8742ef5be6ba4cc7897b5c621bb47069b8541d49..2cbf78f77c4a20024e1988537d1ca8df721256f2 100644 (file)
@@ -1118,6 +1118,18 @@ pci_xr17c154_setup(struct serial_private *priv,
        return pci_default_setup(priv, board, port, idx);
 }
 
+static int try_enable_msi(struct pci_dev *dev)
+{
+       /* use msi if available, but fallback to legacy otherwise */
+       pci_enable_msi(dev);
+       return 0;
+}
+
+static void disable_msi(struct pci_dev *dev)
+{
+       pci_disable_msi(dev);
+}
+
 #define PCI_VENDOR_ID_SBSMODULARIO     0x124B
 #define PCI_SUBVENDOR_ID_SBSMODULARIO  0x124B
 #define PCI_DEVICE_ID_OCTPRO           0x0001
@@ -1233,7 +1245,9 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
                .device         = PCI_DEVICE_ID_INTEL_PATSBURG_KT,
                .subvendor      = PCI_ANY_ID,
                .subdevice      = PCI_ANY_ID,
+               .init           = try_enable_msi,
                .setup          = kt_serial_setup,
+               .exit           = disable_msi,
        },
        /*
         * ITE