qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Evgeny Iakovlev" <eiakovlev@linux.microsoft.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Gavin Shan" <gshan@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	qemu-arm@nongnu.org, "Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: [PATCH v2 08/11] hw/char/pl011: Warn when using disabled transmitter
Date: Mon, 10 Jul 2023 19:50:59 +0200	[thread overview]
Message-ID: <20230710175102.32429-9-philmd@linaro.org> (raw)
In-Reply-To: <20230710175102.32429-1-philmd@linaro.org>

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>
---
 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 e2e3d48b91..03dce0a1ec 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, const uint8_t *buf, int length)
 {
-    /* ??? Check if transmitter is enabled.  */
+    if (!(s->cr & CR_UARTEN)) {
+        qemu_log_mask(LOG_GUEST_ERROR, "PL011 write data but UART disabled\n");
+    }
+    if (!(s->cr & CR_TXE)) {
+        qemu_log_mask(LOG_GUEST_ERROR, "PL011 write data but TX disabled\n");
+    }
 
     /* XXX this blocks entire thread. Rewrite to use
      * qemu_chr_fe_write and background I/O callbacks */
-- 
2.38.1



  parent reply	other threads:[~2023-07-10 17:52 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-10 17:50 [PATCH v2 00/11] hw/char/pl011: Implement TX (async) FIFO to avoid blocking the main loop Philippe Mathieu-Daudé
2023-07-10 17:50 ` [PATCH v2 01/11] hw/char/pl011: Restrict MemoryRegionOps implementation access sizes Philippe Mathieu-Daudé
2023-07-14  6:47   ` Richard Henderson
2023-07-10 17:50 ` [PATCH v2 02/11] hw/char/pl011: Display register name in trace events Philippe Mathieu-Daudé
2023-07-14  6:49   ` Richard Henderson
2023-07-10 17:50 ` [PATCH v2 03/11] hw/char/pl011: Remove duplicated PL011_INT_[RT]X definitions Philippe Mathieu-Daudé
2023-07-14  6:50   ` Richard Henderson
2023-07-10 17:50 ` [PATCH v2 04/11] hw/char/pl011: Replace magic values by register field definitions Philippe Mathieu-Daudé
2023-07-14  6:54   ` Richard Henderson
2023-07-10 17:50 ` [PATCH v2 05/11] hw/char/pl011: Split RX/TX path of pl011_reset_fifo() Philippe Mathieu-Daudé
2023-07-14  6:56   ` Richard Henderson
2023-07-10 17:50 ` [PATCH v2 06/11] hw/char/pl011: Extract pl011_write_txdata() from pl011_write() Philippe Mathieu-Daudé
2023-07-14  6:58   ` Richard Henderson
2023-10-12 13:07     ` Philippe Mathieu-Daudé
2023-10-12 14:25       ` Philippe Mathieu-Daudé
2023-07-10 17:50 ` [PATCH v2 07/11] hw/char/pl011: Extract pl011_read_rxdata() from pl011_read() Philippe Mathieu-Daudé
2023-07-14  7:00   ` Richard Henderson
2023-07-10 17:50 ` Philippe Mathieu-Daudé [this message]
2023-07-14  7:01   ` [PATCH v2 08/11] hw/char/pl011: Warn when using disabled transmitter Richard Henderson
2023-07-10 17:51 ` [PATCH v2 09/11] hw/char/pl011: Check if receiver is enabled Philippe Mathieu-Daudé
2023-07-14  7:03   ` Richard Henderson
2023-07-10 17:51 ` [PATCH v2 10/11] hw/char/pl011: Rename RX FIFO methods Philippe Mathieu-Daudé
2023-07-14  7:06   ` Richard Henderson
2023-07-10 17:51 ` [RFC PATCH v2 11/11] hw/char/pl011: Implement TX FIFO Philippe Mathieu-Daudé
2023-07-14  7:27   ` Richard Henderson
2023-10-13 14:05     ` Philippe Mathieu-Daudé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230710175102.32429-9-philmd@linaro.org \
    --to=philmd@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=eiakovlev@linux.microsoft.com \
    --cc=gshan@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).