net: stmmac: ethtool: Let user configure TX coalesce without RIWT
authorJose Abreu <Jose.Abreu@synopsys.com>
Wed, 4 Sep 2019 13:17:01 +0000 (15:17 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 5 Sep 2019 10:19:54 +0000 (12:19 +0200)
When RX Watchdog is disabled its currently not possible to configure TX
coalesce settings. Let user configure it anyway.

Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c

index 1c450105e5a67366afc4e33206c81da04eb5491d..1a768837ca728af9a7047db590a6ad40446f3ca5 100644 (file)
@@ -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;
 }