On Wed, 5 Feb 2025, Emile `iMil' Heitor wrote:
After several back-and-forths, thanks Martin, Simon and Taylor for your help, here's a cleaner approach based on prop_dictionary_util, avoiding #ifdefs:
Another day, another proposal! Here are the results of discussions about finally getting rid of delay() and instead checking LSR_TXRDY (aka LSR_THRE) or LSR_TSRE (aka LSR_TEMT) diff --git a/sys/dev/ic/com.c b/sys/dev/ic/com.c index d271b594346..082b5b8a985 100644 --- a/sys/dev/ic/com.c +++ b/sys/dev/ic/com.c @@ -536,6 +536,7 @@ com_attach_subr(struct com_softc *sc) struct tty *tp; uint32_t cpr; uint8_t lcr; + int timo; const char *fifo_msg = NULL; prop_dictionary_t dict; bool is_console = true; @@ -588,9 +589,13 @@ com_attach_subr(struct com_softc *sc) sc->sc_lcr = cflag2lcr(comcons_info.cflag); break; } + /* wait for output to finish */ + timo = 10000; + while (!ISSET(CSR_READ_1(regsp, COM_REG_LSR), + LSR_TXRDY | LSR_TSRE) && --timo) + continue; /* Make sure the console is always "hardwired". */ - delay(10000); /* wait for output to finish */ if (is_console) { SET(sc->sc_hwflags, COM_HW_CONSOLE); } ------------------------------------------------------------------------ Emile `iMil' Heitor <imil@{home.imil.net,NetBSD.org}> | https://imil.net