aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mge
diff options
context:
space:
mode:
authorMarius Strobl <marius@FreeBSD.org>2010-11-07 11:12:29 +0000
committerMarius Strobl <marius@FreeBSD.org>2010-11-07 11:12:29 +0000
commit605d4f8b84e727c542eec73fceec034384cb7d5e (patch)
tree04556d2ac5cd72e1720ce6cc42639006bff64577 /sys/dev/mge
parent3d100f4fe9bc2a19da822d875963a43ba4c5af7c (diff)
Notes
Diffstat (limited to 'sys/dev/mge')
-rw-r--r--sys/dev/mge/if_mge.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/sys/dev/mge/if_mge.c b/sys/dev/mge/if_mge.c
index d36ce099ae6a..1b119b9e91a3 100644
--- a/sys/dev/mge/if_mge.c
+++ b/sys/dev/mge/if_mge.c
@@ -608,7 +608,7 @@ mge_attach(device_t dev)
struct mge_softc *sc;
struct ifnet *ifp;
uint8_t hwaddr[ETHER_ADDR_LEN];
- int i, error ;
+ int i, error, phy;
sc = device_get_softc(dev);
sc->dev = dev;
@@ -619,6 +619,13 @@ mge_attach(device_t dev)
/* Set chip version-dependent parameters */
mge_ver_params(sc);
+ /*
+ * We assume static PHY address <=> device unit mapping:
+ * PHY Address = MII_ADDR_BASE + devce unit.
+ * This is true for most Marvell boards.
+ */
+ phy = MII_ADDR_BASE + device_get_unit(dev);
+
/* Initialize mutexes */
mtx_init(&sc->transmit_lock, device_get_nameunit(dev), "mge TX lock", MTX_DEF);
mtx_init(&sc->receive_lock, device_get_nameunit(dev), "mge RX lock", MTX_DEF);
@@ -680,10 +687,11 @@ mge_attach(device_t dev)
ether_ifattach(ifp, hwaddr);
callout_init(&sc->wd_callout, 0);
- /* Probe PHY(s) */
- error = mii_phy_probe(dev, &sc->miibus, mge_ifmedia_upd, mge_ifmedia_sts);
+ /* Attach PHY(s) */
+ error = mii_attach(dev, &sc->miibus, ifp, mge_ifmedia_upd,
+ mge_ifmedia_sts, BMSR_DEFCAPMASK, phy, MII_OFFSET_ANY, 0);
if (error) {
- device_printf(dev, "MII failed to find PHY\n");
+ device_printf(dev, "attaching PHYs failed\n");
if_free(ifp);
sc->ifp = NULL;
mge_detach(dev);
@@ -1259,19 +1267,6 @@ mge_miibus_readreg(device_t dev, int phy, int reg)
{
uint32_t retries;
- /*
- * We assume static PHY address <=> device unit mapping:
- * PHY Address = MII_ADDR_BASE + devce unit.
- * This is true for most Marvell boards.
- *
- * Code below grants proper PHY detection on each device
- * unit.
- */
-
-
- if ((MII_ADDR_BASE + device_get_unit(dev)) != phy)
- return (0);
-
MGE_WRITE(sc_mge0, MGE_REG_SMI, 0x1fffffff &
(MGE_SMI_READ | (reg << 21) | (phy << 16)));
@@ -1290,9 +1285,6 @@ mge_miibus_writereg(device_t dev, int phy, int reg, int value)
{
uint32_t retries;
- if ((MII_ADDR_BASE + device_get_unit(dev)) != phy)
- return (0);
-
MGE_WRITE(sc_mge0, MGE_REG_SMI, 0x1fffffff &
(MGE_SMI_WRITE | (reg << 21) | (phy << 16) | (value & 0xffff)));