igb: workaround errata with wthresh on 82576

The 82576 has known issues which require the write threshold to be set to 1.
See:
	http://download.intel.com/design/network/specupdt/82576_SPECUPDATE.pdf

If not then single packets will hang in transmit ring until more arrive.
Simple tests like ping will fail.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Reviewed-by: Vincent Jardin <vincent.jardin@6wind.com>
This commit is contained in:
Stephen Hemminger 2013-05-30 10:12:35 -07:00 committed by Thomas Monjalon
parent 9b2027a70b
commit 7e9e49feea

View File

@ -1227,6 +1227,8 @@ eth_igb_tx_queue_setup(struct rte_eth_dev *dev,
txq->pthresh = tx_conf->tx_thresh.pthresh;
txq->hthresh = tx_conf->tx_thresh.hthresh;
txq->wthresh = tx_conf->tx_thresh.wthresh;
if (txq->wthresh > 0 && hw->mac.type == e1000_82576)
txq->wthresh = 1;
txq->queue_id = queue_idx;
txq->port_id = dev->data->port_id;
@ -1341,6 +1343,8 @@ eth_igb_rx_queue_setup(struct rte_eth_dev *dev,
rxq->pthresh = rx_conf->rx_thresh.pthresh;
rxq->hthresh = rx_conf->rx_thresh.hthresh;
rxq->wthresh = rx_conf->rx_thresh.wthresh;
if (rxq->wthresh > 0 && hw->mac.type == e1000_82576)
rxq->wthresh = 1;
rxq->drop_en = rx_conf->rx_drop_en;
rxq->rx_free_thresh = rx_conf->rx_free_thresh;
rxq->queue_id = queue_idx;