diff --git a/src/system/kernel/arch/arm/arch_uart_pl011.cpp b/src/system/kernel/arch/arm/arch_uart_pl011.cpp index b2f23886e2..194c6a1a64 100644 --- a/src/system/kernel/arch/arm/arch_uart_pl011.cpp +++ b/src/system/kernel/arch/arm/arch_uart_pl011.cpp @@ -289,10 +289,14 @@ int ArchUARTPL011::GetChar(bool wait) { if (Enabled() == true) { - // Wait until a character is received? if (wait) { + // Wait until a character is received while ((In32(PL01x_FR) & PL01x_FR_RXFE) != 0) Barrier(); + } else { + // Check if there is any data available in RX fifo + if ((In32(PL01x_FR) & PL01x_FR_RXFE) != 0) + return -1; } return In32(PL01x_DR); }