Module Name:    src
Committed By:   snj
Date:           Sat Aug  5 03:49:35 UTC 2017

Modified Files:
        src/sys/dev/pci/ixgbe [netbsd-8]: ix_txrx.c ixgbe.c ixgbe_api.c
            ixgbe_type.h

Log Message:
Pull up following revision(s) (requested by msaitoh in ticket #175):
        sys/dev/pci/ixgbe/ix_txrx.c: 1.25-1.27
        sys/dev/pci/ixgbe/ixgbe.c: 1.91-1.95
        sys/dev/pci/ixgbe/ixgbe_type.h: 1.23-1.25
        sys/dev/pci/ixgbe/ixgbe_api.c: 1.16
sync ixg(4) up to ixgbe.c rev. 1.95:
- Increase total number of RX buffers on multiqueue.
- Fix the partial chain check in ixgbe_rx_discard(). This bug was
  added in ixgbe.c rev. 1.33.
- Fix a double free in ixgbe_rxeof().
- Print verbose output in ixgbe_update_link_status() correctly on 5Gbps
  and 2.5Gbps (NBASE-T) for X550T[12] and newer.
- Change hw.ixgN.ts to hw.ixgN.thermal_test. Same as FreeBSD.
- Fix a bug that ifconfig ixgN media 1000baseT and 10Gbase-T advertised
  additional unwanted speeds.
- Print PHY ID.
- Remove unused variable.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.24.2.1 src/sys/dev/pci/ixgbe/ix_txrx.c
cvs rdiff -u -r1.88.2.1 -r1.88.2.2 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.15 -r1.15.8.1 src/sys/dev/pci/ixgbe/ixgbe_api.c
cvs rdiff -u -r1.22 -r1.22.2.1 src/sys/dev/pci/ixgbe/ixgbe_type.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/ixgbe/ix_txrx.c
diff -u src/sys/dev/pci/ixgbe/ix_txrx.c:1.24 src/sys/dev/pci/ixgbe/ix_txrx.c:1.24.2.1
--- src/sys/dev/pci/ixgbe/ix_txrx.c:1.24	Thu May 18 08:25:37 2017
+++ src/sys/dev/pci/ixgbe/ix_txrx.c	Sat Aug  5 03:49:35 2017
@@ -59,7 +59,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 /*$FreeBSD: head/sys/dev/ixgbe/ix_txrx.c 301538 2016-06-07 04:51:50Z sephe $*/
-/*$NetBSD: ix_txrx.c,v 1.24 2017/05/18 08:25:37 msaitoh Exp $*/
+/*$NetBSD: ix_txrx.c,v 1.24.2.1 2017/08/05 03:49:35 snj Exp $*/
 
 #include "opt_inet.h"
 #include "opt_inet6.h"
@@ -1446,21 +1446,10 @@ fail:
 
 static void     
 ixgbe_free_receive_ring(struct rx_ring *rxr)
-{ 
-	struct ixgbe_rx_buf       *rxbuf;
+{
 
 	for (int i = 0; i < rxr->num_desc; i++) {
-		rxbuf = &rxr->rx_buffers[i];
-		if (rxbuf->buf != NULL) {
-			bus_dmamap_sync(rxr->ptag->dt_dmat, rxbuf->pmap,
-			    0, rxbuf->buf->m_pkthdr.len,
-			    BUS_DMASYNC_POSTREAD);
-			ixgbe_dmamap_unload(rxr->ptag, rxbuf->pmap);
-			rxbuf->buf->m_flags |= M_PKTHDR;
-			m_freem(rxbuf->buf);
-			rxbuf->buf = NULL;
-			rxbuf->flags = 0;
-		}
+		ixgbe_rx_discard(rxr, i);
 	}
 }
 
@@ -1510,7 +1499,8 @@ ixgbe_setup_receive_ring(struct rx_ring 
 	 * or size of jumbo mbufs may have changed.
 	 */
 	ixgbe_jcl_reinit(&adapter->jcl_head, rxr->ptag->dt_dmat,
-	    2 * adapter->num_rx_desc, adapter->rx_mbuf_sz);
+	    (2 * adapter->num_rx_desc) * adapter->num_queues,
+	    adapter->rx_mbuf_sz);
 
 	IXGBE_RX_LOCK(rxr);
 
@@ -1631,7 +1621,9 @@ fail:
 	 */
 	for (int i = 0; i < j; ++i) {
 		rxr = &adapter->rx_rings[i];
+		IXGBE_RX_LOCK(rxr);
 		ixgbe_free_receive_ring(rxr);
+		IXGBE_RX_UNLOCK(rxr);
 	}
 
 	return (ENOBUFS);
@@ -1685,15 +1677,7 @@ ixgbe_free_receive_buffers(struct rx_rin
 	if (rxr->rx_buffers != NULL) {
 		for (int i = 0; i < adapter->num_rx_desc; i++) {
 			rxbuf = &rxr->rx_buffers[i];
-			if (rxbuf->buf != NULL) {
-				bus_dmamap_sync(rxr->ptag->dt_dmat,
-				    rxbuf->pmap, 0, rxbuf->buf->m_pkthdr.len,
-				    BUS_DMASYNC_POSTREAD);
-				ixgbe_dmamap_unload(rxr->ptag, rxbuf->pmap);
-				rxbuf->buf->m_flags |= M_PKTHDR;
-				m_freem(rxbuf->buf);
-			}
-			rxbuf->buf = NULL;
+			ixgbe_rx_discard(rxr, i);
 			if (rxbuf->pmap != NULL) {
 				ixgbe_dmamap_destroy(rxr->ptag, rxbuf->pmap);
 				rxbuf->pmap = NULL;
@@ -1770,12 +1754,15 @@ ixgbe_rx_discard(struct rx_ring *rxr, in
 	** and mapping.
 	*/
 
-	if (rbuf->buf != NULL) {/* Partial chain ? */
-		rbuf->fmp->m_flags |= M_PKTHDR;
+	if (rbuf->fmp != NULL) {/* Partial chain ? */
+		bus_dmamap_sync(rxr->ptag->dt_dmat, rbuf->pmap, 0,
+		    rbuf->buf->m_pkthdr.len, BUS_DMASYNC_POSTREAD);
 		m_freem(rbuf->fmp);
 		rbuf->fmp = NULL;
 		rbuf->buf = NULL; /* rbuf->buf is part of fmp's chain */
 	} else if (rbuf->buf) {
+		bus_dmamap_sync(rxr->ptag->dt_dmat, rbuf->pmap, 0,
+		    rbuf->buf->m_pkthdr.len, BUS_DMASYNC_POSTREAD);
 		m_free(rbuf->buf);
 		rbuf->buf = NULL;
 	}
@@ -1869,6 +1856,9 @@ ixgbe_rxeof(struct ix_queue *que)
 			goto next_desc;
 		}
 
+		bus_dmamap_sync(rxr->ptag->dt_dmat, rbuf->pmap, 0,
+		    rbuf->buf->m_pkthdr.len, BUS_DMASYNC_POSTREAD);
+
 		/*
 		** On 82599 which supports a hardware
 		** LRO (called HW RSC), packets need

Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.1 src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.2
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.1	Tue Jul  4 14:57:19 2017
+++ src/sys/dev/pci/ixgbe/ixgbe.c	Sat Aug  5 03:49:35 2017
@@ -59,7 +59,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 /*$FreeBSD: head/sys/dev/ixgbe/if_ix.c 302384 2016-07-07 03:39:18Z sbruno $*/
-/*$NetBSD: ixgbe.c,v 1.88.2.1 2017/07/04 14:57:19 martin Exp $*/
+/*$NetBSD: ixgbe.c,v 1.88.2.2 2017/08/05 03:49:35 snj Exp $*/
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -71,6 +71,8 @@
 #include "vlan.h"
 
 #include <sys/cprng.h>
+#include <dev/mii/mii.h>
+#include <dev/mii/miivar.h>
 
 /*********************************************************************
  *  Driver version
@@ -722,6 +724,26 @@ ixgbe_attach(device_t parent, device_t d
 		break;
 	}
 
+	if (hw->phy.id != 0) {
+		uint16_t id1, id2;
+		int oui, model, rev;
+		const char *descr;
+
+		id1 = hw->phy.id >> 16;
+		id2 = hw->phy.id & 0xffff;
+		oui = MII_OUI(id1, id2);
+		model = MII_MODEL(id2);
+		rev = MII_REV(id2);
+		if ((descr = mii_get_descr(oui, model)) != NULL)
+			aprint_normal_dev(dev,
+			    "PHY: %s (OUI 0x%06x, model 0x%04x), rev. %d\n",
+			    descr, oui, model, rev);
+		else
+			aprint_normal_dev(dev,
+			    "PHY OUI 0x%06x, model 0x%04x, rev. %d\n",
+			    oui, model, rev);
+	}
+
 	/* hw.ix defaults init */
 	ixgbe_set_advertise(adapter, ixgbe_advertise_speed);
 	ixgbe_set_flowcntl(adapter, ixgbe_flow_control);
@@ -2131,6 +2153,9 @@ ixgbe_media_change(struct ifnet * ifp)
 	struct ifmedia *ifm = &adapter->media;
 	struct ixgbe_hw *hw = &adapter->hw;
 	ixgbe_link_speed speed = 0;
+	ixgbe_link_speed link_caps = 0;
+	bool negotiate = false;
+	s32 err = IXGBE_NOT_IMPLEMENTED;
 
 	INIT_DEBUGOUT("ixgbe_media_change: begin");
 
@@ -2147,10 +2172,19 @@ ixgbe_media_change(struct ifnet * ifp)
 	*/
 	switch (IFM_SUBTYPE(ifm->ifm_media)) {
 		case IFM_AUTO:
+			err = hw->mac.ops.get_link_capabilities(hw, &link_caps,
+			    &negotiate);
+			if (err != IXGBE_SUCCESS) {
+				device_printf(adapter->dev, "Unable to determine "
+				    "supported advertise speeds\n");
+				return (ENODEV);
+			}
+			speed |= link_caps;
+			break;
 		case IFM_10G_T:
-			speed |= IXGBE_LINK_SPEED_100_FULL;
 		case IFM_10G_LRM:
 		case IFM_10G_LR:
+		case IFM_10G_TWINAX:
 #ifndef IFM_ETH_XTYPE
 		case IFM_10G_SR: /* KR, too */
 		case IFM_10G_CX4: /* KX4 */
@@ -2158,12 +2192,9 @@ ixgbe_media_change(struct ifnet * ifp)
 		case IFM_10G_KR:
 		case IFM_10G_KX4:
 #endif
-			speed |= IXGBE_LINK_SPEED_1GB_FULL;
-		case IFM_10G_TWINAX:
 			speed |= IXGBE_LINK_SPEED_10GB_FULL;
 			break;
 		case IFM_1000_T:
-			speed |= IXGBE_LINK_SPEED_100_FULL;
 		case IFM_1000_LX:
 		case IFM_1000_SX:
 		case IFM_1000_KX:
@@ -2434,6 +2465,12 @@ ixgbe_update_link_status(struct adapter 
 				case IXGBE_LINK_SPEED_10GB_FULL:
 					bpsmsg = "10 Gbps";
 					break;
+				case IXGBE_LINK_SPEED_5GB_FULL:
+					bpsmsg = "5 Gbps";
+					break;
+				case IXGBE_LINK_SPEED_2_5GB_FULL:
+					bpsmsg = "2.5 Gbps";
+					break;
 				case IXGBE_LINK_SPEED_1GB_FULL:
 					bpsmsg = "1 Gbps";
 					break;
@@ -4684,7 +4721,7 @@ ixgbe_add_device_sysctls(struct adapter 
 
 	if (sysctl_createv(log, 0, &rnode, &cnode,
 	    CTLFLAG_READWRITE, CTLTYPE_INT,
-	    "ts", SYSCTL_DESCR("Thermal Test"),
+	    "thermal_test", SYSCTL_DESCR("Thermal Test"),
 	    ixgbe_sysctl_thermal_test, 0, (void *)adapter, 0, CTL_CREATE, CTL_EOL) != 0)
 		aprint_error_dev(dev, "could not create sysctl\n");
 
@@ -5468,8 +5505,8 @@ ixgbe_sysctl_thermal_test(SYSCTLFN_ARGS)
 {
 	struct sysctlnode node = *rnode;
 	struct adapter	*adapter = (struct adapter *)node.sysctl_data;
-	int		error, fire = 0;
 	struct ixgbe_hw *hw;
+	int error, fire = 0;
 
 	hw = &adapter->hw;
 

Index: src/sys/dev/pci/ixgbe/ixgbe_api.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_api.c:1.15 src/sys/dev/pci/ixgbe/ixgbe_api.c:1.15.8.1
--- src/sys/dev/pci/ixgbe/ixgbe_api.c:1.15	Mon Dec  5 08:50:29 2016
+++ src/sys/dev/pci/ixgbe/ixgbe_api.c	Sat Aug  5 03:49:35 2017
@@ -31,13 +31,15 @@
 
 ******************************************************************************/
 /*$FreeBSD: head/sys/dev/ixgbe/ixgbe_api.c 299200 2016-05-06 22:54:56Z pfg $*/
-/*$NetBSD: ixgbe_api.c,v 1.15 2016/12/05 08:50:29 msaitoh Exp $*/
+/*$NetBSD: ixgbe_api.c,v 1.15.8.1 2017/08/05 03:49:35 snj Exp $*/
 
 #include "ixgbe_api.h"
 #include "ixgbe_common.h"
 
+#define IXGBE_EMPTY_PARAM
+
 static const u32 ixgbe_mvals_base[IXGBE_MVALS_IDX_LIMIT] = {
-	IXGBE_MVALS_INIT()
+	IXGBE_MVALS_INIT(IXGBE_EMPTY_PARAM)
 };
 
 static const u32 ixgbe_mvals_X540[IXGBE_MVALS_IDX_LIMIT] = {

Index: src/sys/dev/pci/ixgbe/ixgbe_type.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22 src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22.2.1
--- src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22	Fri Jun  2 08:16:52 2017
+++ src/sys/dev/pci/ixgbe/ixgbe_type.h	Sat Aug  5 03:49:35 2017
@@ -31,7 +31,7 @@
 
 ******************************************************************************/
 /*$FreeBSD: head/sys/dev/ixgbe/ixgbe_type.h 299200 2016-05-06 22:54:56Z pfg $*/
-/*$NetBSD: ixgbe_type.h,v 1.22 2017/06/02 08:16:52 msaitoh Exp $*/
+/*$NetBSD: ixgbe_type.h,v 1.22.2.1 2017/08/05 03:49:35 snj Exp $*/
 
 #ifndef _IXGBE_TYPE_H_
 #define _IXGBE_TYPE_H_
@@ -510,6 +510,7 @@
 /* Tx DCA Control register : 128 of these (0-127) */
 #define IXGBE_DCA_TXCTRL_82599(_i)	(0x0600C + ((_i) * 0x40))
 #define IXGBE_TIPG			0x0CB00
+#define IXGBE_TIPG_IPGT_MASK		0x000000FF
 #define IXGBE_TXPBSIZE(_i)		(0x0CC00 + ((_i) * 4)) /* 8 of these */
 #define IXGBE_MNGTXMAP			0x0CD10
 #define IXGBE_TIPG_FIBER_DEFAULT	3
@@ -1052,6 +1053,24 @@ struct ixgbe_dmac_config {
 #define IXGBE_GSCN_2		0x11028
 #define IXGBE_GSCN_3		0x1102C
 #define IXGBE_FACTPS		0x10150
+
+/* X550 */
+#define IXGBE_PCI_ICAUSE	0x11520
+#define IXGBE_PCI_IENA		0x11528
+#define IXGBE_PCI_VMINDEX	0x11530
+#define IXGBE_PCI_VMPEND	0x11538
+#define IXGBE_PCI_DREVID	0x11540
+#define IXGBE_PCI_BYTCTH	0x11544
+#define IXGBE_PCI_BYTCTL	0x11548
+#define IXGBE_PCI_LATCT		0x11720 /* Denverton */
+#define IXGBE_PCI_LCBDATA	0x11734
+#define IXGBE_PCI_PKTCT		0x11740 /* Denverton */
+#define IXGBE_PCI_LCBADD	0x11788
+#define IXGBE_GSCL_1_X550	0x11800
+#define IXGBE_GSCL_2_X550	0x11804
+#define IXGBE_PCI_GSCL(_i)	(0x011810 + ((_i) * 4))
+#define IXGBE_PCI_GSCN(_i)	(0x011820 + ((_i) * 4))
+
 #define IXGBE_FACTPS_X540	IXGBE_FACTPS
 #define IXGBE_FACTPS_X550	IXGBE_FACTPS
 #define IXGBE_FACTPS_X550EM_x	IXGBE_FACTPS
@@ -1741,6 +1760,7 @@ enum {
 
 /* PAP bit masks*/
 #define IXGBE_PAP_TXPAUSECNT_MASK	0x0000FFFF /* Pause counter mask */
+#define IXGBE_PAP_PACE_MASK		0x000F0000 /* Pace bit mask */
 
 /* RMCS Bit Masks */
 #define IXGBE_RMCS_RRM			0x00000002 /* Rx Recycle Mode enable */
@@ -3835,7 +3855,6 @@ struct ixgbe_mac_info {
 	u32				max_tx_queues;
 	u32				max_rx_queues;
 	u32				orig_autoc;
-	u32 cached_autoc;
 	u8  san_mac_rar_index;
 	bool get_link_status;
 	u32				orig_autoc2;

Reply via email to