summaryrefslogtreecommitdiff
path: root/drivers/tty
diff options
context:
space:
mode:
authorEdgardo Handal <ehandal@nvidia.com>2013-10-15 14:40:56 -0500
committerAlexander Van Brunt <avanbrunt@nvidia.com>2013-10-18 09:52:01 -0700
commit52bfa4c8bd1fdeb0ca657fccb9bccad906339ca2 (patch)
tree5f57944ace5a49a29c6ccb282e0e3bd81a95fb52 /drivers/tty
parent9baf1ab4208533bd257e3578a98f65e1f5ee21c6 (diff)
Revert "tty: serial: 8250: tegra fix spurious interrupts"
This reverts commit c131ba5b6169ae02c51c67e470df35e7ef71e21a. Bug 1229695 Bug 1339412 Signed-off-by: Edgardo Handal <ehandal@nvidia.com> Change-Id: I1ff590e58c82c7f4238e292fd6160502a8a8088c Reviewed-on: http://git-master/r/299585 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Matt Craighead <mcraighead@nvidia.com> Reviewed-by: Pradeep Goudagunta <pgoudagunta@nvidia.com> Reviewed-by: Alexander Van Brunt <avanbrunt@nvidia.com>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/8250/8250_core.c49
1 files changed, 1 insertions, 48 deletions
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index a1a1a08e4dfc..264054fe8a66 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -1496,7 +1496,6 @@ unsigned int serial8250_modem_status(struct uart_8250_port *up)
}
EXPORT_SYMBOL_GPL(serial8250_modem_status);
-#define NOINTR_COUNTER 1000
/*
* This handles the interrupt from one port.
*/
@@ -1507,29 +1506,9 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
struct uart_8250_port *up =
container_of(port, struct uart_8250_port, port);
int dma_err = 0;
-#ifdef CONFIG_ARCH_TEGRA
- static int tegra_nointr_count = 0;
- if ((iir & UART_IIR_NO_INT)) {
- tegra_nointr_count++;
- if (tegra_nointr_count > NOINTR_COUNTER) {
- up->mcr = serial_port_in(port, UART_MCR)
- | UART_MCR_LOOP;
- serial_port_out(port, UART_MCR, up->mcr);
- up->ier = serial_port_in(port, UART_IER)
- | UART_IER_MSI;
- serial_port_out(port, UART_IER, up->ier);
- up->mcr |= UART_MCR_RTS;
- serial_port_out(port, UART_MCR, up->mcr);
- }
-
- return 0;
- } else
- tegra_nointr_count = 0;
-#else
if (iir & UART_IIR_NO_INT)
return 0;
-#endif
spin_lock_irqsave(&port->lock, flags);
@@ -1537,23 +1516,6 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
DEBUG_INTR("status = %x...", status);
-#ifdef CONFIG_ARCH_TEGRA
- if ((iir & 0xf) == UART_IIR_MSI) {
- if (up->mcr & UART_MCR_LOOP) {
- serial_port_out(port, UART_TX, 0xff);
- up->mcr &= ~UART_MCR_LOOP;
- serial_port_out(port, UART_MCR, up->mcr);
- up->ier &= ~UART_IER_MSI;
- serial_port_out(port, UART_IER, up->ier);
- up->mcr &= ~UART_MCR_RTS;
- serial_port_out(port, UART_MCR, up->mcr);
- }
- serial8250_modem_status(up);
- }
-#else
- serial8250_modem_status(up);
-#endif
-
if (status & (UART_LSR_DR | UART_LSR_BI)) {
if (up->dma)
dma_err = serial8250_rx_dma(up, iir);
@@ -1561,7 +1523,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
if (!up->dma || dma_err)
status = serial8250_rx_chars(up, status);
}
-
+ serial8250_modem_status(up);
if (status & UART_LSR_THRE)
serial8250_tx_chars(up);
@@ -1683,7 +1645,6 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
struct irq_info *i = dev_id;
struct list_head *l, *end = NULL;
int pass_counter = 0, handled = 0;
- u8 iir, tegra_handled;
DEBUG_INTR("serial8250_interrupt(%d)...", irq);
@@ -1696,12 +1657,6 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
up = list_entry(l, struct uart_8250_port, list);
port = &up->port;
- iir = serial_port_in(port, UART_IIR);
-
- if (iir & UART_IIR_NO_INT && port->type == PORT_TEGRA)
- tegra_handled = 1;
- else
- tegra_handled = 0;
if (port->handle_irq(port)) {
handled = 1;
@@ -1726,8 +1681,6 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
spin_unlock(&i->lock);
DEBUG_INTR("end.\n");
- if (tegra_handled)
- handled = 1;
return IRQ_RETVAL(handled);
}