|
@@ -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);
|
|
@@ -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;
|
|
|
}
|