aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@linaro.org>2024-07-18 17:23:42 +0200
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2024-09-13 20:11:13 +0200
commit51b61dd4d56f20cc58d038440e3d9a8c03482953 (patch)
tree5f04fce1d18a4e8c058e497cc49efcdb392abef6
parentdee8284b6fc2587179b74b827503f330b4ba2e57 (diff)
downloadqemu-51b61dd4d56f20cc58d038440e3d9a8c03482953.zip
qemu-51b61dd4d56f20cc58d038440e3d9a8c03482953.tar.gz
qemu-51b61dd4d56f20cc58d038440e3d9a8c03482953.tar.bz2
hw/char/pl011: Warn when using disabled transmitter
We shouldn't transmit characters when the full UART or its transmitter is disabled. However we don't want to break the possibly incomplete "my first bare metal assembly program"s, so we choose to simply display a warning when this occurs. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20240719181041.49545-9-philmd@linaro.org>
-rw-r--r--hw/char/pl011.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index 0f9a5cd..f0df58f 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -85,7 +85,9 @@ DeviceState *pl011_create(hwaddr addr, qemu_irq irq, Chardev *chr)
#define CR_OUT1 (1 << 12)
#define CR_RTS (1 << 11)
#define CR_DTR (1 << 10)
+#define CR_TXE (1 << 8)
#define CR_LBE (1 << 7)
+#define CR_UARTEN (1 << 0)
/* Integer Baud Rate Divider, UARTIBRD */
#define IBRD_MASK 0x3f
@@ -223,7 +225,14 @@ static void pl011_loopback_tx(PL011State *s, uint32_t value)
static void pl011_write_txdata(PL011State *s, uint8_t data)
{
- /* ??? Check if transmitter is enabled. */
+ if (!(s->cr & CR_UARTEN)) {
+ qemu_log_mask(LOG_GUEST_ERROR,
+ "PL011 data written to disabled UART\n");
+ }
+ if (!(s->cr & CR_TXE)) {
+ qemu_log_mask(LOG_GUEST_ERROR,
+ "PL011 data written to disabled TX UART\n");
+ }
/*
* XXX this blocks entire thread. Rewrite to use