Skip to content

Commit

Permalink
stmmac: disable at run-time the EEE if not supported
Browse files Browse the repository at this point in the history
This patch is to disable the EEE (so HW and timers)
for example when the phy communicates that the EEE
can be supported anymore.

Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Giuseppe CAVALLARO authored and David S. Miller committed Mar 11, 2014
1 parent d25f06e commit 83bf79b
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -286,10 +286,25 @@ bool stmmac_eee_init(struct stmmac_priv *priv)

/* MAC core supports the EEE feature. */
if (priv->dma_cap.eee) {
int tx_lpi_timer = priv->tx_lpi_timer;

/* Check if the PHY supports EEE */
if (phy_init_eee(priv->phydev, 1))
if (phy_init_eee(priv->phydev, 1)) {
/* To manage at run-time if the EEE cannot be supported
* anymore (for example because the lp caps have been
* changed).
* In that case the driver disable own timers.
*/
if (priv->eee_active) {
pr_debug("stmmac: disable EEE\n");
del_timer_sync(&priv->eee_ctrl_timer);
priv->hw->mac->set_eee_timer(priv->ioaddr, 0,
tx_lpi_timer);
}
priv->eee_active = 0;
goto out;

}
/* Activate the EEE and start timers */
if (!priv->eee_active) {
priv->eee_active = 1;
init_timer(&priv->eee_ctrl_timer);
Expand All @@ -300,13 +315,13 @@ bool stmmac_eee_init(struct stmmac_priv *priv)

priv->hw->mac->set_eee_timer(priv->ioaddr,
STMMAC_DEFAULT_LIT_LS,
priv->tx_lpi_timer);
tx_lpi_timer);
} else
/* Set HW EEE according to the speed */
priv->hw->mac->set_eee_pls(priv->ioaddr,
priv->phydev->link);

pr_info("stmmac: Energy-Efficient Ethernet initialized\n");
pr_debug("stmmac: Energy-Efficient Ethernet initialized\n");

ret = true;
}
Expand Down

0 comments on commit 83bf79b

Please sign in to comment.