net: bcmgenet: only update UMAC_CMD if something changed

The link adjustment callback can be called as frequently as desired
by the PHY library, as such, let's avoid doing a Read/Modify/Write
sequence if nothing changed, since these register accesses can be
expensive.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Florian Fainelli 2014-07-21 17:42:39 -07:00 committed by David S. Miller
parent bb1fed7110
commit 240524089d
1 changed files with 3 additions and 2 deletions

View File

@ -136,17 +136,18 @@ static void bcmgenet_mii_setup(struct net_device *dev)
/* pause capability */ /* pause capability */
if (!phydev->pause) if (!phydev->pause)
cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE; cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE;
}
if (status_changed) {
reg = bcmgenet_umac_readl(priv, UMAC_CMD); reg = bcmgenet_umac_readl(priv, UMAC_CMD);
reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) | reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) |
CMD_HD_EN | CMD_HD_EN |
CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE); CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE);
reg |= cmd_bits; reg |= cmd_bits;
bcmgenet_umac_writel(priv, reg, UMAC_CMD); bcmgenet_umac_writel(priv, reg, UMAC_CMD);
}
if (status_changed)
phy_print_status(phydev); phy_print_status(phydev);
}
} }
void bcmgenet_mii_reset(struct net_device *dev) void bcmgenet_mii_reset(struct net_device *dev)