When RX Watchdog is disabled its currently not possible to configure TX
coalesce settings. Let user configure it anyway.

Signed-off-by: Jose Abreu <joab...@synopsys.com>

---
Cc: Giuseppe Cavallaro <peppe.cavall...@st.com>
Cc: Alexandre Torgue <alexandre.tor...@st.com>
Cc: Jose Abreu <joab...@synopsys.com>
Cc: "David S. Miller" <da...@davemloft.net>
Cc: Maxime Coquelin <mcoquelin.st...@gmail.com>
Cc: net...@vger.kernel.org
Cc: linux-st...@st-md-mailman.stormreply.com
Cc: linux-arm-ker...@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
 .../net/ethernet/stmicro/stmmac/stmmac_ethtool.c    | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
index 1c450105e5a6..1a768837ca72 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
@@ -746,8 +746,15 @@ static int stmmac_set_coalesce(struct net_device *dev,
            (ec->tx_max_coalesced_frames_high) || (ec->rate_sample_interval))
                return -EOPNOTSUPP;
 
-       if (ec->rx_coalesce_usecs == 0)
-               return -EINVAL;
+       if (priv->use_riwt && (ec->rx_coalesce_usecs > 0)) {
+               rx_riwt = stmmac_usec2riwt(ec->rx_coalesce_usecs, priv);
+
+               if ((rx_riwt > MAX_DMA_RIWT) || (rx_riwt < MIN_DMA_RIWT))
+                       return -EINVAL;
+
+               priv->rx_riwt = rx_riwt;
+               stmmac_rx_watchdog(priv, priv->ioaddr, priv->rx_riwt, rx_cnt);
+       }
 
        if ((ec->tx_coalesce_usecs == 0) &&
            (ec->tx_max_coalesced_frames == 0))
@@ -757,20 +764,10 @@ static int stmmac_set_coalesce(struct net_device *dev,
            (ec->tx_max_coalesced_frames > STMMAC_TX_MAX_FRAMES))
                return -EINVAL;
 
-       rx_riwt = stmmac_usec2riwt(ec->rx_coalesce_usecs, priv);
-
-       if ((rx_riwt > MAX_DMA_RIWT) || (rx_riwt < MIN_DMA_RIWT))
-               return -EINVAL;
-       else if (!priv->use_riwt)
-               return -EOPNOTSUPP;
-
        /* Only copy relevant parameters, ignore all others. */
        priv->tx_coal_frames = ec->tx_max_coalesced_frames;
        priv->tx_coal_timer = ec->tx_coalesce_usecs;
        priv->rx_coal_frames = ec->rx_max_coalesced_frames;
-       priv->rx_riwt = rx_riwt;
-       stmmac_rx_watchdog(priv, priv->ioaddr, priv->rx_riwt, rx_cnt);
-
        return 0;
 }
 
-- 
2.7.4

Reply via email to