aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Somlo <gsomlo@gmail.com>2024-06-07 14:23:42 -0400
committerAnup Patel <anup@brainfault.org>2024-06-13 21:54:09 +0530
commit7830e987856eb1319c82664702892b6d50a93e7a (patch)
treea192505c877efa7d518087bfda43cedfef88c64d
parent62e178a0a7b989d7cab9b2d4e33b291bc9a58c65 (diff)
downloadopensbi-7830e987856eb1319c82664702892b6d50a93e7a.zip
opensbi-7830e987856eb1319c82664702892b6d50a93e7a.tar.gz
opensbi-7830e987856eb1319c82664702892b6d50a93e7a.tar.bz2
lib: serial: fix RX path in litex-uart
When used to read characters from the terminal (e.g., when the SBI console is used via ecall from linux with `console=hvc0`), we must acknowledge receipt of each character to "pop" it off the LiteUART hardware queue, and allow the next character to be made available. Fixes: 52af6e4b ("lib: utils: Add LiteX UART support") Suggested-by: Dolu1990 <charles.papon.90@gmail.com> Signed-off-by: Gabriel Somlo <gsomlo@gmail.com> Reviewed-by: Anup Patel <anup@brainfault.org>
-rw-r--r--lib/utils/serial/litex-uart.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/utils/serial/litex-uart.c b/lib/utils/serial/litex-uart.c
index f843bf3..caf8699 100644
--- a/lib/utils/serial/litex-uart.c
+++ b/lib/utils/serial/litex-uart.c
@@ -20,6 +20,8 @@
#define UART_REG_EV_PENDING 4
#define UART_REG_EV_ENABLE 5
+#define UART_EV_RX 0x2
+
/* clang-format on */
static volatile u32 *uart_base;
@@ -42,10 +44,14 @@ static void litex_uart_putc(char ch)
static int litex_uart_getc(void)
{
+ int ret;
+
if (get_reg(UART_REG_RXEMPTY))
return -1;
- else
- return get_reg(UART_REG_RXTX);
+
+ ret = get_reg(UART_REG_RXTX);
+ set_reg(UART_REG_EV_PENDING, UART_EV_RX); /* ack. char read */
+ return ret;
}
static struct sbi_console_device litex_console = {