igc0@pci0:87:0:0: class=0x020000 rev=0x04 hdr=0x00 vendor=0x8086 device=0x125c subvendor=0x8086 subdevice=0x0000 vendor = 'Intel Corporation' device = 'Ethernet Controller I226-V' class = network subclass = ethernetigc1@pci0:88:0:0: class=0x020000 rev=0x04 hdr=0x00 vendor=0x8086 device=0x125b subvendor=0x8086 subdevice=0x0000 vendor = 'Intel Corporation' device = 'Ethernet Controller I226-LM' class = network subclass = ethernet
Since Jim form Jim's Garage says he is fine, it seems that those problems may have been fixed in the Linux drivers. Interestingly enough, there are no Intel OEM drivers for FreeBSD for either I225 or I226 in their current Intel Network Driver package 29.1.
if (test_bit(IGC_RING_FLAG_TX_DETECT_HANG, &tx_ring->flags)) { struct igc_hw *hw = &adapter->hw; /* Detect a transmit hang in hardware, this serializes the * check with the clearing of time_stamp and movement of i */ clear_bit(IGC_RING_FLAG_TX_DETECT_HANG, &tx_ring->flags); if (tx_buffer->next_to_watch && time_after(jiffies, tx_buffer->time_stamp + (adapter->tx_timeout_factor * HZ)) && !(rd32(IGC_STATUS) & IGC_STATUS_TXOFF) && (rd32(IGC_TDH(tx_ring->reg_idx)) != readl(tx_ring->tail)) && !tx_ring->oper_gate_closed) { /* detected Tx unit hang */ netdev_err(tx_ring->netdev, "Detected Tx Unit Hang\n" " Tx Queue <%d>\n" " TDH <%x>\n" " TDT <%x>\n" " next_to_use <%x>\n" " next_to_clean <%x>\n" "buffer_info[next_to_clean]\n" " time_stamp <%lx>\n" " next_to_watch <%p>\n" " jiffies <%lx>\n" " desc.status <%x>\n", tx_ring->queue_index, rd32(IGC_TDH(tx_ring->reg_idx)), readl(tx_ring->tail), tx_ring->next_to_use, tx_ring->next_to_clean, tx_buffer->time_stamp, tx_buffer->next_to_watch, jiffies, tx_buffer->next_to_watch->wb.status); netif_stop_subqueue(tx_ring->netdev, tx_ring->queue_index); /* we are about to reset, no point in enabling stuff */ return true; } }
/** * igc_tx_timeout - Respond to a Tx Hang * @netdev: network interface device structure * @txqueue: queue number that timed out **/static void igc_tx_timeout(struct net_device *netdev, unsigned int __always_unused txqueue){ struct igc_adapter *adapter = netdev_priv(netdev); struct igc_hw *hw = &adapter->hw; /* Do the reset outside of interrupt context */ adapter->tx_timeout_count++; schedule_work(&adapter->reset_task); wr32(IGC_EICS, (adapter->eims_enable_mask & ~adapter->eims_other));}
# ./nvmupdate64e -i -l[00:087:00:00]: Intel(R) Ethernet Controller I226-V Vendor : 8086 Device : 125C Subvendor : 8086 Subdevice : 0000 Revision : 4 LAN MAC : 5847CA888888 Alt MAC : 000000000000 SAN MAC : 000000000000 ETrackId : 80000303 SerialNumber : 5847CAFFFF76768D NVM Version : 2.23(2.17) PBA : G23456-000 VPD status : Not set VPD size : 0 NVM update : No config file entry checksum : Valid OROM update : No config file entry CIVD : 0.0.0 EFI : 0.1.4, checksum None[00:088:00:00]: Intel(R) Ethernet Controller I226-LM Vendor : 8086 Device : 125B Subvendor : 8086 Subdevice : 0000 Revision : 4 LAN MAC : 5847CA888889 Alt MAC : 000000000000 SAN MAC : 000000000000 ETrackId : 80000307 SerialNumber : 5847CAFFFF76768E NVM Version : 2.23(2.17) PBA : G23456-000 VPD status : Not set VPD size : 0 NVM update : No config file entry checksum : Valid