igb: workaround errata with wthresh on 82576
authorStephen Hemminger <shemminger@vyatta.com>
Thu, 30 May 2013 17:12:35 +0000 (10:12 -0700)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 17 Sep 2013 12:09:23 +0000 (14:09 +0200)
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>
lib/librte_pmd_e1000/igb_rxtx.c

index 28fe163..462bbc4 100644 (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;