ec->rx_coalesce_usecs = pdata->rx_usecs;
        ec->rx_max_coalesced_frames = pdata->rx_frames;
 
+       ec->tx_coalesce_usecs = pdata->tx_usecs;
        ec->tx_max_coalesced_frames = pdata->tx_frames;
 
        return 0;
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
        struct xgbe_hw_if *hw_if = &pdata->hw_if;
        unsigned int rx_frames, rx_riwt, rx_usecs;
-       unsigned int tx_frames;
+       unsigned int tx_frames, tx_usecs;
+       unsigned int jiffy_us = jiffies_to_usecs(1);
 
        rx_riwt = hw_if->usec_to_riwt(pdata, ec->rx_coalesce_usecs);
        rx_usecs = ec->rx_coalesce_usecs;
                return -EINVAL;
        }
 
+       tx_usecs = ec->tx_coalesce_usecs;
        tx_frames = ec->tx_max_coalesced_frames;
 
        /* Check the bounds of values for Tx */
+       if (!tx_usecs) {
+               NL_SET_ERR_MSG_FMT_MOD(extack,
+                                      "tx-usecs must not be 0");
+               return -EINVAL;
+       }
+       if (tx_usecs > XGMAC_MAX_COAL_TX_TICK) {
+               NL_SET_ERR_MSG_FMT_MOD(extack, "tx-usecs is limited to %d usec",
+                                      XGMAC_MAX_COAL_TX_TICK);
+               return -EINVAL;
+       }
        if (tx_frames > pdata->tx_desc_count) {
                netdev_err(netdev, "tx-frames is limited to %d frames\n",
                           pdata->tx_desc_count);
                return -EINVAL;
        }
 
+       /* Round tx-usecs to nearest multiple of jiffy granularity */
+       if (tx_usecs % jiffy_us) {
+               tx_usecs = rounddown(tx_usecs, jiffy_us);
+               if (!tx_usecs)
+                       tx_usecs = jiffy_us;
+               NL_SET_ERR_MSG_FMT_MOD(extack,
+                                      "tx-usecs rounded to %u usec due to jiffy granularity (%u usec)",
+                                      tx_usecs, jiffy_us);
+       }
+
        pdata->rx_riwt = rx_riwt;
        pdata->rx_usecs = rx_usecs;
        pdata->rx_frames = rx_frames;
        hw_if->config_rx_coalesce(pdata);
 
+       pdata->tx_usecs = tx_usecs;
        pdata->tx_frames = tx_frames;
        hw_if->config_tx_coalesce(pdata);
 
 }
 
 static const struct ethtool_ops xgbe_ethtool_ops = {
-       .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS |
+       .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
                                     ETHTOOL_COALESCE_MAX_FRAMES,
        .get_drvinfo = xgbe_get_drvinfo,
        .get_msglevel = xgbe_get_msglevel,