[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haiku-commits
Subject:    [haiku-commits] haiku: hrev55663 - src/system/kernel/arch/arm
From:       Adrien Destugues <pulkomandy () gmail ! com>
Date:       2021-11-24 13:38:17
Message-ID: 20211124133817.A25EC40736 () turing ! freelists ! org
[Download RAW message or body]

hrev55663 adds 1 changeset to branch 'master'
old head: 750ed8dd4136fb19dd8876bad087848e5c31e33e
new head: 191fa37376cec123f2bf43d226a0d8e89c6fdc05
overview: https://git.haiku-os.org/haiku/log/?qt=range&q=191fa37376ce+%5E750ed8dd4136

----------------------------------------------------------------------------

191fa37376ce: kernel/uart: fix GetChar for PL011
  
  Check RX buffer status when GetChar is called in no-wait mode.
  This fixes an 'infinite keypress' issue that used to occur
  after 16 keypresses.
  
  Change-Id: I47762de387b07c4fed46cc192cd3b81fdabfb270
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/4732
  Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>

                                     [ David Karoly <karolyd577@gmail.com> ]

----------------------------------------------------------------------------

Revision:    hrev55663
Commit:      191fa37376cec123f2bf43d226a0d8e89c6fdc05
URL:         https://git.haiku-os.org/haiku/commit/?id=191fa37376ce
Author:      David Karoly <karolyd577@gmail.com>
Date:        Wed Nov 24 13:29:41 2021 UTC
Committer:   Adrien Destugues <pulkomandy@gmail.com>
Commit-Date: Wed Nov 24 13:38:14 2021 UTC

----------------------------------------------------------------------------

1 file changed, 5 insertions(+), 1 deletion(-)
src/system/kernel/arch/arm/arch_uart_pl011.cpp | 6 +++++-

----------------------------------------------------------------------------

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);
 	}


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic