summaryrefslogtreecommitdiff
path: root/src/dev/arm/pl011.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/dev/arm/pl011.cc')
-rw-r--r--src/dev/arm/pl011.cc10
1 files changed, 10 insertions, 0 deletions
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);