}
 
 static inline void
-mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg)
+mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb,
+                           struct mlx5e_accel_tx_state *accel,
+                           struct mlx5_wqe_eth_seg *eseg)
 {
        if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
                eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM;
                        eseg->cs_flags |= MLX5_ETH_WQE_L4_CSUM;
                        sq->stats->csum_partial++;
                }
+#ifdef CONFIG_MLX5_EN_TLS
+       } else if (unlikely(accel && accel->tls.tls_tisn)) {
+               eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM | MLX5_ETH_WQE_L4_CSUM;
+               sq->stats->csum_partial++;
+#endif
        } else if (unlikely(eseg->flow_table_metadata & cpu_to_be32(MLX5_ETH_WQE_FT_META_IPSEC))) {
                ipsec_txwqe_build_eseg_csum(sq, skb, eseg);
 
 }
 
 static bool mlx5e_txwqe_build_eseg(struct mlx5e_priv *priv, struct mlx5e_txqsq *sq,
-                                  struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg)
+                                  struct sk_buff *skb, struct mlx5e_accel_tx_state *accel,
+                                  struct mlx5_wqe_eth_seg *eseg)
 {
        if (unlikely(!mlx5e_accel_tx_eseg(priv, skb, eseg)))
                return false;
 
-       mlx5e_txwqe_build_eseg_csum(sq, skb, eseg);
+       mlx5e_txwqe_build_eseg_csum(sq, skb, accel, eseg);
 
        return true;
 }
                if (mlx5e_tx_skb_supports_mpwqe(skb, &attr)) {
                        struct mlx5_wqe_eth_seg eseg = {};
 
-                       if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &eseg)))
+                       if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &accel, &eseg)))
                                return NETDEV_TX_OK;
 
                        mlx5e_sq_xmit_mpwqe(sq, skb, &eseg, netdev_xmit_more());
        /* May update the WQE, but may not post other WQEs. */
        mlx5e_accel_tx_finish(sq, wqe, &accel,
                              (struct mlx5_wqe_inline_seg *)(wqe->data + wqe_attr.ds_cnt_inl));
-       if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &wqe->eth)))
+       if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &accel, &wqe->eth)))
                return NETDEV_TX_OK;
 
        mlx5e_sq_xmit_wqe(sq, skb, &attr, &wqe_attr, wqe, pi, netdev_xmit_more());
        mlx5e_sq_calc_wqe_attr(skb, &attr, &wqe_attr);
        pi = mlx5e_txqsq_get_next_pi(sq, wqe_attr.num_wqebbs);
        wqe = MLX5E_TX_FETCH_WQE(sq, pi);
-       mlx5e_txwqe_build_eseg_csum(sq, skb, &wqe->eth);
+       mlx5e_txwqe_build_eseg_csum(sq, skb, NULL, &wqe->eth);
        mlx5e_sq_xmit_wqe(sq, skb, &attr, &wqe_attr, wqe, pi, xmit_more);
 }
 
 
        mlx5i_txwqe_build_datagram(av, dqpn, dqkey, datagram);
 
-       mlx5e_txwqe_build_eseg_csum(sq, skb, eseg);
+       mlx5e_txwqe_build_eseg_csum(sq, skb, NULL, eseg);
 
        eseg->mss = attr.mss;