On Tue, May 17, 2022 at 01:55:07PM -0400, Sean Anderson wrote: > ARM semihosting provides no provisions for determining if there is > pending input. The only way to determine if there is console input is to > do a read (and block until the user types something). For this reason, > we always return true for tstc (since you will always get input if you > try). However, this behavior can cause problems for code which expects > tstc to eventually be empty. In query_console_serial, there is the > following construct: > > /* empty input buffer */ > while (tstc()) > getchar(); > > with the current implementation, this effectively turns into an infinite > loop. To avoid this, fake tstc by returning false half of the time. This > is generally OK because the other common construct looks like > > do { > if (tstc()) > process(getchar()); > } while (!timeout()); > > so it's fine if we only read a new character every other loop. This will > break things like CYGACC_COMM_IF_GETC_TIMEOUT, but that could be > reworked to test on the timeout instead of calling tstc again (and > ymodem over semihosted serial is not that useful in the first place). > > Signed-off-by: Sean Anderson <sean.ander...@seco.com>
Applied to u-boot/next, thanks! -- Tom
signature.asc
Description: PGP signature