Author: sbruno
Date: Fri Sep  4 16:07:27 2015
New Revision: 287465
URL: https://svnweb.freebsd.org/changeset/base/287465

Log:
  igb(4): Update and fix HW errata
  - HW errata workaround for IPv6 offload w/ extension headers
  - Edited start of if_igb.c (Device IDs / #includes) to match ixgbe/ixl
  
  Differential Revision:        https://reviews.freebsd.org/D3165
  Submitted by: erj
  MFC after:    1 month
  Sponsored by: Intel Corporation

Modified:
  head/sys/dev/e1000/if_igb.c
  head/sys/dev/e1000/if_igb.h

Modified: head/sys/dev/e1000/if_igb.c
==============================================================================
--- head/sys/dev/e1000/if_igb.c Fri Sep  4 15:49:51 2015        (r287464)
+++ head/sys/dev/e1000/if_igb.c Fri Sep  4 16:07:27 2015        (r287465)
@@ -42,71 +42,12 @@
 #include "opt_altq.h"
 #endif
 
-#include <sys/param.h>
-#include <sys/systm.h>
-#ifndef IGB_LEGACY_TX
-#include <sys/buf_ring.h>
-#endif
-#include <sys/bus.h>
-#include <sys/endian.h>
-#include <sys/kernel.h>
-#include <sys/kthread.h>
-#include <sys/malloc.h>
-#include <sys/mbuf.h>
-#include <sys/module.h>
-#include <sys/rman.h>
-#include <sys/socket.h>
-#include <sys/sockio.h>
-#include <sys/sysctl.h>
-#include <sys/taskqueue.h>
-#include <sys/eventhandler.h>
-#include <sys/pcpu.h>
-#include <sys/smp.h>
-#include <machine/smp.h>
-#include <machine/bus.h>
-#include <machine/resource.h>
-
-#include <net/bpf.h>
-#include <net/ethernet.h>
-#include <net/if.h>
-#include <net/if_var.h>
-#include <net/if_arp.h>
-#include <net/if_dl.h>
-#include <net/if_media.h>
-#ifdef RSS
-#include <net/rss_config.h>
-#endif
-
-#include <net/if_types.h>
-#include <net/if_vlan_var.h>
-
-#include <netinet/in_systm.h>
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-#include <netinet/ip.h>
-#include <netinet/ip6.h>
-#include <netinet/tcp.h>
-#include <netinet/tcp_lro.h>
-#include <netinet/udp.h>
-
-#include <machine/in_cksum.h>
-#include <dev/led/led.h>
-#include <dev/pci/pcivar.h>
-#include <dev/pci/pcireg.h>
-
-#include "e1000_api.h"
-#include "e1000_82575.h"
 #include "if_igb.h"
 
 /*********************************************************************
- *  Set this to one to display debug statistics
- *********************************************************************/
-int    igb_display_debug_stats = 0;
-
-/*********************************************************************
  *  Driver version:
  *********************************************************************/
-char igb_driver_version[] = "version - 2.4.0";
+char igb_driver_version[] = "2.5.2";
 
 
 /*********************************************************************
@@ -121,60 +62,47 @@ char igb_driver_version[] = "version - 2
 
 static igb_vendor_info_t igb_vendor_info_array[] =
 {
-       { 0x8086, E1000_DEV_ID_82575EB_COPPER,  PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82575EB_FIBER_SERDES,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82575GB_QUAD_COPPER,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576,           PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576_NS,        PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576_NS_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576_FIBER,     PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576_SERDES,    PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576_SERDES_QUAD,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576_QUAD_COPPER,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576_QUAD_COPPER_ET2,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82576_VF,        PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82580_COPPER,    PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82580_FIBER,     PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82580_SERDES,    PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82580_SGMII,     PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82580_COPPER_DUAL,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_82580_QUAD_FIBER,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_DH89XXCC_SERDES, PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_DH89XXCC_SGMII,  PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_DH89XXCC_SFP,    PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_DH89XXCC_BACKPLANE,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I350_COPPER,     PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I350_FIBER,      PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I350_SERDES,     PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I350_SGMII,      PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I350_VF,         PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I210_COPPER,     PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I210_COPPER_IT,  PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I210_COPPER_OEM1,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I210_COPPER_FLASHLESS,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I210_SERDES_FLASHLESS,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I210_FIBER,      PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I210_SERDES,     PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I210_SGMII,      PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I211_COPPER,     PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I354_BACKPLANE_1GBPS,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I354_BACKPLANE_2_5GBPS,
-                                               PCI_ANY_ID, PCI_ANY_ID, 0},
-       { 0x8086, E1000_DEV_ID_I354_SGMII,      PCI_ANY_ID, PCI_ANY_ID, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82575EB_COPPER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82575EB_FIBER_SERDES, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82575GB_QUAD_COPPER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576_NS, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576_NS_SERDES, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576_FIBER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576_SERDES, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576_SERDES_QUAD, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576_QUAD_COPPER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576_QUAD_COPPER_ET2, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82576_VF, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82580_COPPER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82580_FIBER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82580_SERDES, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82580_SGMII, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82580_COPPER_DUAL, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_82580_QUAD_FIBER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_DH89XXCC_SERDES, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_DH89XXCC_SGMII, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_DH89XXCC_SFP, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_DH89XXCC_BACKPLANE, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I350_COPPER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I350_FIBER,  0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I350_SERDES, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I350_SGMII,  0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I350_VF, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I210_COPPER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I210_COPPER_IT, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I210_COPPER_OEM1, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I210_COPPER_FLASHLESS, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I210_SERDES_FLASHLESS, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I210_FIBER,  0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I210_SERDES, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I210_SGMII,  0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I211_COPPER, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I354_BACKPLANE_1GBPS, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I354_BACKPLANE_2_5GBPS, 0, 0, 0},
+       {IGB_INTEL_VENDOR_ID, E1000_DEV_ID_I354_SGMII,  0, 0, 0},
        /* required last entry */
-       { 0, 0, 0, 0, 0}
+       {0, 0, 0, 0, 0}
 };
 
 /*********************************************************************
@@ -423,7 +351,7 @@ SYSCTL_INT(_hw_igb, OID_AUTO, rx_process
 static int
 igb_probe(device_t dev)
 {
-       char            adapter_name[60];
+       char            adapter_name[256];
        uint16_t        pci_vendor_id = 0;
        uint16_t        pci_device_id = 0;
        uint16_t        pci_subvendor_id = 0;
@@ -433,7 +361,7 @@ igb_probe(device_t dev)
        INIT_DEBUGOUT("igb_probe: begin");
 
        pci_vendor_id = pci_get_vendor(dev);
-       if (pci_vendor_id != IGB_VENDOR_ID)
+       if (pci_vendor_id != IGB_INTEL_VENDOR_ID)
                return (ENXIO);
 
        pci_device_id = pci_get_device(dev);
@@ -446,11 +374,11 @@ igb_probe(device_t dev)
                    (pci_device_id == ent->device_id) &&
 
                    ((pci_subvendor_id == ent->subvendor_id) ||
-                   (ent->subvendor_id == PCI_ANY_ID)) &&
+                   (ent->subvendor_id == 0)) &&
 
                    ((pci_subdevice_id == ent->subdevice_id) ||
-                   (ent->subdevice_id == PCI_ANY_ID))) {
-                       sprintf(adapter_name, "%s %s",
+                   (ent->subdevice_id == 0))) {
+                       sprintf(adapter_name, "%s, Version - %s",
                                igb_strings[ent->index],
                                igb_driver_version);
                        device_set_desc_copy(dev, adapter_name);
@@ -458,7 +386,6 @@ igb_probe(device_t dev)
                }
                ent++;
        }
-
        return (ENXIO);
 }
 
@@ -490,7 +417,7 @@ igb_attach(device_t dev)
        adapter->dev = adapter->osdep.dev = dev;
        IGB_CORE_LOCK_INIT(adapter, device_get_nameunit(dev));
 
-       /* SYSCTL stuff */
+       /* SYSCTLs */
        SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
            SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
            OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
