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

Adrian Chadd adrian at FreeBSD.org
Wed Feb 19 06:02:48 UTC 2014


Author: adrian
Date: Wed Feb 19 06:02:47 2014
New Revision: 262205
URL: http://svnweb.freebsd.org/changeset/base/262205

Log:
  Teach the PHY register path about the different MDIO bus address
  for the AR8327.
  
  Tested:
  
  * AR8327, DB120

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

Modified: head/sys/dev/etherswitch/arswitch/arswitch_phy.c
==============================================================================
--- head/sys/dev/etherswitch/arswitch/arswitch_phy.c	Wed Feb 19 06:01:40 2014	(r262204)
+++ head/sys/dev/etherswitch/arswitch/arswitch_phy.c	Wed Feb 19 06:02:47 2014	(r262205)
@@ -76,6 +76,7 @@ arswitch_readphy(device_t dev, int phy, 
 	struct arswitch_softc *sc;
 	uint32_t data = 0, ctrl;
 	int err, timeout;
+	uint32_t a;
 
 	sc = device_get_softc(dev);
 	ARSWITCH_LOCK_ASSERT(sc, MA_NOTOWNED);
@@ -85,8 +86,13 @@ arswitch_readphy(device_t dev, int phy, 
 	if (reg < 0 || reg >= 32)
 		return (ENXIO);
 
+	if (AR8X16_IS_SWITCH(sc, AR8327))
+		a = AR8327_REG_MDIO_CTRL;
+	else
+		a = AR8X16_REG_MDIO_CTRL;
+
 	ARSWITCH_LOCK(sc);
-	err = arswitch_writereg_msb(dev, AR8X16_REG_MDIO_CTRL,
+	err = arswitch_writereg_msb(dev, a,
 	    AR8X16_MDIO_CTRL_BUSY | AR8X16_MDIO_CTRL_MASTER_EN |
 	    AR8X16_MDIO_CTRL_CMD_READ |
 	    (phy << AR8X16_MDIO_CTRL_PHY_ADDR_SHIFT) |
@@ -95,13 +101,13 @@ arswitch_readphy(device_t dev, int phy, 
 	if (err != 0)
 		goto fail;
 	for (timeout = 100; timeout--; ) {
-		ctrl = arswitch_readreg_msb(dev, AR8X16_REG_MDIO_CTRL);
+		ctrl = arswitch_readreg_msb(dev, a);
 		if ((ctrl & AR8X16_MDIO_CTRL_BUSY) == 0)
 			break;
 	}
 	if (timeout < 0)
 		goto fail;
-	data = arswitch_readreg_lsb(dev, AR8X16_REG_MDIO_CTRL) &
+	data = arswitch_readreg_lsb(dev, a) &
 	    AR8X16_MDIO_CTRL_DATA_MASK;
 	ARSWITCH_UNLOCK(sc);
 	return (data);
@@ -117,6 +123,7 @@ arswitch_writephy(device_t dev, int phy,
 	struct arswitch_softc *sc;
 	uint32_t ctrl;
 	int err, timeout;
+	uint32_t a;
 
 	sc = device_get_softc(dev);
 	ARSWITCH_LOCK_ASSERT(sc, MA_NOTOWNED);
@@ -124,8 +131,13 @@ arswitch_writephy(device_t dev, int phy,
 	if (reg < 0 || reg >= 32)
 		return (ENXIO);
 
+	if (AR8X16_IS_SWITCH(sc, AR8327))
+		a = AR8327_REG_MDIO_CTRL;
+	else
+		a = AR8X16_REG_MDIO_CTRL;
+
 	ARSWITCH_LOCK(sc);
-	err = arswitch_writereg(dev, AR8X16_REG_MDIO_CTRL,
+	err = arswitch_writereg(dev, a,
 	    AR8X16_MDIO_CTRL_BUSY |
 	    AR8X16_MDIO_CTRL_MASTER_EN |
 	    AR8X16_MDIO_CTRL_CMD_WRITE |
@@ -135,7 +147,7 @@ arswitch_writephy(device_t dev, int phy,
 	if (err != 0)
 		goto out;
 	for (timeout = 100; timeout--; ) {
-		ctrl = arswitch_readreg(dev, AR8X16_REG_MDIO_CTRL);
+		ctrl = arswitch_readreg(dev, a);
 		if ((ctrl & AR8X16_MDIO_CTRL_BUSY) == 0)
 			break;
 	}


More information about the svn-src-all mailing list