Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Feb 2014 22:21:08 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r261528 - head/sys/dev/ed
Message-ID:  <201402052221.s15ML8aj075517@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Wed Feb  5 22:21:08 2014
New Revision: 261528
URL: http://svnweb.freebsd.org/changeset/base/261528

Log:
  Add bus space barriers for page switches missed in r260050.

Modified:
  head/sys/dev/ed/if_ed.c
  head/sys/dev/ed/if_ed_hpp.c

Modified: head/sys/dev/ed/if_ed.c
==============================================================================
--- head/sys/dev/ed/if_ed.c	Wed Feb  5 20:52:12 2014	(r261527)
+++ head/sys/dev/ed/if_ed.c	Wed Feb  5 22:21:08 2014	(r261528)
@@ -420,7 +420,11 @@ ed_stop_hw(struct ed_softc *sc)
 	/*
 	 * Stop everything on the interface, and select page 0 registers.
 	 */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 	/*
 	 * Wait for interface to enter stopped state, but limit # of checks to
@@ -528,7 +532,11 @@ ed_init_locked(struct ed_softc *sc)
 	/*
 	 * Set interface for page 0, Remote DMA complete, Stopped
 	 */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 	if (sc->isa16bit)
 		/*
@@ -649,7 +657,11 @@ ed_xmit(struct ed_softc *sc)
 	/*
 	 * Set NIC for page 0 register access
 	 */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 	/*
 	 * Set TX buffer start page
@@ -666,7 +678,11 @@ ed_xmit(struct ed_softc *sc)
 	/*
 	 * Set page 0, Remote DMA complete, Transmit Packet, and *Start*
 	 */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_TXP | ED_CR_STA);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	sc->xmit_busy = 1;
 
 	/*
@@ -913,7 +929,11 @@ ed_rint(struct ed_softc *sc)
 		/*
 		 * Set NIC to page 0 registers to update boundry register
 		 */
+		ed_nic_barrier(sc, ED_P0_CR, 1,
+		    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 		ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA);
+		ed_nic_barrier(sc, ED_P0_CR, 1,
+		    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 		ed_nic_outb(sc, ED_P0_BNRY, boundry);
 
 		/*
@@ -947,7 +967,11 @@ edintr(void *arg)
 	/*
 	 * Set NIC to page 0 registers
 	 */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 	/*
 	 * loop until there are no more new interrupts.  When the card goes
@@ -1165,7 +1189,11 @@ edintr(void *arg)
 		 * set in the transmit routine, is *okay* - it is 'edge'
 		 * triggered from low to high)
 		 */
+		ed_nic_barrier(sc, ED_P0_CR, 1,
+	  	  BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 		ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA);
+		ed_nic_barrier(sc, ED_P0_CR, 1,
+		    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 		/*
 		 * If the Network Talley Counters overflow, read them to reset
@@ -1367,7 +1395,11 @@ ed_pio_readmem(struct ed_softc *sc, bus_
 {
 	/* Regular Novell cards */
 	/* select page 0 registers */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, ED_CR_RD2 | ED_CR_STA);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 	/* round up to a word */
 	if (amount & 1)
@@ -1400,7 +1432,11 @@ ed_pio_writemem(struct ed_softc *sc, uin
 	int     maxwait = 200;	/* about 240us */
 
 	/* select page 0 registers */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, ED_CR_RD2 | ED_CR_STA);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 	/* reset remote DMA complete flag */
 	ed_nic_outb(sc, ED_P0_ISR, ED_ISR_RDC);
@@ -1457,7 +1493,11 @@ ed_pio_write_mbufs(struct ed_softc *sc, 
 		dma_len++;
 
 	/* select page 0 registers */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, ED_CR_RD2 | ED_CR_STA);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 	/* reset remote DMA complete flag */
 	ed_nic_outb(sc, ED_P0_ISR, ED_ISR_RDC);
@@ -1587,7 +1627,11 @@ ed_setrcr(struct ed_softc *sc)
 		 * runts and packets with CRC & alignment errors.
 		 */
 		/* Set page 0 registers */
+		ed_nic_barrier(sc, ED_P0_CR, 1,
+		    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 		ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP);
+		ed_nic_barrier(sc, ED_P0_CR, 1,
+		    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 		ed_nic_outb(sc, ED_P0_RCR, ED_RCR_PRO | ED_RCR_AM |
 			    ED_RCR_AB | ED_RCR_AR | ED_RCR_SEP | reg1);
@@ -1609,7 +1653,11 @@ ed_setrcr(struct ed_softc *sc)
 				ed_nic_outb(sc, ED_P1_MAR(i), ((u_char *) mcaf)[i]);
 
 			/* Set page 0 registers */
+			ed_nic_barrier(sc, ED_P0_CR, 1,
+			    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 			ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP);
+			ed_nic_barrier(sc, ED_P0_CR, 1,
+			    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 			ed_nic_outb(sc, ED_P0_RCR, ED_RCR_AM | ED_RCR_AB | reg1);
 		} else {
@@ -1622,6 +1670,8 @@ ed_setrcr(struct ed_softc *sc)
 				ed_nic_outb(sc, ED_P1_MAR(i), 0x00);
 
 			/* Set page 0 registers */
+			ed_nic_barrier(sc, ED_P0_CR, 1,
+			    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 			ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP);
 
 			ed_nic_outb(sc, ED_P0_RCR, ED_RCR_AB | reg1);

Modified: head/sys/dev/ed/if_ed_hpp.c
==============================================================================
--- head/sys/dev/ed/if_ed_hpp.c	Wed Feb  5 20:52:12 2014	(r261527)
+++ head/sys/dev/ed/if_ed_hpp.c	Wed Feb  5 22:21:08 2014	(r261528)
@@ -565,7 +565,11 @@ ed_hpp_write_mbufs(struct ed_softc *sc, 
 	int use_32bit_accesses = !(sc->hpp_id & ED_HPP_ID_16_BIT_ACCESS);
 
 	/* select page 0 registers */
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 	ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA);
+	ed_nic_barrier(sc, ED_P0_CR, 1,
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
 
 	/* reset remote DMA complete flag */
 	ed_nic_outb(sc, ED_P0_ISR, ED_ISR_RDC);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402052221.s15ML8aj075517>