diff options
Diffstat (limited to 'drivers/net/ethernet/amd/xgbe/xgbe-dev.c')
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 24 |
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 |