hw/serial.c: fix THRE interrupt clearing
authorAurelien Jarno <aurelien@aurel32.net>
Sat, 6 Mar 2010 21:19:53 +0000 (22:19 +0100)
committerAurelien Jarno <aurelien@aurel32.net>
Sat, 6 Mar 2010 21:28:07 +0000 (22:28 +0100)
UART_IIR_THRI is not a mask, but a possible value for the IIR ID.
Use UART_IIR_ID to extract this value.

Broken by commit 71e605f80313a632cc6714cde7bd240042dbdd95.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
hw/serial.c

index 586c366..f3ec36a 100644 (file)
@@ -541,7 +541,7 @@ static uint32_t serial_ioport_read(void *opaque, uint32_t addr)
         break;
     case 2:
         ret = s->iir;
-        if (ret & UART_IIR_THRI) {
+        if ((ret & UART_IIR_ID) == UART_IIR_THRI) {
             s->thr_ipending = 0;
             serial_update_irq(s);
         }