|
|
@@ -2938,12 +2938,15 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
|
|
|
|
/* Manage tx mitigation */
|
|
|
tx_q->tx_count_frames += nfrags + 1;
|
|
|
- if (priv->tx_coal_frames <= tx_q->tx_count_frames) {
|
|
|
+ if (likely(priv->tx_coal_frames > tx_q->tx_count_frames) &&
|
|
|
+ !(priv->synopsys_id >= DWMAC_CORE_4_00 &&
|
|
|
+ (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
|
|
|
+ priv->hwts_tx_en)) {
|
|
|
+ stmmac_tx_timer_arm(priv, queue);
|
|
|
+ } else {
|
|
|
+ tx_q->tx_count_frames = 0;
|
|
|
stmmac_set_tx_ic(priv, desc);
|
|
|
priv->xstats.tx_set_ic_bit++;
|
|
|
- tx_q->tx_count_frames = 0;
|
|
|
- } else {
|
|
|
- stmmac_tx_timer_arm(priv, queue);
|
|
|
}
|
|
|
|
|
|
skb_tx_timestamp(skb);
|
|
|
@@ -3157,12 +3160,15 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
|
* element in case of no SG.
|
|
|
*/
|
|
|
tx_q->tx_count_frames += nfrags + 1;
|
|
|
- if (priv->tx_coal_frames <= tx_q->tx_count_frames) {
|
|
|
+ if (likely(priv->tx_coal_frames > tx_q->tx_count_frames) &&
|
|
|
+ !(priv->synopsys_id >= DWMAC_CORE_4_00 &&
|
|
|
+ (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
|
|
|
+ priv->hwts_tx_en)) {
|
|
|
+ stmmac_tx_timer_arm(priv, queue);
|
|
|
+ } else {
|
|
|
+ tx_q->tx_count_frames = 0;
|
|
|
stmmac_set_tx_ic(priv, desc);
|
|
|
priv->xstats.tx_set_ic_bit++;
|
|
|
- tx_q->tx_count_frames = 0;
|
|
|
- } else {
|
|
|
- stmmac_tx_timer_arm(priv, queue);
|
|
|
}
|
|
|
|
|
|
skb_tx_timestamp(skb);
|