Module Name:    src
Committed By:   martin
Date:           Tue Aug  7 13:33:23 UTC 2018

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

Log Message:
Pull up following revision(s) (requested by msaitoh in ticket #961):

        sys/dev/pci/ixgbe/ixgbe_x550.c: revision 1.13
        sys/dev/pci/ixgbe/ixgbe.h: revision 1.51
        sys/dev/pci/ixgbe/ixgbe_type.h: revision 1.36
        sys/dev/pci/ixgbe/ixgbe_osdep.h: revision 1.23
        sys/dev/pci/ixgbe/ixgbe_netbsd.c: revision 1.8
        sys/dev/pci/ixgbe/ixgbe.c: revision 1.163
        sys/dev/pci/ixgbe/ix_txrx.c: revision 1.49

  Add force_10_100_autonego sysctl. The default value is 0(false).

This sysctl is only for 550EM_a with PHY firmware for a while.

  Make jcl allocation per queue to reduce mutex spin. Tested by me and
knakahara.


To generate a diff of this commit:
cvs rdiff -u -r1.24.2.11 -r1.24.2.12 src/sys/dev/pci/ixgbe/ix_txrx.c
cvs rdiff -u -r1.88.2.21 -r1.88.2.22 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.24.6.13 -r1.24.6.14 src/sys/dev/pci/ixgbe/ixgbe.h
cvs rdiff -u -r1.6.2.1 -r1.6.2.2 src/sys/dev/pci/ixgbe/ixgbe_netbsd.c
cvs rdiff -u -r1.17.6.4 -r1.17.6.5 src/sys/dev/pci/ixgbe/ixgbe_osdep.h
cvs rdiff -u -r1.22.2.6 -r1.22.2.7 src/sys/dev/pci/ixgbe/ixgbe_type.h
cvs rdiff -u -r1.5.6.4 -r1.5.6.5 src/sys/dev/pci/ixgbe/ixgbe_x550.c

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.2.11 src/sys/dev/pci/ixgbe/ix_txrx.c:1.24.2.12
--- src/sys/dev/pci/ixgbe/ix_txrx.c:1.24.2.11	Sat Jun  9 14:59:43 2018
+++ src/sys/dev/pci/ixgbe/ix_txrx.c	Tue Aug  7 13:33:23 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ix_txrx.c,v 1.24.2.11 2018/06/09 14:59:43 martin Exp $ */
+/* $NetBSD: ix_txrx.c,v 1.24.2.12 2018/08/07 13:33:23 martin Exp $ */
 
 /******************************************************************************
 
@@ -1343,7 +1343,7 @@ ixgbe_refresh_mbufs(struct rx_ring *rxr,
 	while (j != limit) {
 		rxbuf = &rxr->rx_buffers[i];
 		if (rxbuf->buf == NULL) {
-			mp = ixgbe_getjcl(&adapter->jcl_head, M_NOWAIT,
+			mp = ixgbe_getjcl(&rxr->jcl_head, M_NOWAIT,
 			    MT_DATA, M_PKTHDR, rxr->mbuf_sz);
 			if (mp == NULL) {
 				rxr->no_jmbuf.ev_count++;
@@ -1505,6 +1505,17 @@ ixgbe_setup_receive_ring(struct rx_ring 
 	/* Free current RX buffer structs and their mbufs */
 	ixgbe_free_receive_ring(rxr);
 
+	IXGBE_RX_UNLOCK(rxr);
+	/*
+	 * Now reinitialize our supply of jumbo mbufs.  The number
+	 * or size of jumbo mbufs may have changed.
+	 * Assume all of rxr->ptag are the same.
+	 */
+	ixgbe_jcl_reinit(adapter, rxr->ptag->dt_dmat, rxr,
+	    (2 * adapter->num_rx_desc), adapter->rx_mbuf_sz);
+
+	IXGBE_RX_LOCK(rxr);
+
 	/* Now replenish the mbufs */
 	for (int j = 0; j != rxr->num_desc; ++j) {
 		struct mbuf *mp;
@@ -1534,7 +1545,7 @@ ixgbe_setup_receive_ring(struct rx_ring 
 #endif /* DEV_NETMAP */
 
 		rxbuf->flags = 0;
-		rxbuf->buf = ixgbe_getjcl(&adapter->jcl_head, M_NOWAIT,
+		rxbuf->buf = ixgbe_getjcl(&rxr->jcl_head, M_NOWAIT,
 		    MT_DATA, M_PKTHDR, adapter->rx_mbuf_sz);
 		if (rxbuf->buf == NULL) {
 			error = ENOBUFS;
@@ -1611,15 +1622,6 @@ ixgbe_setup_receive_structures(struct ad
 	struct rx_ring *rxr = adapter->rx_rings;
 	int            j;
 
-	/*
-	 * Now reinitialize our supply of jumbo mbufs.  The number
-	 * or size of jumbo mbufs may have changed.
-	 * Assume all of rxr->ptag are the same.
-	 */
-	ixgbe_jcl_reinit(adapter, rxr->ptag->dt_dmat,
-	    (2 * adapter->num_rx_desc) * adapter->num_queues,
-	    adapter->rx_mbuf_sz);
-
 	for (j = 0; j < adapter->num_queues; j++, rxr++)
 		if (ixgbe_setup_receive_ring(rxr))
 			goto fail;

Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.21 src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.22
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.88.2.21	Thu Jul 26 23:21:54 2018
+++ src/sys/dev/pci/ixgbe/ixgbe.c	Tue Aug  7 13:33:23 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.88.2.21 2018/07/26 23:21:54 snj Exp $ */
+/* $NetBSD: ixgbe.c,v 1.88.2.22 2018/08/07 13:33:23 martin Exp $ */
 
 /******************************************************************************
 
@@ -3315,6 +3315,15 @@ ixgbe_add_device_sysctls(struct adapter 
 			aprint_error_dev(dev, "could not create sysctl\n");
 	}
 
+	if ((hw->mac.type == ixgbe_mac_X550EM_a)
+	    && (hw->phy.type == ixgbe_phy_fw))
+		if (sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_READWRITE,
+		    CTLTYPE_BOOL, "force_10_100_autonego",
+		    SYSCTL_DESCR("Force autonego on 10M and 100M"),
+		    NULL, 0, &hw->phy.force_10_100_autonego, 0,
+		    CTL_CREATE, CTL_EOL) != 0)
+			aprint_error_dev(dev, "could not create sysctl\n");
+
 	if (adapter->feat_cap & IXGBE_FEATURE_EEE) {
 		if (sysctl_createv(log, 0, &rnode, &cnode, CTLFLAG_READWRITE,
 		    CTLTYPE_INT, "eee_state",

Index: src/sys/dev/pci/ixgbe/ixgbe.h
diff -u src/sys/dev/pci/ixgbe/ixgbe.h:1.24.6.13 src/sys/dev/pci/ixgbe/ixgbe.h:1.24.6.14
--- src/sys/dev/pci/ixgbe/ixgbe.h:1.24.6.13	Thu Jul 26 23:55:30 2018
+++ src/sys/dev/pci/ixgbe/ixgbe.h	Tue Aug  7 13:33:23 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.h,v 1.24.6.13 2018/07/26 23:55:30 snj Exp $ */
+/* $NetBSD: ixgbe.h,v 1.24.6.14 2018/08/07 13:33:23 martin Exp $ */
 
 /******************************************************************************
   SPDX-License-Identifier: BSD-3-Clause
@@ -417,6 +417,9 @@ struct rx_ring {
 #endif
 	struct ixgbe_rx_buf	*rx_buffers;
 	ixgbe_dma_tag_t		*ptag;
+	u16	                last_rx_mbuf_sz;
+	u32                	last_num_rx_desc;
+	ixgbe_extmem_head_t	jcl_head;
 
 	u64			bytes; /* Used for AIM calc */
 	u64			packets;
@@ -602,7 +605,6 @@ struct adapter {
 
 	struct sysctllog	*sysctllog;
 	const struct sysctlnode *sysctltop;
-	ixgbe_extmem_head_t jcl_head;
 };
 
 /* Precision Time Sync (IEEE 1588) defines */
@@ -752,7 +754,8 @@ bool ixgbe_rxeof(struct ix_queue *);
 const struct sysctlnode *ixgbe_sysctl_instance(struct adapter *);
 
 /* For NetBSD */
-void ixgbe_jcl_reinit(struct adapter *, bus_dma_tag_t, int, size_t);
+void ixgbe_jcl_reinit(struct adapter *, bus_dma_tag_t, struct rx_ring *,
+    int, size_t);
 
 #include "ixgbe_bypass.h"
 #include "ixgbe_fdir.h"

Index: src/sys/dev/pci/ixgbe/ixgbe_netbsd.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_netbsd.c:1.6.2.1 src/sys/dev/pci/ixgbe/ixgbe_netbsd.c:1.6.2.2
--- src/sys/dev/pci/ixgbe/ixgbe_netbsd.c:1.6.2.1	Sat Jun  9 14:59:43 2018
+++ src/sys/dev/pci/ixgbe/ixgbe_netbsd.c	Tue Aug  7 13:33:23 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_netbsd.c,v 1.6.2.1 2018/06/09 14:59:43 martin Exp $ */
+/* $NetBSD: ixgbe_netbsd.c,v 1.6.2.2 2018/08/07 13:33:23 martin Exp $ */
 /*
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -162,10 +162,10 @@ post_zalloc_err:
 }
 
 void
-ixgbe_jcl_reinit(struct adapter *adapter, bus_dma_tag_t dmat, int nbuf,
-    size_t size)
+ixgbe_jcl_reinit(struct adapter *adapter, bus_dma_tag_t dmat,
+    struct rx_ring *rxr, int nbuf, size_t size)
 {
-	ixgbe_extmem_head_t *eh = &adapter->jcl_head;
+	ixgbe_extmem_head_t *eh = &rxr->jcl_head;
 	ixgbe_extmem_t *em;
 	int i;
 
@@ -182,8 +182,8 @@ ixgbe_jcl_reinit(struct adapter *adapter
 	 *  Note that the num_rx_desc is currently fixed value. It's never
 	 * changed after device is attached.
 	 */
-	if ((adapter->osdep.last_rx_mbuf_sz == adapter->rx_mbuf_sz)
-	    && (adapter->osdep.last_num_rx_desc == adapter->num_rx_desc))
+	if ((rxr->last_rx_mbuf_sz == rxr->mbuf_sz)
+	    && (rxr->last_num_rx_desc == adapter->num_rx_desc))
 		return;
 
 	/* Free all dmamem */
@@ -205,8 +205,8 @@ ixgbe_jcl_reinit(struct adapter *adapter
 	}
 
 	/* Keep current parameters */
-	adapter->osdep.last_rx_mbuf_sz = adapter->rx_mbuf_sz;
-	adapter->osdep.last_num_rx_desc = adapter->num_rx_desc;
+	rxr->last_rx_mbuf_sz = adapter->rx_mbuf_sz;
+	rxr->last_num_rx_desc = adapter->num_rx_desc;
 }
 
 static void

Index: src/sys/dev/pci/ixgbe/ixgbe_osdep.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.17.6.4 src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.17.6.5
--- src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.17.6.4	Sat Jun  9 14:59:43 2018
+++ src/sys/dev/pci/ixgbe/ixgbe_osdep.h	Tue Aug  7 13:33:23 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_osdep.h,v 1.17.6.4 2018/06/09 14:59:43 martin Exp $ */
+/* $NetBSD: ixgbe_osdep.h,v 1.17.6.5 2018/08/07 13:33:23 martin Exp $ */
 
 /******************************************************************************
   SPDX-License-Identifier: BSD-3-Clause
@@ -208,7 +208,6 @@ struct ixgbe_osdep
 	bus_size_t         mem_size;
 	bus_dma_tag_t      dmat;
 	u16                last_rx_mbuf_sz;
-	u32                last_num_rx_desc;
 	pci_intr_handle_t  *intrs;
 	int		   nintrs;
 	void               *ihs[IXG_MAX_NINTR];

Index: src/sys/dev/pci/ixgbe/ixgbe_type.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22.2.6 src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22.2.7
--- src/sys/dev/pci/ixgbe/ixgbe_type.h:1.22.2.6	Thu Jul 26 23:21:54 2018
+++ src/sys/dev/pci/ixgbe/ixgbe_type.h	Tue Aug  7 13:33:23 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_type.h,v 1.22.2.6 2018/07/26 23:21:54 snj Exp $ */
+/* $NetBSD: ixgbe_type.h,v 1.22.2.7 2018/08/07 13:33:23 martin Exp $ */
 
 /******************************************************************************
   SPDX-License-Identifier: BSD-3-Clause
@@ -4166,6 +4166,7 @@ struct ixgbe_phy_info {
 	enum ixgbe_media_type		media_type;
 	u32 phy_semaphore_mask;
 	bool				reset_disable;
+	bool				force_10_100_autonego;
 	ixgbe_autoneg_advertised	autoneg_advertised;
 	ixgbe_link_speed speeds_supported;
 	ixgbe_link_speed eee_speeds_supported;

Index: src/sys/dev/pci/ixgbe/ixgbe_x550.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_x550.c:1.5.6.4 src/sys/dev/pci/ixgbe/ixgbe_x550.c:1.5.6.5
--- src/sys/dev/pci/ixgbe/ixgbe_x550.c:1.5.6.4	Sat Apr 14 10:25:11 2018
+++ src/sys/dev/pci/ixgbe/ixgbe_x550.c	Tue Aug  7 13:33:23 2018
@@ -847,9 +847,10 @@ static s32 ixgbe_setup_fw_link(struct ix
 		setup[0] |= FW_PHY_ACT_SETUP_LINK_EEE;
 
 #ifdef IXGBE_DENVERTON_WA
-	/* Don't use auto-nego for 10/100Mbps */
-	if ((hw->phy.autoneg_advertised == IXGBE_LINK_SPEED_100_FULL)
-	    || (hw->phy.autoneg_advertised == IXGBE_LINK_SPEED_10_FULL)) {
+	if ((hw->phy.force_10_100_autonego == false)
+	    && ((hw->phy.autoneg_advertised == IXGBE_LINK_SPEED_100_FULL)
+		|| (hw->phy.autoneg_advertised == IXGBE_LINK_SPEED_10_FULL))) {
+		/* Don't use auto-nego for 10/100Mbps */
 		setup[0] &= ~FW_PHY_ACT_SETUP_LINK_AN;
 		setup[0] &= ~FW_PHY_ACT_SETUP_LINK_EEE;
 		setup[0] &= ~(FW_PHY_ACT_SETUP_LINK_PAUSE_RXTX
@@ -862,6 +863,9 @@ static s32 ixgbe_setup_fw_link(struct ix
 		return rc;
 
 #ifdef IXGBE_DENVERTON_WA
+	if (hw->phy.force_10_100_autonego == true)
+		goto out;
+
 	ret_val = ixgbe_read_phy_reg_x550a(hw, MII_BMCR, 0, &phydata);
 	if (ret_val != 0)
 		goto out;

Reply via email to