diff options
| author | Gabriel Somlo <[email protected]> | 2024-06-07 14:23:42 -0400 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2024-06-13 21:54:09 +0530 |
| commit | 7830e987856eb1319c82664702892b6d50a93e7a (patch) | |
| tree | a192505c877efa7d518087bfda43cedfef88c64d /lib/utils/serial | |
| parent | 62e178a0a7b989d7cab9b2d4e33b291bc9a58c65 (diff) | |
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 <[email protected]>
Signed-off-by: Gabriel Somlo <[email protected]>
Reviewed-by: Anup Patel <[email protected]>
Diffstat (limited to 'lib/utils/serial')
| -rw-r--r-- | lib/utils/serial/litex-uart.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/utils/serial/litex-uart.c b/lib/utils/serial/litex-uart.c index f843bf38..caf86990 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 = { |
