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