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;
        }
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to