summaryrefslogtreecommitdiffstats
path: root/hw/char
diff options
context:
space:
mode:
authorIris Johnson2021-01-28 04:36:55 +0100
committerPeter Maydell2021-02-02 18:00:54 +0100
commit40b4c2ae90e4f864a1015ff748a4af00518ff0c0 (patch)
tree38058eb2716742a10eef600c58b017858c7b666a /hw/char
parenthw/intc/arm_gic: Allow to use QTest without crashing (diff)
downloadqemu-40b4c2ae90e4f864a1015ff748a4af00518ff0c0.tar.gz
qemu-40b4c2ae90e4f864a1015ff748a4af00518ff0c0.tar.xz
qemu-40b4c2ae90e4f864a1015ff748a4af00518ff0c0.zip
hw/char/exynos4210_uart: Fix buffer size reporting with FIFO disabled
Currently the Exynos 4210 UART code always reports available FIFO space when the backend checks for buffer space. When the FIFO is disabled this is behavior causes the backend chardev code to replace the data before the guest can read it. This patch changes adds the logic to report the capacity properly when the FIFO is not being used. Buglink: https://bugs.launchpad.net/qemu/+bug/1913344 Signed-off-by: Iris Johnson <iris@modwiz.com> Message-id: 20210128033655.1029577-1-iris@modwiz.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/char')
-rw-r--r--hw/char/exynos4210_uart.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
index 6361df2ad3..9b21d201b3 100644
--- a/hw/char/exynos4210_uart.c
+++ b/hw/char/exynos4210_uart.c
@@ -553,7 +553,11 @@ static int exynos4210_uart_can_receive(void *opaque)
{
Exynos4210UartState *s = (Exynos4210UartState *)opaque;
- return fifo_empty_elements_number(&s->rx);
+ if (s->reg[I_(UFCON)] & UFCON_FIFO_ENABLE) {
+ return fifo_empty_elements_number(&s->rx);
+ } else {
+ return !(s->reg[I_(UTRSTAT)] & UTRSTAT_Rx_BUFFER_DATA_READY);
+ }
}
static void exynos4210_uart_receive(void *opaque, const uint8_t *buf, int size)