* [PATCH v4 0/5] Series of fixes for PL011 char device
@ 2023-01-23 16:22 Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 1/5] hw/char/pl011: refactor FIFO depth handling code Evgeny Iakovlev
` (5 more replies)
0 siblings, 6 replies; 8+ messages in thread
From: Evgeny Iakovlev @ 2023-01-23 16:22 UTC (permalink / raw)
To: qemu-arm; +Cc: qemu-devel, peter.maydell, philmd
v4:
* Fixed post_load hook to be backwards-migratable
* Refactored some code in 5/5 as per review comments
v3:
* Introduced a post_load hook for PL011State migration for
backwards-compatibility due to some input state fragility.
* No longer touching irq lines in reset method
* Minor changes based on review feedback.
v2:
* Moved FIFO depth refactoring part of FIFO flags change into its own
commit.
* Added a reset method for PL011
Evgeny Iakovlev (5):
hw/char/pl011: refactor FIFO depth handling code
hw/char/pl011: add post_load hook for backwards-compatibility
hw/char/pl011: implement a reset method
hw/char/pl011: better handling of FIFO flags on LCR reset
hw/char/pl011: check if UART is enabled before RX or TX operation
hw/char/pl011.c | 121 +++++++++++++++++++++++++++++++++-------
include/hw/char/pl011.h | 5 +-
2 files changed, 105 insertions(+), 21 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 1/5] hw/char/pl011: refactor FIFO depth handling code
2023-01-23 16:22 [PATCH v4 0/5] Series of fixes for PL011 char device Evgeny Iakovlev
@ 2023-01-23 16:23 ` Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 2/5] hw/char/pl011: add post_load hook for backwards-compatibility Evgeny Iakovlev
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Evgeny Iakovlev @ 2023-01-23 16:23 UTC (permalink / raw)
To: qemu-arm; +Cc: qemu-devel, peter.maydell, philmd
PL011 can be in either of 2 modes depending guest config: FIFO and
single register. The last mode could be viewed as a 1-element-deep FIFO.
Current code open-codes a bunch of depth-dependent logic. Refactor FIFO
depth handling code to isolate calculating current FIFO depth.
One functional (albeit guest-invisible) side-effect of this change is
that previously we would always increment s->read_pos in UARTDR read
handler even if FIFO was disabled, now we are limiting read_pos to not
exceed FIFO depth (read_pos itself is reset to 0 if user disables FIFO).
Signed-off-by: Evgeny Iakovlev <eiakovlev@linux.microsoft.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/pl011.c | 30 ++++++++++++++++++------------
include/hw/char/pl011.h | 5 ++++-
2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index c076813423..3fa3b75d04 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -81,6 +81,17 @@ static void pl011_update(PL011State *s)
}
}
+static bool pl011_is_fifo_enabled(PL011State *s)
+{
+ return (s->lcr & 0x10) != 0;
+}
+
+static inline unsigned pl011_get_fifo_depth(PL011State *s)
+{
+ /* Note: FIFO depth is expected to be power-of-2 */
+ return pl011_is_fifo_enabled(s) ? PL011_FIFO_DEPTH : 1;
+}
+
static uint64_t pl011_read(void *opaque, hwaddr offset,
unsigned size)
{
@@ -94,8 +105,7 @@ static uint64_t pl011_read(void *opaque, hwaddr offset,
c = s->read_fifo[s->read_pos];
if (s->read_count > 0) {
s->read_count--;
- if (++s->read_pos == 16)
- s->read_pos = 0;
+ s->read_pos = (s->read_pos + 1) & (pl011_get_fifo_depth(s) - 1);
}
if (s->read_count == 0) {
s->flags |= PL011_FLAG_RXFE;
@@ -273,11 +283,7 @@ static int pl011_can_receive(void *opaque)
PL011State *s = (PL011State *)opaque;
int r;
- if (s->lcr & 0x10) {
- r = s->read_count < 16;
- } else {
- r = s->read_count < 1;
- }
+ r = s->read_count < pl011_get_fifo_depth(s);
trace_pl011_can_receive(s->lcr, s->read_count, r);
return r;
}
@@ -286,15 +292,15 @@ static void pl011_put_fifo(void *opaque, uint32_t value)
{
PL011State *s = (PL011State *)opaque;
int slot;
+ unsigned pipe_depth;
- slot = s->read_pos + s->read_count;
- if (slot >= 16)
- slot -= 16;
+ pipe_depth = pl011_get_fifo_depth(s);
+ slot = (s->read_pos + s->read_count) & (pipe_depth - 1);
s->read_fifo[slot] = value;
s->read_count++;
s->flags &= ~PL011_FLAG_RXFE;
trace_pl011_put_fifo(value, s->read_count);
- if (!(s->lcr & 0x10) || s->read_count == 16) {
+ if (s->read_count == pipe_depth) {
trace_pl011_put_fifo_full();
s->flags |= PL011_FLAG_RXFF;
}
@@ -359,7 +365,7 @@ static const VMStateDescription vmstate_pl011 = {
VMSTATE_UINT32(dmacr, PL011State),
VMSTATE_UINT32(int_enabled, PL011State),
VMSTATE_UINT32(int_level, PL011State),
- VMSTATE_UINT32_ARRAY(read_fifo, PL011State, 16),
+ VMSTATE_UINT32_ARRAY(read_fifo, PL011State, PL011_FIFO_DEPTH),
VMSTATE_UINT32(ilpr, PL011State),
VMSTATE_UINT32(ibrd, PL011State),
VMSTATE_UINT32(fbrd, PL011State),
diff --git a/include/hw/char/pl011.h b/include/hw/char/pl011.h
index dc2c90eedc..926322e242 100644
--- a/include/hw/char/pl011.h
+++ b/include/hw/char/pl011.h
@@ -27,6 +27,9 @@ OBJECT_DECLARE_SIMPLE_TYPE(PL011State, PL011)
/* This shares the same struct (and cast macro) as the base pl011 device */
#define TYPE_PL011_LUMINARY "pl011_luminary"
+/* Depth of UART FIFO in bytes, when FIFO mode is enabled (else depth == 1) */
+#define PL011_FIFO_DEPTH 16
+
struct PL011State {
SysBusDevice parent_obj;
@@ -39,7 +42,7 @@ struct PL011State {
uint32_t dmacr;
uint32_t int_enabled;
uint32_t int_level;
- uint32_t read_fifo[16];
+ uint32_t read_fifo[PL011_FIFO_DEPTH];
uint32_t ilpr;
uint32_t ibrd;
uint32_t fbrd;
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 2/5] hw/char/pl011: add post_load hook for backwards-compatibility
2023-01-23 16:22 [PATCH v4 0/5] Series of fixes for PL011 char device Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 1/5] hw/char/pl011: refactor FIFO depth handling code Evgeny Iakovlev
@ 2023-01-23 16:23 ` Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 3/5] hw/char/pl011: implement a reset method Evgeny Iakovlev
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Evgeny Iakovlev @ 2023-01-23 16:23 UTC (permalink / raw)
To: qemu-arm; +Cc: qemu-devel, peter.maydell, philmd
Previous change slightly modified the way we handle data writes when
FIFO is disabled. Previously we kept incrementing read_pos and were
storing data at that position, although we only have a
single-register-deep FIFO now. Then we changed it to always store data
at pos 0.
If guest disables FIFO and the proceeds to read data, it will work out
fine, because we still read from current read_pos before setting it to
0.
However, to make code less fragile, introduce a post_load hook for
PL011State and move fixup read FIFO state when FIFO is disabled. Since
we are introducing a post_load hook, also do some sanity checking on
untrusted incoming input state.
Signed-off-by: Evgeny Iakovlev <eiakovlev@linux.microsoft.com>
---
hw/char/pl011.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index 3fa3b75d04..05e8bdc050 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -352,10 +352,35 @@ static const VMStateDescription vmstate_pl011_clock = {
}
};
+static int pl011_post_load(void *opaque, int version_id)
+{
+ PL011State* s = opaque;
+
+ /* Sanity-check input state */
+ if (s->read_pos >= ARRAY_SIZE(s->read_fifo) ||
+ s->read_count > ARRAY_SIZE(s->read_fifo)) {
+ return -1;
+ }
+
+ if (!pl011_is_fifo_enabled(s) && s->read_count > 0 && s->read_pos > 0) {
+ /*
+ * Older versions of PL011 didn't ensure that the single
+ * character in the FIFO in FIFO-disabled mode is in
+ * element 0 of the array; convert to follow the current
+ * code's assumptions.
+ */
+ s->read_fifo[0] = s->read_fifo[s->read_pos];
+ s->read_pos = 0;
+ }
+
+ return 0;
+}
+
static const VMStateDescription vmstate_pl011 = {
.name = "pl011",
.version_id = 2,
.minimum_version_id = 2,
+ .post_load = pl011_post_load,
.fields = (VMStateField[]) {
VMSTATE_UINT32(readbuff, PL011State),
VMSTATE_UINT32(flags, PL011State),
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 3/5] hw/char/pl011: implement a reset method
2023-01-23 16:22 [PATCH v4 0/5] Series of fixes for PL011 char device Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 1/5] hw/char/pl011: refactor FIFO depth handling code Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 2/5] hw/char/pl011: add post_load hook for backwards-compatibility Evgeny Iakovlev
@ 2023-01-23 16:23 ` Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 4/5] hw/char/pl011: better handling of FIFO flags on LCR reset Evgeny Iakovlev
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Evgeny Iakovlev @ 2023-01-23 16:23 UTC (permalink / raw)
To: qemu-arm; +Cc: qemu-devel, peter.maydell, philmd
PL011 currently lacks a reset method. Implement it.
Signed-off-by: Evgeny Iakovlev <eiakovlev@linux.microsoft.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/pl011.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index 05e8bdc050..ca7537d8ed 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -427,11 +427,6 @@ static void pl011_init(Object *obj)
s->clk = qdev_init_clock_in(DEVICE(obj), "clk", pl011_clock_update, s,
ClockUpdate);
- s->read_trigger = 1;
- s->ifl = 0x12;
- s->cr = 0x300;
- s->flags = 0x90;
-
s->id = pl011_id_arm;
}
@@ -443,11 +438,32 @@ static void pl011_realize(DeviceState *dev, Error **errp)
pl011_event, NULL, s, NULL, true);
}
+static void pl011_reset(DeviceState *dev)
+{
+ PL011State *s = PL011(dev);
+
+ s->lcr = 0;
+ s->rsr = 0;
+ s->dmacr = 0;
+ s->int_enabled = 0;
+ s->int_level = 0;
+ s->ilpr = 0;
+ s->ibrd = 0;
+ s->fbrd = 0;
+ s->read_pos = 0;
+ s->read_count = 0;
+ s->read_trigger = 1;
+ s->ifl = 0x12;
+ s->cr = 0x300;
+ s->flags = 0x90;
+}
+
static void pl011_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
dc->realize = pl011_realize;
+ dc->reset = pl011_reset;
dc->vmsd = &vmstate_pl011;
device_class_set_props(dc, pl011_properties);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 4/5] hw/char/pl011: better handling of FIFO flags on LCR reset
2023-01-23 16:22 [PATCH v4 0/5] Series of fixes for PL011 char device Evgeny Iakovlev
` (2 preceding siblings ...)
2023-01-23 16:23 ` [PATCH v4 3/5] hw/char/pl011: implement a reset method Evgeny Iakovlev
@ 2023-01-23 16:23 ` Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 5/5] hw/char/pl011: check if UART is enabled before RX or TX operation Evgeny Iakovlev
2023-02-02 17:54 ` [PATCH v4 0/5] Series of fixes for PL011 char device Peter Maydell
5 siblings, 0 replies; 8+ messages in thread
From: Evgeny Iakovlev @ 2023-01-23 16:23 UTC (permalink / raw)
To: qemu-arm; +Cc: qemu-devel, peter.maydell, philmd
Current FIFO handling code does not reset RXFE/RXFF flags when guest
resets FIFO by writing to UARTLCR register, although internal FIFO state
is reset to 0 read count. Actual guest-visible flag update will happen
only on next data read or write attempt. As a result of that any guest
that expects RXFE flag to be set (and RXFF to be cleared) after resetting
FIFO will never see that happen.
Signed-off-by: Evgeny Iakovlev <eiakovlev@linux.microsoft.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/char/pl011.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index ca7537d8ed..c15cb7af20 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -92,6 +92,16 @@ static inline unsigned pl011_get_fifo_depth(PL011State *s)
return pl011_is_fifo_enabled(s) ? PL011_FIFO_DEPTH : 1;
}
+static inline void pl011_reset_fifo(PL011State *s)
+{
+ s->read_count = 0;
+ s->read_pos = 0;
+
+ /* Reset FIFO flags */
+ s->flags &= ~(PL011_FLAG_RXFF | PL011_FLAG_TXFF);
+ s->flags |= PL011_FLAG_RXFE | PL011_FLAG_TXFE;
+}
+
static uint64_t pl011_read(void *opaque, hwaddr offset,
unsigned size)
{
@@ -239,8 +249,7 @@ static void pl011_write(void *opaque, hwaddr offset,
case 11: /* UARTLCR_H */
/* Reset the FIFO state on FIFO enable or disable */
if ((s->lcr ^ value) & 0x10) {
- s->read_count = 0;
- s->read_pos = 0;
+ pl011_reset_fifo(s);
}
if ((s->lcr ^ value) & 0x1) {
int break_enable = value & 0x1;
@@ -450,12 +459,11 @@ static void pl011_reset(DeviceState *dev)
s->ilpr = 0;
s->ibrd = 0;
s->fbrd = 0;
- s->read_pos = 0;
- s->read_count = 0;
s->read_trigger = 1;
s->ifl = 0x12;
s->cr = 0x300;
- s->flags = 0x90;
+ s->flags = 0;
+ pl011_reset_fifo(s);
}
static void pl011_class_init(ObjectClass *oc, void *data)
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 5/5] hw/char/pl011: check if UART is enabled before RX or TX operation
2023-01-23 16:22 [PATCH v4 0/5] Series of fixes for PL011 char device Evgeny Iakovlev
` (3 preceding siblings ...)
2023-01-23 16:23 ` [PATCH v4 4/5] hw/char/pl011: better handling of FIFO flags on LCR reset Evgeny Iakovlev
@ 2023-01-23 16:23 ` Evgeny Iakovlev
2023-02-02 17:54 ` [PATCH v4 0/5] Series of fixes for PL011 char device Peter Maydell
5 siblings, 0 replies; 8+ messages in thread
From: Evgeny Iakovlev @ 2023-01-23 16:23 UTC (permalink / raw)
To: qemu-arm; +Cc: qemu-devel, peter.maydell, philmd
UART should be enabled in general and have RX enabled specifically to be
able to receive data from peripheral device. Same goes for transmitting
data to peripheral device and a TXE flag.
Check if UART CR register has EN and RXE or TXE bits enabled before
trying to receive or transmit data.
Signed-off-by: Evgeny Iakovlev <eiakovlev@linux.microsoft.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/pl011.c | 36 +++++++++++++++++++++++++++++++-----
1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index c15cb7af20..28ba242e2f 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -54,6 +54,11 @@
#define INT_E (INT_OE | INT_BE | INT_PE | INT_FE)
#define INT_MS (INT_RI | INT_DSR | INT_DCD | INT_CTS)
+/* UARTCR bits */
+#define PL011_CR_UARTEN (1 << 0)
+#define PL011_CR_TXE (1 << 8)
+#define PL011_CR_RXE (1 << 9)
+
static const unsigned char pl011_id_arm[8] =
{ 0x11, 0x10, 0x14, 0x00, 0x0d, 0xf0, 0x05, 0xb1 };
static const unsigned char pl011_id_luminary[8] =
@@ -211,6 +216,16 @@ static void pl011_trace_baudrate_change(const PL011State *s)
s->ibrd, s->fbrd);
}
+static inline bool pl011_can_transmit(PL011State *s)
+{
+ return s->cr & PL011_CR_UARTEN && s->cr & PL011_CR_TXE;
+}
+
+static inline bool pl011_can_receive(PL011State *s)
+{
+ return s->cr & PL011_CR_UARTEN && s->cr & PL011_CR_RXE;
+}
+
static void pl011_write(void *opaque, hwaddr offset,
uint64_t value, unsigned size)
{
@@ -221,7 +236,9 @@ static void pl011_write(void *opaque, hwaddr offset,
switch (offset >> 2) {
case 0: /* UARTDR */
- /* ??? Check if transmitter is enabled. */
+ if (!pl011_can_transmit(s)) {
+ break;
+ }
ch = value;
/* XXX this blocks entire thread. Rewrite to use
* qemu_chr_fe_write and background I/O callbacks */
@@ -287,12 +304,21 @@ static void pl011_write(void *opaque, hwaddr offset,
}
}
-static int pl011_can_receive(void *opaque)
+static int pl011_receive_capacity(void *opaque)
{
PL011State *s = (PL011State *)opaque;
int r;
- r = s->read_count < pl011_get_fifo_depth(s);
+ if (!pl011_can_receive(s)) {
+ r = 0;
+ } else {
+ /*
+ * Capacity is deliberately maxed to 1 here even though we could have
+ * more fifo space. This is something we can optimize, but for now
+ * pl011_receive expects to handle exactly one element at a time.
+ */
+ r = s->read_count < pl011_get_fifo_depth(s);
+ }
trace_pl011_can_receive(s->lcr, s->read_count, r);
return r;
}
@@ -443,7 +469,7 @@ static void pl011_realize(DeviceState *dev, Error **errp)
{
PL011State *s = PL011(dev);
- qemu_chr_fe_set_handlers(&s->chr, pl011_can_receive, pl011_receive,
+ qemu_chr_fe_set_handlers(&s->chr, pl011_receive_capacity, pl011_receive,
pl011_event, NULL, s, NULL, true);
}
@@ -461,7 +487,7 @@ static void pl011_reset(DeviceState *dev)
s->fbrd = 0;
s->read_trigger = 1;
s->ifl = 0x12;
- s->cr = 0x300;
+ s->cr = PL011_CR_RXE | PL011_CR_TXE;
s->flags = 0;
pl011_reset_fifo(s);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v4 0/5] Series of fixes for PL011 char device
2023-01-23 16:22 [PATCH v4 0/5] Series of fixes for PL011 char device Evgeny Iakovlev
` (4 preceding siblings ...)
2023-01-23 16:23 ` [PATCH v4 5/5] hw/char/pl011: check if UART is enabled before RX or TX operation Evgeny Iakovlev
@ 2023-02-02 17:54 ` Peter Maydell
2023-02-14 17:19 ` eiakovlev
5 siblings, 1 reply; 8+ messages in thread
From: Peter Maydell @ 2023-02-02 17:54 UTC (permalink / raw)
To: Evgeny Iakovlev; +Cc: qemu-arm, qemu-devel, philmd
On Mon, 23 Jan 2023 at 16:23, Evgeny Iakovlev
<eiakovlev@linux.microsoft.com> wrote:
>
> v4:
> * Fixed post_load hook to be backwards-migratable
> * Refactored some code in 5/5 as per review comments
>
> v3:
> * Introduced a post_load hook for PL011State migration for
> backwards-compatibility due to some input state fragility.
> * No longer touching irq lines in reset method
> * Minor changes based on review feedback.
>
> v2:
> * Moved FIFO depth refactoring part of FIFO flags change into its own
> commit.
> * Added a reset method for PL011
Patch 5 in this series breaks "make check" for both the
boot-serial-test and the migration-test (both of which
have some simple code that writes to the serial port).
I suspect in both cases that the guest code is just not
bothering to set the UART control register correctly,
because it's never needed to do so in the past.
(This does make me wonder about the utility of making
this change -- it seems likely that we're going to break
naive bare-metal intended-to-work-on-QEMU code and not
really benefit any real-world runs-on-real-hardware
code, which is presumably just enabling TX and RX and
leaving it that way.)
I've taken patches 1-4 into target-arm.next.
thanks
-- PMM
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 0/5] Series of fixes for PL011 char device
2023-02-02 17:54 ` [PATCH v4 0/5] Series of fixes for PL011 char device Peter Maydell
@ 2023-02-14 17:19 ` eiakovlev
0 siblings, 0 replies; 8+ messages in thread
From: eiakovlev @ 2023-02-14 17:19 UTC (permalink / raw)
To: Peter Maydell, qemu-arm, qemu-devel, philmd
On 2/2/23 6:54 PM, Peter Maydell <peter.maydell@linaro.org> wrote:
> On Mon, 23 Jan 2023 at 16:23, Evgeny Iakovlev
> <eiakovlev@linux.microsoft.com> wrote:
> >
> > v4:
> > * Fixed post_load hook to be backwards-migratable
> > * Refactored some code in 5/5 as per review comments
> >
> > v3:
> > * Introduced a post_load hook for PL011State migration for
> > backwards-compatibility due to some input state fragility.
> > * No longer touching irq lines in reset method
> > * Minor changes based on review feedback.
> >
> > v2:
> > * Moved FIFO depth refactoring part of FIFO flags change into its own
> > commit.
> > * Added a reset method for PL011
>
> Patch 5 in this series breaks "make check" for both the
> boot-serial-test and the migration-test (both of which
> have some simple code that writes to the serial port).
> I suspect in both cases that the guest code is just not
> bothering to set the UART control register correctly,
> because it's never needed to do so in the past.
>
> (This does make me wonder about the utility of making
> this change -- it seems likely that we're going to break
> naive bare-metal intended-to-work-on-QEMU code and not
> really benefit any real-world runs-on-real-hardware
> code, which is presumably just enabling TX and RX and
> leaving it that way.)
>
> I've taken patches 1-4 into target-arm.next.
>
> thanks
> -- PMM
>
Thanks Peter! I'll investigate the failures you've mentioned. Maybe you are correct in that regard. Although i have not seen any problems running NTOS.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-02-14 17:21 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-23 16:22 [PATCH v4 0/5] Series of fixes for PL011 char device Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 1/5] hw/char/pl011: refactor FIFO depth handling code Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 2/5] hw/char/pl011: add post_load hook for backwards-compatibility Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 3/5] hw/char/pl011: implement a reset method Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 4/5] hw/char/pl011: better handling of FIFO flags on LCR reset Evgeny Iakovlev
2023-01-23 16:23 ` [PATCH v4 5/5] hw/char/pl011: check if UART is enabled before RX or TX operation Evgeny Iakovlev
2023-02-02 17:54 ` [PATCH v4 0/5] Series of fixes for PL011 char device Peter Maydell
2023-02-14 17:19 ` eiakovlev
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).