@@ -1030,7 +957,6 @@ igb_mq_start_locked(struct ifnet *ifp, s
            adapter->link_active == 0)
                return (ENETDOWN);
 
-
        /* Process the queue */
        while ((next = drbr_peek(ifp, txr->br)) != NULL) {
                if ((err = igb_xmit(txr, &next)) != 0) {
@@ -1367,6 +1293,7 @@ igb_init_locked(struct adapter *adapter)
                return;
        }
        igb_initialize_receive_units(adapter);
+       e1000_rx_fifo_flush_82575(&adapter->hw);
 
         /* Enable VLAN support */
        if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING)
@@ -3008,21 +2935,6 @@ igb_init_dmac(struct adapter *adapter, u
 
                E1000_WRITE_REG(hw, E1000_DMACR, reg);
 
-#ifdef I210_OBFF_SUPPORT
-               /*
-                * Set the OBFF Rx threshold to DMA Coalescing Rx
-                * threshold - 2KB and enable the feature in the
-                * hardware for I210.
-                */
-               if (hw->mac.type == e1000_i210) {
-                       int obff = dmac - 2;
-                       reg = E1000_READ_REG(hw, E1000_DOBFFCTL);
-                       reg &= ~E1000_DOBFFCTL_OBFFTHR_MASK;
-                       reg |= (obff & E1000_DOBFFCTL_OBFFTHR_MASK)
-                           | E1000_DOBFFCTL_EXIT_ACT_MASK;
-                       E1000_WRITE_REG(hw, E1000_DOBFFCTL, reg);
-               }
-#endif
                E1000_WRITE_REG(hw, E1000_DMCRTRH, 0);
 
                /* Set the interval before transition */
@@ -5675,7 +5587,7 @@ igb_update_stats_counters(struct adapter
 
        stats = (struct e1000_hw_stats  *)adapter->stats;
 
-       if(adapter->hw.phy.media_type == e1000_media_type_copper ||
+       if (adapter->hw.phy.media_type == e1000_media_type_copper ||
           (E1000_READ_REG(hw, E1000_STATUS) & E1000_STATUS_LU)) {
                stats->symerrs +=
                    E1000_READ_REG(hw,E1000_SYMERRS);
@@ -6140,18 +6052,18 @@ igb_add_hw_stats(struct adapter *adapter
                        "1023-1522 byte frames received");
        SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "good_octets_recvd", 
                        CTLFLAG_RD, &stats->gorc, 
-                       "Good Octets Received");
-       SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "total_octets_recvd", 
-                       CTLFLAG_RD, &stats->tor, 
-                       "Total Octets Received");
+                       "Good Octets Received");
+       SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "total_octets_recvd", 
+                       CTLFLAG_RD, &stats->tor, 
+                       "Total Octets Received");
 
        /* Packet Transmission Stats */
        SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "good_octets_txd", 
                        CTLFLAG_RD, &stats->gotc, 
                        "Good Octets Transmitted"); 
