PERFORCE change 136565 for review
Randall R. Stewart
rrs at FreeBSD.org
Sat Mar 1 11:32:58 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=136565
Change 136565 by rrs at rrs-mips2-jnpr on 2008/03/01 11:32:49
A few more tweaks that get us down to only 2 BUSY's
Affected files ...
.. //depot/projects/mips2-jnpr/src/sys/mips/mips32/octeon32/uart_dev_oct16550.c#14 edit
Differences ...
==== //depot/projects/mips2-jnpr/src/sys/mips/mips32/octeon32/uart_dev_oct16550.c#14 (text+ko) ====
@@ -343,9 +343,10 @@
static inline void
oct16550_wait_txhr_empty(struct uart_bas *bas, int limit, int delay)
{
- while (((uart_getreg(bas, OCT_REG_LSR) & LSR_THRE) == 0) &&
- ((uart_getreg(bas, OCT_REG_USR) & USR_TX_FIFO_NOTFULL) == 0) && --limit)
+ while (((uart_getreg(bas, OCT_REG_LSR) & LSR_THRE) == 0) && --limit) {
+ (void)uart_getreg(bas, OCT_REG_USR);
DELAY(delay);
+ }
}
static void
@@ -653,15 +654,17 @@
ipend |= SER_INT_SIGCHG;
} else if (iir == IIR_BUSY) {
- uint8_t niir;
+ uint8_t niir, usr;
+ int delay;
+
+ /* 1/10th the time to transmit 1 character (estimate). */
+ delay = oct16550_delay(bas);
+ oct16550_wait_txhr_empty(bas, 100, delay);
uart_got_busy++;
ipend |= SER_INT_TXIDLE;
niir = uart_getreg(bas, OCT_REG_IIR);
lsr = uart_getreg(bas, OCT_REG_LSR);
- if(( uart_got_busy % 100000 ) == 0) {
- printf("Now gotten %lld busy's lsr:%x iir:%x niir:%x\n",
- uart_got_busy, iir, lsr, niir);
- }
+ usr = uart_getreg(bas, OCT_REG_USR);
}
}
uart_unlock(sc->sc_hwmtx);
@@ -821,11 +824,13 @@
{
struct oct16550_softc *oct16550 = (struct oct16550_softc *)sc;
struct uart_bas *bas;
+ uint8_t ier;
int i;
bas = &sc->sc_bas;
uart_lock(sc->sc_hwmtx);
oct16550_wait_txhr_empty(bas, 100, oct16550_delay(bas));
+ ier = uart_getreg(bas, OCT_REG_IER);
uart_setreg(bas, OCT_REG_IER, oct16550->ier | IER_ETXRDY);
uart_barrier(bas);
More information about the p4-projects
mailing list