From 6b3e3a9810aa294d4632ae91011269c78bfdcbcc Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 31 Jul 2012 22:59:57 +0200 Subject: [PATCH] serial: milkymist_uart: Fix IRQ issues with QEMU Clear the IRQ status bits after reading the RX character and before writing the TX character. This way we'll satisfy the recommended sequences of RX: irq -> read char -> clear rx event -> wait for irq TX: irq -> clear tx event -> tx char -> wait for irq Signed-off-by: Lars-Peter Clausen --- drivers/tty/serial/milkymist_uart.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/milkymist_uart.c b/drivers/tty/serial/milkymist_uart.c index 0b2ae6fe605aa..712136af4365f 100644 --- a/drivers/tty/serial/milkymist_uart.c +++ b/drivers/tty/serial/milkymist_uart.c @@ -111,12 +111,15 @@ static irqreturn_t milkymist_uart_isr(int irq, void *data) spin_lock(&port->lock); - /* read and ack events */ + /* read and ... */ stat = ioread32be(port->membase + UART_STAT) & 0xff; - iowrite32be(stat, port->membase + UART_STAT); if (stat & UART_STAT_RX_EVT) milkymist_uart_rx_char(port); + + /* ... ack events */ + iowrite32be(stat, port->membase + UART_STAT); + if (stat & UART_STAT_TX_EVT) milkymist_uart_tx_char(port);