diff options
author | Florian Fainelli <f.fainelli@gmail.com> | 2014-07-21 20:42:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-07-21 22:49:11 -0400 |
commit | 240524089d7a5c0396656574e299beb3a55461e3 (patch) | |
tree | 21f67515090c5233e3480600af7b95aa2f953985 /drivers/net/ethernet/broadcom/genet/bcmmii.c | |
parent | bb1fed7110c287024dce6bee8152aad903104d96 (diff) |
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>
Diffstat (limited to 'drivers/net/ethernet/broadcom/genet/bcmmii.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/genet/bcmmii.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index add8d8596084..b1338c9e8abb 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c | |||
@@ -136,17 +136,18 @@ static void bcmgenet_mii_setup(struct net_device *dev) | |||
136 | /* pause capability */ | 136 | /* pause capability */ |
137 | if (!phydev->pause) | 137 | if (!phydev->pause) |
138 | cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE; | 138 | cmd_bits |= CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE; |
139 | } | ||
139 | 140 | ||
141 | if (status_changed) { | ||
140 | reg = bcmgenet_umac_readl(priv, UMAC_CMD); | 142 | reg = bcmgenet_umac_readl(priv, UMAC_CMD); |
141 | reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) | | 143 | reg &= ~((CMD_SPEED_MASK << CMD_SPEED_SHIFT) | |
142 | CMD_HD_EN | | 144 | CMD_HD_EN | |
143 | CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE); | 145 | CMD_RX_PAUSE_IGNORE | CMD_TX_PAUSE_IGNORE); |
144 | reg |= cmd_bits; | 146 | reg |= cmd_bits; |
145 | bcmgenet_umac_writel(priv, reg, UMAC_CMD); | 147 | bcmgenet_umac_writel(priv, reg, UMAC_CMD); |
146 | } | ||
147 | 148 | ||
148 | if (status_changed) | ||
149 | phy_print_status(phydev); | 149 | phy_print_status(phydev); |
150 | } | ||
150 | } | 151 | } |
151 | 152 | ||
152 | void bcmgenet_mii_reset(struct net_device *dev) | 153 | void bcmgenet_mii_reset(struct net_device *dev) |