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