diff options
author | Till Straumann <strauman@slac.stanford.edu> | 2009-04-15 03:44:41 +0000 |
---|---|---|
committer | Till Straumann <strauman@slac.stanford.edu> | 2009-04-15 03:44:41 +0000 |
commit | db93c2ffe0548c25d3eb2def1909fad4b68850e8 (patch) | |
tree | 596de277a4ea77e951010f667999673a507342b9 /cpukit | |
parent | Regenerate. (diff) | |
download | rtems-db93c2ffe0548c25d3eb2def1909fad4b68850e8.tar.bz2 |
2009-04-14 Till Straumann <strauman@slac.stanford.edu>
* libnetworking/rtems/rtems_mii_ioctl_kern.c: poll BMSR twice
to clear latched link-status low.
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/ChangeLog | 5 | ||||
-rw-r--r-- | cpukit/libnetworking/rtems/rtems_mii_ioctl_kern.c | 12 |
2 files changed, 17 insertions, 0 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index e9b50f0faf..25af4ccf74 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,8 @@ +2009-04-14 Till Straumann <strauman@slac.stanford.edu> + + * libnetworking/rtems/rtems_mii_ioctl_kern.c: poll BMSR twice + to clear latched link-status low. + 2009-04-14 Sebastian Huber <sebastian.huber@embedded-brains.de> * Makefile.am, preinstall.am, libmisc/shell/login.h: Removed login.h. diff --git a/cpukit/libnetworking/rtems/rtems_mii_ioctl_kern.c b/cpukit/libnetworking/rtems/rtems_mii_ioctl_kern.c index c1a202ce7c..1b036d6a96 100644 --- a/cpukit/libnetworking/rtems/rtems_mii_ioctl_kern.c +++ b/cpukit/libnetworking/rtems/rtems_mii_ioctl_kern.c @@ -102,6 +102,9 @@ rtems_mii_ioctl (struct rtems_mdio_info *info, void *uarg, int cmd, case SIOCGIFMEDIA: if (info->mdio_r (phy, uarg, MII_BMCR, &bmcr)) return EINVAL; + /* read BMSR twice to clear latched link status low */ + if (info->mdio_r (phy, uarg, MII_BMSR, &bmsr)) + return EINVAL; if (info->mdio_r (phy, uarg, MII_BMSR, &bmsr)) return EINVAL; if (info->mdio_r (phy, uarg, MII_ANER, &aner)) @@ -216,6 +219,15 @@ rtems_mii_ioctl (struct rtems_mdio_info *info, void *uarg, int cmd, if (!(bmsr2 & (tmp ? EXTSR_1000TFDX : EXTSR_1000THDX))) return EOPNOTSUPP; + + /* NOTE: gige standard demands auto-negotiation for gige links. + * Disabling autoneg did NOT work on the PHYs I tried + * (BCM5421S, intel 82540). + * I've seen drivers that simply change what they advertise + * to the desired gig mode and re-negotiate. + * We could do that here, too, but we don't see the point - + * If autoneg works fine then we can as well use it. + */ bmcr = BMCR_S1000; break; |