-       SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "total_octets_txd", 
-                       CTLFLAG_RD, &stats->tot, 
-                       "Total Octets Transmitted");
+       SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "total_octets_txd", 
+                       CTLFLAG_RD, &stats->tot, 
+                       "Total Octets Transmitted");
        SYSCTL_ADD_QUAD(ctx, stat_list, OID_AUTO, "total_pkts_txd",
                        CTLFLAG_RD, &stats->tpt,
                        "Total Packets Transmitted");
@@ -6412,7 +6324,7 @@ igb_sysctl_dmac(SYSCTL_HANDLER_ARGS)
 
        switch (adapter->dmac) {
                case 0:
-                       /*Disabling */
+                       /* Disabling */
                        break;
                case 1: /* Just enable and use default */
                        adapter->dmac = 1000;

Modified: head/sys/dev/e1000/if_igb.h
==============================================================================
--- head/sys/dev/e1000/if_igb.h Fri Sep  4 15:49:51 2015        (r287464)
+++ head/sys/dev/e1000/if_igb.h Fri Sep  4 16:07:27 2015        (r287465)
@@ -32,11 +32,66 @@
 ******************************************************************************/
 /*$FreeBSD$*/
 
-#ifndef _IGB_H_DEFINED_
-#define _IGB_H_DEFINED_
+#ifndef _IF_IGB_H_
+#define _IF_IGB_H_
 
-/* Tunables */
+#include <sys/param.h>
+#include <sys/systm.h>
+#ifndef IGB_LEGACY_TX
+#include <sys/buf_ring.h>
+#endif
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/kernel.h>
+#include <sys/kthread.h>
+#include <sys/malloc.h>
+#include <sys/mbuf.h>
+#include <sys/module.h>
+#include <sys/rman.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/sysctl.h>
+#include <sys/taskqueue.h>
+#include <sys/eventhandler.h>
+#include <sys/pcpu.h>
+#include <sys/smp.h>
+#include <machine/smp.h>
+#include <machine/bus.h>
+#include <machine/resource.h>
+
+#include <net/bpf.h>
+#include <net/ethernet.h>
+#include <net/if.h>
+#include <net/if_var.h>
+#include <net/if_arp.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#ifdef RSS
+#include <net/rss_config.h>
+#include <netinet/in_rss.h>
+#endif
 
+#include <net/if_types.h>
+#include <net/if_vlan_var.h>
+
+#include <netinet/in_systm.h>
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#include <netinet/ip.h>
+#include <netinet/ip6.h>
+#include <netinet/tcp.h>
+#include <netinet/tcp_lro.h>
+#include <netinet/udp.h>
+
+#include <machine/in_cksum.h>
+#include <dev/led/led.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+
+#include "e1000_api.h"
+#include "e1000_82575.h"
+
+/* Tunables */
 /*
  * IGB_TXD: Maximum number of Transmit Descriptors
  *
@@ -168,7 +223,7 @@
 /*
  * Micellaneous constants
  */
-#define IGB_VENDOR_ID                  0x8086
+#define IGB_INTEL_VENDOR_ID                    0x8086
 
 #define IGB_JUMBO_PBA                  0x00000028
 #define IGB_DEFAULT_PBA                        0x00000030
@@ -567,6 +622,6 @@ drbr_needs_enqueue(struct ifnet *ifp, st
 }
 #endif
 
-#endif /* _IGB_H_DEFINED_ */
+#endif /* _IF_IGB_H_ */
 
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to