diff options
author | Jesper Nilsson <jesper.nilsson@axis.com> | 2009-08-31 18:28:26 +0200 |
---|---|---|
committer | Jesper Nilsson <jesper.nilsson@axis.com> | 2009-08-31 18:38:17 +0200 |
commit | e6cd19743bfc76ca81804c2a259e3a0d7b03fd73 (patch) | |
tree | 31c2212d3dbfcae281daae5f33a6e14b72cbb154 /drivers/net/cris | |
parent | a090ca2c840a3459642971f26bdbad96d2482e32 (diff) | |
download | op-kernel-dev-e6cd19743bfc76ca81804c2a259e3a0d7b03fd73.zip op-kernel-dev-e6cd19743bfc76ca81804c2a259e3a0d7b03fd73.tar.gz |
CRISv10: Don't autonegotiate if autonegotiation is off
If autonegotiation was disabled, we still set the
BMCR_ANENABLE and BMCR_ANRESTART, which resulted in autonegotiation
never being disabled.
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Reported-by: Julia Lawall <julia@diku.dk>
Diffstat (limited to 'drivers/net/cris')
-rw-r--r-- | drivers/net/cris/eth_v10.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/net/cris/eth_v10.c b/drivers/net/cris/eth_v10.c index 7a18dc7..d70d203 100644 --- a/drivers/net/cris/eth_v10.c +++ b/drivers/net/cris/eth_v10.c @@ -768,10 +768,24 @@ e100_negotiate(struct net_device* dev) e100_set_mdio_reg(dev, np->mii_if.phy_id, MII_ADVERTISE, data); - /* Renegotiate with link partner */ + data = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_BMCR); if (autoneg_normal) { - data = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_BMCR); - data |= BMCR_ANENABLE | BMCR_ANRESTART; + /* Renegotiate with link partner */ + data |= BMCR_ANENABLE | BMCR_ANRESTART; + } else { + /* Don't negotiate speed or duplex */ + data &= ~(BMCR_ANENABLE | BMCR_ANRESTART); + + /* Set speed and duplex static */ + if (current_speed_selection == 10) + data &= ~BMCR_SPEED100; + else + data |= BMCR_SPEED100; + + if (current_duplex != full) + data &= ~BMCR_FULLDPLX; + else + data |= BMCR_FULLDPLX; } e100_set_mdio_reg(dev, np->mii_if.phy_id, MII_BMCR, data); } |