aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/amd/xgbe/xgbe-dev.c')
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-dev.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
index f6a7161e3b85..75e6e7e6baed 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -1658,10 +1658,15 @@ static int xgbe_dev_read(struct xgbe_channel *channel)
1658 1658
1659 /* Get the header length */ 1659 /* Get the header length */
1660 if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, FD)) { 1660 if (XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, FD)) {
1661 XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
1662 FIRST, 1);
1661 rdata->rx.hdr_len = XGMAC_GET_BITS_LE(rdesc->desc2, 1663 rdata->rx.hdr_len = XGMAC_GET_BITS_LE(rdesc->desc2,
1662 RX_NORMAL_DESC2, HL); 1664 RX_NORMAL_DESC2, HL);
1663 if (rdata->rx.hdr_len) 1665 if (rdata->rx.hdr_len)
1664 pdata->ext_stats.rx_split_header_packets++; 1666 pdata->ext_stats.rx_split_header_packets++;
1667 } else {
1668 XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
1669 FIRST, 0);
1665 } 1670 }
1666 1671
1667 /* Get the RSS hash */ 1672 /* Get the RSS hash */
@@ -1684,19 +1689,16 @@ static int xgbe_dev_read(struct xgbe_channel *channel)
1684 } 1689 }
1685 } 1690 }
1686 1691
1687 /* Get the packet length */ 1692 /* Not all the data has been transferred for this packet */
1688 rdata->rx.len = XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, PL); 1693 if (!XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, LD))
1689
1690 if (!XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, LD)) {
1691 /* Not all the data has been transferred for this packet */
1692 XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
1693 INCOMPLETE, 1);
1694 return 0; 1694 return 0;
1695 }
1696 1695
1697 /* This is the last of the data for this packet */ 1696 /* This is the last of the data for this packet */
1698 XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES, 1697 XGMAC_SET_BITS(packet->attributes, RX_PACKET_ATTRIBUTES,
1699 INCOMPLETE, 0); 1698 LAST, 1);
1699
1700 /* Get the packet length */
1701 rdata->rx.len = XGMAC_GET_BITS_LE(rdesc->desc3, RX_NORMAL_DESC3, PL);
1700 1702
1701 /* Set checksum done indicator as appropriate */ 1703 /* Set checksum done indicator as appropriate */
1702 if (netdev->features & NETIF_F_RXCSUM) 1704 if (netdev->features & NETIF_F_RXCSUM)
@@ -2730,8 +2732,10 @@ static int xgbe_init(struct xgbe_prv_data *pdata)
2730 2732
2731 /* Flush Tx queues */ 2733 /* Flush Tx queues */
2732 ret = xgbe_flush_tx_queues(pdata); 2734 ret = xgbe_flush_tx_queues(pdata);
2733 if (ret) 2735 if (ret) {
2736 netdev_err(pdata->netdev, "error flushing TX queues\n");
2734 return ret; 2737 return ret;
2738 }
2735 2739
2736 /* 2740 /*
2737 * Initialize DMA related features 2741 * Initialize DMA related features