aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2012-04-06 14:49:44 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-09 13:34:52 -0400
commit49b532f96fda23663f8be35593d1c1372c0f91e0 (patch)
tree778aacfa431d612f03a136847a0ebe84a9ffe82a /drivers/tty
parent3579812373aba92b2f3b632bdf99329bc3c05d62 (diff)
Revert "serial/8250_pci: setup-quirk workaround for the kt serial controller"
This reverts commit 448ac154c957c4580531fa0c8f2045816fe2f0e7. The semantic of UPF_IIR_ONCE is only guaranteed to workaround the race condition in the kt serial's iir register if the only source of interrupts is THRE (fifo-empty) events. An modem status event at the wrong time can again cause an iir read to drop the 'empty' status leading to a hang. So, revert this in preparation for using the existing "I don't trust my iir register" workaround in the 8250 core (UART_BUG_THRE). [stable: 3.3.x] Cc: stable <stable@vger.kernel.org> Acked-by: Alan Cox <alan@linux.intel.com> Cc: Sudhakar Mamillapalli <sudhakar@fb.com> Reported-by: Nhan H Mai <nhan.h.mai@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/8250/8250.c4
-rw-r--r--drivers/tty/serial/8250/8250_pci.c17
2 files changed, 2 insertions, 19 deletions
diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c
index 5b149b466ec8..56492d208a7a 100644
--- a/drivers/tty/serial/8250/8250.c
+++ b/drivers/tty/serial/8250/8250.c
@@ -1572,13 +1572,11 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
1572 do { 1572 do {
1573 struct uart_8250_port *up; 1573 struct uart_8250_port *up;
1574 struct uart_port *port; 1574 struct uart_port *port;
1575 bool skip;
1576 1575
1577 up = list_entry(l, struct uart_8250_port, list); 1576 up = list_entry(l, struct uart_8250_port, list);
1578 port = &up->port; 1577 port = &up->port;
1579 skip = pass_counter && up->port.flags & UPF_IIR_ONCE;
1580 1578
1581 if (!skip && port->handle_irq(port)) { 1579 if (port->handle_irq(port)) {
1582 handled = 1; 1580 handled = 1;
1583 end = NULL; 1581 end = NULL;
1584 } else if (end == NULL) 1582 } else if (end == NULL)
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index 1d4ccf8c8874..105dcfbd3d33 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -1092,14 +1092,6 @@ static int skip_tx_en_setup(struct serial_private *priv,
1092 return pci_default_setup(priv, board, port, idx); 1092 return pci_default_setup(priv, board, port, idx);
1093} 1093}
1094 1094
1095static int kt_serial_setup(struct serial_private *priv,
1096 const struct pciserial_board *board,
1097 struct uart_port *port, int idx)
1098{
1099 port->flags |= UPF_IIR_ONCE;
1100 return skip_tx_en_setup(priv, board, port, idx);
1101}
1102
1103static int pci_eg20t_init(struct pci_dev *dev) 1095static int pci_eg20t_init(struct pci_dev *dev)
1104{ 1096{
1105#if defined(CONFIG_SERIAL_PCH_UART) || defined(CONFIG_SERIAL_PCH_UART_MODULE) 1097#if defined(CONFIG_SERIAL_PCH_UART) || defined(CONFIG_SERIAL_PCH_UART_MODULE)
@@ -1118,6 +1110,7 @@ pci_xr17c154_setup(struct serial_private *priv,
1118 return pci_default_setup(priv, board, port, idx); 1110 return pci_default_setup(priv, board, port, idx);
1119} 1111}
1120 1112
1113/* This should be in linux/pci_ids.h */
1121#define PCI_VENDOR_ID_SBSMODULARIO 0x124B 1114#define PCI_VENDOR_ID_SBSMODULARIO 0x124B
1122#define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B 1115#define PCI_SUBVENDOR_ID_SBSMODULARIO 0x124B
1123#define PCI_DEVICE_ID_OCTPRO 0x0001 1116#define PCI_DEVICE_ID_OCTPRO 0x0001
@@ -1147,7 +1140,6 @@ pci_xr17c154_setup(struct serial_private *priv,
1147#define PCI_DEVICE_ID_OXSEMI_16PCI958 0x9538 1140#define PCI_DEVICE_ID_OXSEMI_16PCI958 0x9538
1148#define PCIE_DEVICE_ID_NEO_2_OX_IBM 0x00F6 1141#define PCIE_DEVICE_ID_NEO_2_OX_IBM 0x00F6
1149#define PCI_DEVICE_ID_PLX_CRONYX_OMEGA 0xc001 1142#define PCI_DEVICE_ID_PLX_CRONYX_OMEGA 0xc001
1150#define PCI_DEVICE_ID_INTEL_PATSBURG_KT 0x1d3d
1151 1143
1152/* Unknown vendors/cards - this should not be in linux/pci_ids.h */ 1144/* Unknown vendors/cards - this should not be in linux/pci_ids.h */
1153#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 1145#define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584
@@ -1232,13 +1224,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
1232 .subdevice = PCI_ANY_ID, 1224 .subdevice = PCI_ANY_ID,
1233 .setup = ce4100_serial_setup, 1225 .setup = ce4100_serial_setup,
1234 }, 1226 },
1235 {
1236 .vendor = PCI_VENDOR_ID_INTEL,
1237 .device = PCI_DEVICE_ID_INTEL_PATSBURG_KT,
1238 .subvendor = PCI_ANY_ID,
1239 .subdevice = PCI_ANY_ID,
1240 .setup = kt_serial_setup,
1241 },
1242 /* 1227 /*
1243 * ITE 1228 * ITE
1244 */ 1229 */