Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Jul 2015 20:16:38 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r285177 - stable/10/sys/dev/re
Message-ID:  <201507052016.t65KGcMC037446@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Sun Jul  5 20:16:38 2015
New Revision: 285177
URL: https://svnweb.freebsd.org/changeset/base/285177

Log:
  MFC: r281337
  
  Don't enable RX and TX before their initial configuration is done, i. e.
  after setting up interrupt moderation but before turning interrupts on.
  This matches what Realtek's r8168 Linux driver does as of version 8.039.00
  and fixes problems with certain incarnations of certain MAC revisions
  like the interface requiring an extra up/down-cycle after boot to start
  working or DMA configuration not being adhered to.
  
  PR:		193743, 197535
  Approved by:	re (kib)

Modified:
  stable/10/sys/dev/re/if_re.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/re/if_re.c
==============================================================================
--- stable/10/sys/dev/re/if_re.c	Sun Jul  5 19:34:45 2015	(r285176)
+++ stable/10/sys/dev/re/if_re.c	Sun Jul  5 20:16:38 2015	(r285177)
@@ -3195,11 +3195,6 @@ re_init_locked(struct rl_softc *sc)
 		    ~0x00080000);
 
 	/*
-	 * Enable transmit and receive.
-	 */
-	CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_TX_ENB|RL_CMD_RX_ENB);
-
-	/*
 	 * Set the initial TX configuration.
 	 */
 	if (sc->rl_testmode) {
@@ -3225,6 +3220,11 @@ re_init_locked(struct rl_softc *sc)
 		CSR_WRITE_2(sc, RL_INTRMOD, 0x5100);
 	}
 
+	/*
+	 * Enable transmit and receive.
+	 */
+	CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_TX_ENB | RL_CMD_RX_ENB);
+
 #ifdef DEVICE_POLLING
 	/*
 	 * Disable interrupts if we are polling.
@@ -3248,10 +3248,6 @@ re_init_locked(struct rl_softc *sc)
 
 	/* Start RX/TX process. */
 	CSR_WRITE_4(sc, RL_MISSEDPKT, 0);
-#ifdef notdef
-	/* Enable receiver and transmitter. */
-	CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_TX_ENB|RL_CMD_RX_ENB);
-#endif
 
 	/*
 	 * Initialize the timer interrupt register so that



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