DM9000: Use NSR to determine link-status on internal PHY
authorBen Dooks <ben-linux@fluff.org>
Tue, 24 Jun 2008 21:16:03 +0000 (22:16 +0100)
committerJeff Garzik <jgarzik@redhat.com>
Wed, 25 Jun 2008 02:57:58 +0000 (22:57 -0400)
The DM9000_NSR register contains a copy of the internal PHY's
link status which we can use to determine if the link is up
or down. This eliminates the more costly (and sleeping) PHY
read when using the DM9000's own PHY.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/net/dm9000.c

index 679c291107f563d88ddd2a8ca30258807e4f8078..7c38f6129b55a343b3a50c94a171177dede2bf07 100644 (file)
@@ -473,7 +473,14 @@ static int dm9000_nway_reset(struct net_device *dev)
 static u32 dm9000_get_link(struct net_device *dev)
 {
        board_info_t *dm = to_dm9000_board(dev);
-       return mii_link_ok(&dm->mii);
+       u32 ret;
+
+       if (dm->flags & DM9000_PLATF_EXT_PHY)
+               ret = mii_link_ok(&dm->mii);
+       else
+               ret = dm9000_read_locked(dm, DM9000_NSR) & NSR_LINKST ? 1 : 0;
+
+       return ret;
 }
 
 #define DM_EEPROM_MAGIC                (0x444D394B)