summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/dpa
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/freescale/dpa')
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c2
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c46
2 files changed, 36 insertions, 12 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c
index 7821195..c599052 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c
@@ -1530,7 +1530,7 @@ int dpa_enable_tx_csum(struct dpa_priv_s *priv,
int ethertype = ntohs(skb->protocol);
int retval = 0;
- if (!priv->mac_dev || skb->ip_summed != CHECKSUM_PARTIAL)
+ if (skb->ip_summed != CHECKSUM_PARTIAL)
return 0;
/* Note: L3 csum seems to be already computed in sw, but we can't choose
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c
index 300c456..64857e5 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_shared.c
@@ -498,12 +498,43 @@ int __hot dpa_shared_tx(struct sk_buff *skb, struct net_device *net_dev)
dpa_bp_vaddr + dpa_fd_offset(&fd),
dpa_fd_length(&fd));
- /* Enable L3/L4 hardware checksum computation, if applicable */
- err = dpa_enable_tx_csum(priv, skb, &fd,
+ if (!priv->mac_dev)
+ fd.cmd |= FM_FD_CMD_DTC;
+ else {
+ /* Enable L3/L4 hardware checksum computation,
+ * if applicable
+ */
+ err = dpa_enable_tx_csum(priv, skb, &fd,
dpa_bp_vaddr + DPA_TX_PRIV_DATA_SIZE);
+
+ if (unlikely(err < 0)) {
+ if (netif_msg_tx_err(priv) && net_ratelimit())
+ netdev_err(net_dev,
+ "Tx HW csum error: %d\n", err);
+ percpu_priv->stats.tx_errors++;
+ goto l3_l4_csum_failed;
+ }
+ }
+
} else {
- err = dpa_enable_tx_csum(priv, skb, &fd,
- (char *)&parse_results);
+ if (!priv->mac_dev)
+ fd.cmd |= FM_FD_CMD_DTC;
+ else {
+ /* Enable L3/L4 hardware checksum computation,
+ * if applicable
+ */
+ err = dpa_enable_tx_csum(priv, skb, &fd,
+ (char *)&parse_results);
+
+ if (unlikely(err < 0)) {
+ if (netif_msg_tx_err(priv) && net_ratelimit())
+ netdev_err(net_dev,
+ "Tx HW csum error: %d\n", err);
+ percpu_priv->stats.tx_errors++;
+ goto l3_l4_csum_failed;
+ }
+
+ }
copy_to_unmapped_area(bm_buf_addr(&bmb) + DPA_TX_PRIV_DATA_SIZE,
&parse_results,
@@ -514,13 +545,6 @@ int __hot dpa_shared_tx(struct sk_buff *skb, struct net_device *net_dev)
dpa_fd_length(&fd));
}
- if (unlikely(err < 0)) {
- if (netif_msg_tx_err(priv) && net_ratelimit())
- netdev_err(net_dev, "Tx HW csum error: %d\n", err);
- percpu_priv->stats.tx_errors++;
- goto l3_l4_csum_failed;
- }
-
err = dpa_xmit(priv, &percpu_priv->stats, queue_mapping, &fd);
l3_l4_csum_failed: