svn commit: r262203 - head/sys/dev/etherswitch/arswitch

Adrian Chadd adrian at FreeBSD.org
Wed Feb 19 05:35:42 UTC 2014


Author: adrian
Date: Wed Feb 19 05:35:41 2014
New Revision: 262203
URL: http://svnweb.freebsd.org/changeset/base/262203

Log:
  Change arswitch_ports_init() to arswitch_port_init(), and teach it to take
  a single port to setup.
  
  This may end up later being used as part of some logic to program
  the PHY for a single port, rather than having to reinitialise them
  all at once.
  
  Tested:
  
  * DB120

Modified:
  head/sys/dev/etherswitch/arswitch/arswitch.c

Modified: head/sys/dev/etherswitch/arswitch/arswitch.c
==============================================================================
--- head/sys/dev/etherswitch/arswitch/arswitch.c	Wed Feb 19 05:09:47 2014	(r262202)
+++ head/sys/dev/etherswitch/arswitch/arswitch.c	Wed Feb 19 05:35:41 2014	(r262203)
@@ -224,24 +224,23 @@ arswitch_set_vlan_mode(struct arswitch_s
 }
 
 static void
-arswitch_ports_init(struct arswitch_softc *sc)
+arswitch_port_init(struct arswitch_softc *sc, int port)
 {
-	int port;
 
 	/* Port0 - CPU */
-	arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_STS(0),
-	    (AR8X16_IS_SWITCH(sc, AR8216) ?
-	    AR8X16_PORT_STS_SPEED_100 : AR8X16_PORT_STS_SPEED_1000) |
-	    (AR8X16_IS_SWITCH(sc, AR8216) ? 0 : AR8X16_PORT_STS_RXFLOW) |
-	    (AR8X16_IS_SWITCH(sc, AR8216) ? 0 : AR8X16_PORT_STS_TXFLOW) |
-	    AR8X16_PORT_STS_RXMAC |
-	    AR8X16_PORT_STS_TXMAC |
-	    AR8X16_PORT_STS_DUPLEX);
-	arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0),
-	    arswitch_readreg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0)) &
-	    ~AR8X16_PORT_CTRL_HEADER);
-
-	for (port = 1; port <= sc->numphys; port++) { 
+	if (port == AR8X16_PORT_CPU) {
+		arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_STS(0),
+		    (AR8X16_IS_SWITCH(sc, AR8216) ?
+		    AR8X16_PORT_STS_SPEED_100 : AR8X16_PORT_STS_SPEED_1000) |
+		    (AR8X16_IS_SWITCH(sc, AR8216) ? 0 : AR8X16_PORT_STS_RXFLOW) |
+		    (AR8X16_IS_SWITCH(sc, AR8216) ? 0 : AR8X16_PORT_STS_TXFLOW) |
+		    AR8X16_PORT_STS_RXMAC |
+		    AR8X16_PORT_STS_TXMAC |
+		    AR8X16_PORT_STS_DUPLEX);
+		arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0),
+		    arswitch_readreg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0)) &
+		    ~AR8X16_PORT_CTRL_HEADER);
+	} else {
 		/* Set ports to auto negotiation. */
 		arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_STS(port),
 		    AR8X16_PORT_STS_LINK_AUTO);
@@ -256,6 +255,7 @@ arswitch_attach(device_t dev)
 {
 	struct arswitch_softc *sc;
 	int err = 0;
+	int port;
 
 	sc = device_get_softc(dev);
 
@@ -319,7 +319,9 @@ arswitch_attach(device_t dev)
 		return (err);
 
 	/* Initialize the switch ports. */
-	arswitch_ports_init(sc);
+	for (port = 0; port <= sc->numphys; port++) {
+		arswitch_port_init(sc, port);
+	}
 
 	/*
 	 * Attach the PHYs and complete the bus enumeration.


More information about the svn-src-all mailing list