diff --git a/src/dev/arm/pl011.cc b/src/dev/arm/pl011.cc index e00ee8351..40f34e1fd 100644 --- a/src/dev/arm/pl011.cc +++ b/src/dev/arm/pl011.cc @@ -86,6 +86,11 @@ Pl011::read(PacketPtr pkt) // Since we don't simulate a FIFO for incoming data, we // assume it's empty and clear RXINTR and RTINTR. clearInterrupts(UART_RXINTR | UART_RTINTR); + if (term->dataAvailable()) { + DPRINTF(Uart, "Re-raising interrupt due to more data " + "after UART_DR read\n"); + dataAvailable(); + } } break; case UART_FR: @@ -224,6 +229,11 @@ Pl011::write(PacketPtr pkt) case UART_ICR: DPRINTF(Uart, "Clearing interrupts 0x%x\n", data); clearInterrupts(data); + if (term->dataAvailable()) { + DPRINTF(Uart, "Re-raising interrupt due to more data after " + "UART_ICR write\n"); + dataAvailable(); + } break; default: panic("Tried to write PL011 at offset %#x that doesn't exist\n", daddr);