[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 6/10] hw/char/pl011: Warn when using disabled transmitter
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH v3 6/10] hw/char/pl011: Warn when using disabled transmitter |
Date: |
Fri, 13 Oct 2023 16:11:27 +0200 |
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>
---
hw/char/pl011.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index 30309337b1..9c43cb47bf 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -76,6 +76,10 @@ DeviceState *pl011_create(hwaddr addr, qemu_irq irq, Chardev
*chr)
#define LCR_FEN (1 << 4)
#define LCR_BRK (1 << 0)
+/* Control Register, UARTCR */
+#define CR_TXE (1 << 8)
+#define CR_UARTEN (1 << 0)
+
static const unsigned char pl011_id_arm[8] =
{ 0x11, 0x10, 0x14, 0x00, 0x0d, 0xf0, 0x05, 0xb1 };
static const unsigned char pl011_id_luminary[8] =
@@ -151,7 +155,12 @@ static inline void pl011_reset_tx_fifo(PL011State *s)
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
* qemu_chr_fe_write and background I/O callbacks */
--
2.41.0
- [PATCH v3 0/10] hw/char/pl011: Implement TX (async) FIFO to avoid blocking the main loop, Philippe Mathieu-Daudé, 2023/10/13
- [PATCH v3 1/10] util/fifo8: Allow fifo8_pop_buf() to not populate popped length, Philippe Mathieu-Daudé, 2023/10/13
- [PATCH v3 2/10] util/fifo8: Introduce fifo8_peek_buf(), Philippe Mathieu-Daudé, 2023/10/13
- [PATCH v3 3/10] hw/char/pl011: Split RX/TX path of pl011_reset_fifo(), Philippe Mathieu-Daudé, 2023/10/13
- [PATCH v3 4/10] hw/char/pl011: Extract pl011_write_txdata() from pl011_write(), Philippe Mathieu-Daudé, 2023/10/13
- [PATCH v3 5/10] hw/char/pl011: Extract pl011_read_rxdata() from pl011_read(), Philippe Mathieu-Daudé, 2023/10/13
- [PATCH v3 6/10] hw/char/pl011: Warn when using disabled transmitter,
Philippe Mathieu-Daudé <=
- [PATCH v3 7/10] hw/char/pl011: Check if receiver is enabled, Philippe Mathieu-Daudé, 2023/10/13
- [PATCH v3 8/10] hw/char/pl011: Rename RX FIFO methods, Philippe Mathieu-Daudé, 2023/10/13
- [PATCH v3 9/10] hw/char/pl011: Add transmit FIFO to PL011State, Philippe Mathieu-Daudé, 2023/10/13
- Re: [PATCH v3 0/10] hw/char/pl011: Implement TX (async) FIFO to avoid blocking the main loop, Alex Bennée, 2023/10/13
- Re: [PATCH v3 0/10] hw/char/pl011: Implement TX (async) FIFO to avoid blocking the main loop, Mark Cave-Ayland, 2023/10/14