Index: sys/arch/evbarm/dev/plcom.c =================================================================== RCS file: /cvsroot/src/sys/arch/evbarm/dev/plcom.c,v retrieving revision 1.40 diff -u -p -u -r1.40 plcom.c --- sys/arch/evbarm/dev/plcom.c 25 Jul 2012 07:26:17 -0000 1.40 +++ sys/arch/evbarm/dev/plcom.c 11 Aug 2012 08:58:25 -0000 @@ -485,11 +485,16 @@ plcom_attach_subr(struct plcom_softc *sc * The PL010 has a 16-byte fifo, but the tx interrupt * triggers when there is space for 8 more bytes. */ - sc->sc_fifolen = 8; + sc->sc_fifolen = 8; /* XXX bump to 16? */ + sc->sc_fifotrigger = 8; break; case PLCOM_TYPE_PL011: /* Some revisions have a 32 byte TX FIFO */ sc->sc_fifolen = 16; + sc->sc_fifotrigger = 8; + PWRITE4(pi, PL011COM_IFLS, + PL011_IFLS_RXIFLS(PL011_IFLS_1HALF) | + PL011_IFLS_TXIFLS(PL011_IFLS_1HALF)); break; } } @@ -2201,8 +2206,8 @@ plcomintr(void *arg) int n; n = sc->sc_tbc; - if (n > sc->sc_fifolen) - n = sc->sc_fifolen; + if (n > sc->sc_fifotrigger) + n = sc->sc_fifotrigger; PWRITEM1(pi, PL01XCOM_DR, sc->sc_tba, n); sc->sc_tbc -= n; sc->sc_tba += n; Index: sys/arch/evbarm/dev/plcomreg.h =================================================================== RCS file: /cvsroot/src/sys/arch/evbarm/dev/plcomreg.h,v retrieving revision 1.4 diff -u -p -u -r1.4 plcomreg.h --- sys/arch/evbarm/dev/plcomreg.h 25 Jul 2012 07:26:17 -0000 1.4 +++ sys/arch/evbarm/dev/plcomreg.h 11 Aug 2012 08:58:25 -0000 @@ -106,6 +106,15 @@ #define PL01X_MSR_CTS PL01X_FR_CTS #define PL011_MSR_RI PL011_FR_RI +/* ifls */ +#define PL011_IFLS_1EIGTH 0 +#define PL011_IFLS_1QUARTER 1 +#define PL011_IFLS_1HALF 2 +#define PL011_IFLS_3QUARTERS 3 +#define PL011_IFLS_7EIGTHS 4 +#define PL011_IFLS_RXIFLS(x) (((x) & 0x7) << 3) +#define PL011_IFLS_TXIFLS(x) (((x) & 0x7) << 0) + /* All interrupt status/clear registers */ #define PL011_INT_OE 0x400 #define PL011_INT_BE 0x200 Index: sys/arch/evbarm/dev/plcomvar.h =================================================================== RCS file: /cvsroot/src/sys/arch/evbarm/dev/plcomvar.h,v retrieving revision 1.11 diff -u -p -u -r1.11 plcomvar.h --- sys/arch/evbarm/dev/plcomvar.h 25 Jul 2012 07:26:18 -0000 1.11 +++ sys/arch/evbarm/dev/plcomvar.h 11 Aug 2012 08:58:25 -0000 @@ -112,7 +112,8 @@ struct plcom_softc { int sc_hwflags, sc_swflags; - u_int sc_fifolen; + u_int sc_fifolen, + sc_fifotrigger; u_int sc_r_hiwat, sc_r_lowat;