This patch doesn't seem correct as the spec is pretty clear that THRE interrupt enable is set to high, then an interrupt is rased if LSR.THRE=1. Does the following also make DOSPlus boot again:
diff --git a/hw/serial.c b/hw/serial.c index 9102edb..b0ac52f 100644 --- a/hw/serial.c +++ b/hw/serial.c @@ -401,7 +401,8 @@ static void serial_ioport_write(void *opaque, uint32_t addr, s->poll_msl = 0; } } - if (s->lsr & UART_LSR_THRE) { + if (s->ier & UART_IER_THRI && + s->lsr & UART_LSR_THRE) { s->thr_ipending = 1; serial_update_irq(s); }
This patch doesn't seem correct as the spec is pretty clear that THRE interrupt enable is set to high, then an interrupt is rased if LSR.THRE=1. Does the following also make DOSPlus boot again:
diff --git a/hw/serial.c b/hw/serial.c ioport_ write(void *opaque, uint32_t addr,
s->poll_ msl = 0;
s->thr_ ipending = 1;
serial_ update_ irq(s);
index 9102edb..b0ac52f 100644
--- a/hw/serial.c
+++ b/hw/serial.c
@@ -401,7 +401,8 @@ static void serial_
}
}
- if (s->lsr & UART_LSR_THRE) {
+ if (s->ier & UART_IER_THRI &&
+ s->lsr & UART_LSR_THRE) {
}